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:

<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>
--- 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:

<?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);

?>
----- 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.