14. juli 2010 - 21:00Der er
17 kommentarer og 1 løsning
Quickpay og call-quickpay - filen
Godaften,
Situationen er den at jeg er ny indenfor quickpay's betalingsløsninger, og jeg skulle derfor høre om der er nogle, der ligger inde med et eksempel på hvordan call-quickpay.php skal se ud når man ønsker at smide indhold i ens database?
Det skal vel og mærke kun ske, hvis betalingstransaktionen gennemføres - og så skal jeg gerne have nogle informationer med om ordrenr osv, så jeg kan spore brugerne inde i quickpay's betalingsoversigt.
PS. Jeg har brugt meget tid på at finde information omkring det inde på quickpay's egen hjemmeside, og er også i løbende kontakt med en supporter. Det går dog pænt langsomt og er begrænset hvor meget hjælp, der har været at hente so far :/
Jeg synes også det virker meget nemt at implementere so far, men sidder lidt fast i hvordan jeg får smidt info (både fra indtastning, men også ordre info osv) med ind i min egen database når transaktionen gennemføres..
Du kan vel ikke smide et eksempel op på hvordan en simpel og sikker call/callback fil kan se ud?
Her gik jeg så ud fra at man "blot" skulle indsætte info i sin database i stedet for den mail-funktion de har smidt ind. Men i så fald vil det jo ske uanset om transaktionen gennemføres eller ej (såvidt jeg har forstået på dem) :S Og jeg kan heller ikke helt få noget information med fra $POST -arrayet
Du vil vel ikke smide alle infoene ind i databasen, som du får fra callback'et?
Den mest almindelige ting jeg gør er at kontrollere om 'qpstat' variablen er andet end '000' - hvis den er det, er betalingen ikke gennemført. I deres dokumentation står der hvad fejlkoderne ellers kan betyde og så kan du jo - som en service hvis du mener det er vigtigt - fortælle kunden, hvorfor betalingen ikke blev accepteret. Normalt, får man jo bare at vide at den ikke gik og så kan man prøve igen.
Men hvis 'qpstat' er '000', så kan du tage 'ordernumber' og opdatere den som betalt i databasen.
Bruger du Payment Window, vil din kunde sædvanligvis få at vide der at betalingen ikke kunne gennemføres og derfor er det kun relevant for dig at tage højde for om der kunne betales.
Og er du bange for at folk selv kan finde på at kontakte din callback funktion med de 'nødvendige' oplysninger, så husk du kan kontrollere din MD5 streng sammen med din MD5 secret.
Altså jeg har 4 input felter + radiobutton. Der skal jeg have smidt den indtastede info ind i databasen når transaktionen er fuldført, men fra selve callbacket (hvis jeg forstår dig ret), skal jeg blot have ordrenummeret med..
Man smides ind i et nyt vindue ved betalingen (vil tro det er payment window) og herfra bliver man så smidt til ok.php, hvis betalingen går godt. Hvis der sker en fejl og man fx indtaster 2 tal og 1 bogstav som de tre hemmelige numre, bliver den inde på quickpay vinduet og beder en om at forsøge igen.
Men hvordan skal min callback side så se ud :/ ? Her er et tyndt bud fra min side af med udgangspunkt i den de selv har lagt op:
<?php $fields = array('msgtype','ordernumber','amount','currency','time','state','qpstat','qpstatmsg','chstat','chstatmsg','merchant','merchantemail','transaction','cardtype','cardnumber','md5check'); while (list(,$k) = each($fields)) { if (isset($_POST[$k])) { $message .= "$k: " .$_POST[$k] . "\r\n"; } } if (isset($_POST['chstat']) && $_POST['chshat'] != '000') { $sql="INSERT INTO $tbl_name (input1, input2, input3, input4, radiobtfeltet, ordrenr) VALUES ('...', '...', '...', '...', '$???')" or die(mysql_error()); $completed = mysql_query($sql); } ?>
Vi prøver lige igen, da jeg misforstod dig igår ;) Har også fået et nyt svar fra quickpay, der bekræfter det du siger med qpstat. De nævner dog også at chstat skal tjekkes.
Ser det rigtigt ud i dine øjne og i så fald - hvordan får jeg værdien med fra de post-variable, som også smides ind i quickpays system? Jeg havde håbet lidt på det var så simpelt som $_POST['ordernumber'], men desværre :/
$res = mysql_query($sql); // Istedet for at bare at dø, så kunne det være rart at modtage en mail om hvorfor SQL'en fejler if( !$res ) mail("dig@example.com", "Callback fejl", "SQL fejl: ".mysql_error(), "From: dig@example.com\r\n");
?>
Koden er utestet, men det giver da et indtryk af hvordan du kan gøre det simpelt (med integreret eksempel på din sql sætning).
Nu begynder det i hvert fald at ligne noget takket være din hjælp ;) Der er dog stadig nogle ting, der driller..
Jeg kan godt få indhold i variablerne $ordernumber og $transaction, men jeg får intet indhold ud fra mine egne, hvis jeg definerer dem på samme måde inputs - hvordan kan det være?
Fx $ordernumber = $_POST["ordernumber"]; $transaction = $_POST["transaction"]; $test = $_POST["navnpåmitinput"];
Her får jeg intet ud fra variablen $test, selvom inputtet/tekstboksen er udfyldt. Er det fordi man "smides" hen i et andet vindue og derfor bliver nødt til at tage sessions i brug? I så fald - du kan vel ikke give hints om hvordan jeg får det gjort på en sikker måde :/ ?
Hvis det er custom variabler du snakker om, bliver de ikke sendt med i dit callback. Hele idéen med callbacket er at du får noget bestemt data retur - ikke mere, ikke mindre - til at kontrollere en betaling. Det er stort set alt hvad callback er til for; at kontrollere om betalingen er gået igennem.
Det ville være noget rigtig snask at begynde at overføre session variabler til dit callback, så jeg vil opfordre dig til at finde en anden løsning på det problem. Om end ikke så anvend retur-url'en til at genskabe din session og udfør resten af dit behov, hvis du kan kontrollere om ordren er betalt.
Jeg tror du har misforstået idéen med de her custom variabler og retur/callback URL'erne.
De custom variabler du kan definere er nogle data som kommer ind i betalingsgatewayen. Det er der de kan ses - ikke andre steder. Du kan eksempelvis bruge dem til at, i dine kontoudtog, at afgøre hvilke af dine kunder som måske har brugt rabatkuponer, er blevet refereret fra en partner eller noget helt tredie du gerne vil knytte til betalingen - men den information er stadig kun tilgængelig via Quickpay manageren. Du får dem ikke retur og kan ikke anvende dem til noget praktisk i forbindelse med dine callbacks eller retur URL'er.
Din 'continueurl' vil være den URL som du returnerer til, hvis betalingen er gået godt fra Quickpays betalingsvindue. Langt de fleste gør det at de bare sender kunden retur til en side som viser den online faktura. Det er også nemt.
Din 'cancelurl' er den URL du skal anvende hvis kunden aktivt vælger at afbryde sin betaling i Quickpays betalingsvindue - mange stiller bare tilbage til den samme side, som betalingen blev iværksat på.
Din 'callbackurl' er den URL som quickpay skal kontakte og give melding om hvordan betalingen er gået. Den kan give dig sikkerhed for at ordren rent faktisk er blevet betalt og folk ikke manuelt bare tastter 'continueurl' ind i browseren og får en faktura.
Callbacket har stort set kun til formål at bekræfte betalingen - du får ikke nogen custom variabler med retur eller noget; kun dem der står i dokumentationen.
Et ganske normalt opsæt er at en ordre gemmes som en række i en tabel. Den kunne se således ud:
Når rækken gemmes, inden betalingen, vil kundens 'betalt' felt måske være sat til 0 - det er din indikation af at kunden ikke har betalt for sin vare og derfor ikke kan modtage en faktura.
Når callbacket så kontakter din callbackurl, kan du bekræfte om betalingen er gået igennem og opdatere feltet 'betalt' til 1 samt indsætte transaktions id'et i sit respektive felt.
Andet skal callback ikke gøre.
Hvis du skal bruge dine custom variabler, må du gemme dem sammen med kundens ordre i stedet for at sende dem til Quickpay, så du kan hive dem frem senere (f.eks. til fakturaen).
Jeg er bare ikke med på hvordan du så får kundenavn og kundeadresse smidt med ind i tabellen? For det gør du vel ud fra de inputs som du har på siden, hvor brugeren kan indtaste sit navn og adresse (som i mine øjne er custom variable) :S Eller har quickpay variable fastsat til det som man kan koble sammen med sine inputs?
Ellers går jeg ud fra at vi er ude i brug af sessions til at gemme mine custom variabler..
Med hensyn til den opsætning du snakker om - er det også bare i callback filen det hele skal foregå? For så skal jeg vidst lige ha' ændret lidt i den nuværende kode derinde som du har hjulpet med :)
Du har forhåbentligt gemt alt hvad du skal bruge på kunden på forhånd? Hvordan sikrer du dig ellers et unikt ordrenummer?
Du skal jo fortælle quickpay hvilket ordrenummer du vil anvende; den mest simple metode at gøre det på er at gemme alle oplysningerne på handlen i databasen - altså, både hvilke varer, hvem kunden er, hvor varerne skal sendes hen og så videre. I din database må du jo så sætte et flag på ordren hvorvidt kunden har betalt eller ej; alt det skal ordnes inden du sender kunden til betalingen. Det er så callback'et der fortæller dig om kunden betaling er gået igennem eller ej - og det er det eneste du skal vide for kunne sende kunden videre til sin online faktura.
Ah ja, naturligvis. Nu gav det straks meget mere mening for mig med hjælp fra din fine flowchart ;)
Det er fordi man på min side ikke kan vælge mellem nogle produkter (her er der kun 1), så når man trykker på en submit knap ryger man bare direkte til betalingen og derfor bliver der ikke smidt nogen information i databasen omkring kunden inden da. Jeg er derfor kommet til at undlade "gå-til-betaling's"-siden ved en fejl..
Men jeg prøver lige at lege lidt videre med det i morgen, og så skriver jeg lige igen hvis det volder mere problemer. Umiddelbart kan jeg dog ikke se den store hindring i det længere og du har været til stor gavn so far! ;)
Yes, så fik jeg det til at spille med den omstrukturering ;)
Er lidt i tvivl om metoden er helt sikker, men mit ordrenr danner jeg ved hjælp af time() og dette smider jeg så ind i en session, som jeg henter frem igen når man kommer til kvitteringssiden efter betalingen er fuldent. På kvitteringssiden får man så tilsendt en e-mail med betalingsoplysningerne som "bevis"...
I øvrigt så kører jeg jo pt. mine quickpay-transaktioner i "debug/test"-mode. Det virker lidt som om man kan bruge mere eller mindre alle talkombinationer uden at man bliver smidt til fejl-siden - det er vel kun i test-mode det kan lade sig gøre ikke ?
Men anyways - du behøver heller ikke svare på ovenstående ;) Du har været mere end rigeligt til hjælp allerede og hvis du smider et svar, kan du få dine velfortjente points!
Det virker lidt dumt at bruge time() til at lave ordrenumre; du angiver vel på forhånd et ID på kundens betaling, når du gemmer denne i databasen og det giver vel hver betaling et unikt ID - idet man normalt bruger auto_increment til at give en ordre et unikt ID, kan du lige så godt anvende det; ellers skal du jo alligevel gemme et ekstra unikt nummer i databasen udover det automatiske optalte ID - det er hvad man normalt vil kalde for 'dobbeltkonfekt'... Dine sessions er egentligt ligegyldige, når først dataene er gemt i databasen...
Men nej, så længe ordrenummeret er på mindst fire tal tager Quickpay fint imod.
Men bruger du ikke session til at hente kvitteringen ud? Eller er quickpay variablen med ordrenr/transaction stadig aktiv når man bliver smidt videre til "kvitteringssiden"?
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.