ugrás a tartalomhoz

PayPal hitelesítés

Thom · 2009. Júl. 20. (H), 18.25
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:
  1. <form method="post" action="https://www.paypal.com/cgi-bin/webscr">  
  2. <input type="hidden" name="cmd" value="_xclick" />  
  3. <input type="hidden" name="bn" value="wa_dw_2.0.4" />  
  4. <input type="hidden" name="business" value="sajat_paypal##kukac##email.hu" />  
  5. <input type="hidden" name="receiver_email" value="sajat_paypal##kukac##email.hu" />  
  6. <input type="hidden" name="amount" value="100" />  
  7. <input type="hidden" name="currency_code" value="HUF" />  
  8. <input type="hidden" name="return" value="http://.../valaszfogado_scriptem.php" />  
  9. <input type="hidden" name="item_name" value="Subscription" />  
  10. <input type="hidden" name="undefined_quantity" value="0" />  
  11. <input type="hidden" name="no_shipping" value="1" />  
  12. <input type="hidden" name="no_note" value="1" />  
  13. </form>  
--- 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:
  1. <?php  
  2.   
  3. $req = "cmd=_notify-synch";  
  4.   
  5. $tx_token = $_GET['tx'];  
  6. $auth_token = "ZpnErSeMfYzm_hMXS9ldyHtbLlp5t15bww03vmIK-x1k9sfdZ6SyILPuStG";  
  7. $req .= "&tx=".$tx_token."&at=".$auth_token;  
  8.   
  9. $header  = "POST /cgi-bin/webscr HTTP/1.0\r\n";  
  10. $header .= "Content-Type: application/x-www-form-urlencoded\r\n";  
  11. $header .= "Content-Length: ".strlen($req)."\r\n\r\n";  
  12.   
  13.   
  14. $fp = fsockopen("www.paypal.com", 80, $errno$errstr, 30);  
  15.   
  16. if ($fp)  
  17.     {  
  18.     fputs($fp$header.$req);  
  19.     // adatok beolvasasa  
  20.     $res = "";  
  21.     $headerdone = false;  
  22.     while(!feof($fp))  
  23.         {  
  24.         $line = fgets ($fp, 1024);  
  25.         if (strcmp($line"\r\n") == 0)  
  26.             {  
  27.             // fejlec olvasasa  
  28.             $headerdone = true;  
  29.             }  
  30.         elseif ($headerdone)  
  31.             {  
  32.             // törzs olvasása  
  33.             $res .= $line;  
  34.             }  
  35.         } //endwhile  
  36.       
  37.     // valasz feldolgozasa  
  38.     $lines = explode("\n"$res);  
  39.       
  40.     //ha sikeres a hitelesites:  
  41.     if (strcmp ($lines[0], "SUCCESS") == 0)  
  42.         {  
  43.         // itt csinalok valamit, ha a tranzakcio sikeres volt  
  44.         }  
  45.       
  46.     else $errorMsg = "A PayPal nem igazolta vissza a sikeres tranzakciot.";  
  47.     } //adatcsatorna eddig  
  48. fclose ($fp);  
  49.   
  50. ?>  
----- 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.
 
1

PDT, Auto Return

Thom · 2009. Júl. 21. (K), 09.29
Közben annyira jutottam, hogy átbogarásztam a drupal és az oscommerce paypal modulját, de azok másféle hitelesítést használnak, "cmd=_notify-validate" -el kezdeményezett IPN verifikációt.
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.