PayPal hitelesítés
Sziasztok,
PayPal fizetést kellene megvalósítanom. A teljes oldal kiinduló kódja adott volt, így a paypal funkcióé is "csak" a hibákat kellett kiszűrnöm belőle. Az oldalon a látogató tetszés szerinti összegekkel fizethet online szolgáltatásért.
Ott tartok, hogy átugrik a látogató a Paypal oldalra, ott fizet, visszatér. A fogadó oldalban lefut egy érvényesítés - megkérdezi a Paypal-től, hogy érvényesnek tekinthető-e az tranzakció.
A probléma, hogy sikeres tranzakciónál is mindig FAIL választ kapok. Alább a használt kódjaim:
--- Ez az indító űrlap:--- Erre a paypal meghívja a valaszfogado_scrptem.php -t GET-el így:
http://.../valaszfogado_scriptem.php?merchant_return_link=Return+to+Merchant
Tehát mindig ezzel a query stringgel tér vissza GET módban.
--- A scriptemben lefut az érvényesítés:----- Eddig a használt kódok.
A Paypal nem igazolja vissza a sikeres tranzakciót sem, mindig FAIL a válasza.
Gondolom, a "cmd=_notify-synch" azt mondja a Paypal-nak, hogy érvényesítési
kérés következik.
Viszont az $auth_token szerepe nem világos.
Kérdésem:
Mi nem jó a fenti kódban? Illetve hogyan lehetne rábírni a helyes működésre?
Az is segítség lenne, ha tudnám, pontosan milyen kérést vár el a Paypal az érvényesítés kezdeményezésekor. A Paypal helpjét már bogarásztam, de nem jutottam vele sokra.
Köszönettel.
■ PayPal fizetést kellene megvalósítanom. A teljes oldal kiinduló kódja adott volt, így a paypal funkcióé is "csak" a hibákat kellett kiszűrnöm belőle. Az oldalon a látogató tetszés szerinti összegekkel fizethet online szolgáltatásért.
Ott tartok, hogy átugrik a látogató a Paypal oldalra, ott fizet, visszatér. A fogadó oldalban lefut egy érvényesítés - megkérdezi a Paypal-től, hogy érvényesnek tekinthető-e az tranzakció.
A probléma, hogy sikeres tranzakciónál is mindig FAIL választ kapok. Alább a használt kódjaim:
--- Ez az indító űrlap:
- <form method="post" action="https://www.paypal.com/cgi-bin/webscr">
- <input type="hidden" name="cmd" value="_xclick" />
- <input type="hidden" name="bn" value="wa_dw_2.0.4" />
- <input type="hidden" name="business" value="sajat_paypal##kukac##email.hu" />
- <input type="hidden" name="receiver_email" value="sajat_paypal##kukac##email.hu" />
- <input type="hidden" name="amount" value="100" />
- <input type="hidden" name="currency_code" value="HUF" />
- <input type="hidden" name="return" value="http://.../valaszfogado_scriptem.php" />
- <input type="hidden" name="item_name" value="Subscription" />
- <input type="hidden" name="undefined_quantity" value="0" />
- <input type="hidden" name="no_shipping" value="1" />
- <input type="hidden" name="no_note" value="1" />
- </form>
http://.../valaszfogado_scriptem.php?merchant_return_link=Return+to+Merchant
Tehát mindig ezzel a query stringgel tér vissza GET módban.
--- A scriptemben lefut az érvényesítés:
- <?php
- $req = "cmd=_notify-synch";
- $tx_token = $_GET['tx'];
- $auth_token = "ZpnErSeMfYzm_hMXS9ldyHtbLlp5t15bww03vmIK-x1k9sfdZ6SyILPuStG";
- $req .= "&tx=".$tx_token."&at=".$auth_token;
- $header = "POST /cgi-bin/webscr HTTP/1.0\r\n";
- $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
- $header .= "Content-Length: ".strlen($req)."\r\n\r\n";
- $fp = fsockopen("www.paypal.com", 80, $errno, $errstr, 30);
- if ($fp)
- {
- fputs($fp, $header.$req);
- // adatok beolvasasa
- $res = "";
- $headerdone = false;
- while(!feof($fp))
- {
- $line = fgets ($fp, 1024);
- if (strcmp($line, "\r\n") == 0)
- {
- // fejlec olvasasa
- $headerdone = true;
- }
- elseif ($headerdone)
- {
- // törzs olvasása
- $res .= $line;
- }
- } //endwhile
- // valasz feldolgozasa
- $lines = explode("\n", $res);
- //ha sikeres a hitelesites:
- if (strcmp ($lines[0], "SUCCESS") == 0)
- {
- // itt csinalok valamit, ha a tranzakcio sikeres volt
- }
- else $errorMsg = "A PayPal nem igazolta vissza a sikeres tranzakciot.";
- } //adatcsatorna eddig
- fclose ($fp);
- ?>
A Paypal nem igazolja vissza a sikeres tranzakciót sem, mindig FAIL a válasza.
Gondolom, a "cmd=_notify-synch" azt mondja a Paypal-nak, hogy érvényesítési
kérés következik.
Viszont az $auth_token szerepe nem világos.
Kérdésem:
Mi nem jó a fenti kódban? Illetve hogyan lehetne rábírni a helyes működésre?
Az is segítség lenne, ha tudnám, pontosan milyen kérést vár el a Paypal az érvényesítés kezdeményezésekor. A Paypal helpjét már bogarásztam, de nem jutottam vele sokra.
Köszönettel.
PDT, Auto Return
Megtaláltam ezt és ezt az itt használt PDT-ról (Payment Data Transfer) a Paypal-on. Észrevettem, hogy a Paypal válaszában nem küldi el a $_GET[tx] változót, benne egy tranzakció tokent. Innentől valószínű, hogy a labda a megrendelőnél van:
"Note: You must enable Auto Return to use Payment Data Transfer"
Ha ezt nem aktiválta a fogadó accoutjánál, akkor a PP nem küldi el a $_GET[tx] változót a válaszában, tehát nem is lehet érvényesíteni azt.