Paypal IPN/PDT

Stefan Brinkers

Angesehenes Mitglied
Vielleicht kann mir ja hier jemand weiterhelfen...

das Script stammt von Paypal:
CODE <?php
// read the post from PayPal system and add 'cmd'
$req = 'cmd=_notify-validate';

foreach ($_POST as $key => $value) {
$value = urlencode(stripslashes($value));
$req .= "&$key=$value";
}

// post back to PayPal system to validate
$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.eliteweaver.co.uk', 80, $errno, $errstr, 30);

// assign posted variables to local variables
$item_name = $_POST['item_name'];
$item_number = $_POST['item_number'];
$payment_status = $_POST['payment_status'];
$payment_amount = $_POST['mc_gross'];
$payment_currency = $_POST['mc_currency'];
$txn_id = $_POST['txn_id'];
$receiver_email = $_POST['receiver_email'];
$payer_email = $_POST['payer_email'];

if (!$fp) {
// HTTP ERROR
} else {
fputs ($fp, $header . $req);
while (!feof($fp)) {
$res = fgets ($fp, 1024);
if (strcmp ($res, "VERIFIED") == 0) {
// check the payment_status is Completed
// check that txn_id has not been previously processed
// check that receiver_email is your Primary PayPal email
// check that payment_amount/payment_currency are correct
// process payment
}
else if (strcmp ($res, "INVALID") == 0) {
// log for manual investigation
}
}
fclose ($fp);
}
?>


bis auf die eliteweaver.co.uk Adresse (normalerweise steht da paypal.com) hab ich eigentlich nix geändert.
Wenn ich nun allerdings das Script mit Hilfe von http://www.eliteweaver.co.uk/testing/ipntest.php testen möchte, wird mir gesagt das das Script nicht antwortet.

Jemand eine Ahnung woran das liegen könnte. Ich muss zugeben das ich das Script auch nur teilweise verstehe, aber so keinen Fehler entdecken kann
wacko.gif
 
Jo, und genau da liegt der Hund begraben, denn der Kommentar im Script sagt doch, dass das Script zurück zu paypal.com posten muss:

// post back to PayPal system to validate
$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.eliteweaver.co.uk', 80, $errno, $errstr, 30);

also ändere das mal zurück, dann sollte es funktionieren.

Ausserdem ist das script nicht dazu gedacht, von einem Browser aufgerufen zu werden, sondern automatisch von einem HTTP POST request vom Paypal server aus, nachdem der Kunde seine Transaktion durchgeführt hat.

Beim Punkt // process payment kannst Du dann die Aktionen einbauen, die das Script nach Validierung der Transaktion für den Kunden unternehmen soll, z.B. Bestellung zur Lieferung freigeben oder dem Kunden in die Gruppe der zahlenden Mitglieder aufnehmen.
 
nun ja, unter der eliteweaver Adresse soll das ganze aber getestet werden können, indem man die Adresse in das Script einträgt und auf deren Seite im Formular die URL angibt auf der das Script läuft. Die senden dann eine Test-Post an diese URL, und das Script soll dann eliteweaver antworten.

Wenn ich´s ganz normal www.paypal.com eintrage habe ich nämlich das Problem, das mir Paypal ein "invalid" zurückliefert.
 
lies nochmal die Gebrauchsanweisung.

Du verdrehst einige Dinge:

1- eliteweaver schickt Kunden zu Paypal zwecks Bezahlung
2- nach Zahlung postet Paypal die IPN an die von Dir bei Paypal angegebene Adresse (da wo das script liegt)
3- das Script empfängt die IPN, und muss die IPN bei Paypal validieren (also macht das script ein fsockopen auf Paypal, nicht umgekehrt)
 
QUOTE NOTE: Please ensure your IPN Handler points to this script whilst testing!
Extra: www.eliteweaver.co.uk/cgi-bin/webscr can also be used.....


hast du dir die Seite denn angesehen http://www.eliteweaver.co.uk/testing/ipntest.php??

es mag sein das ich wirklich vollkommen auf dem Schlauch stehe, dann bitte ich um entschudligung, aber das ganze soll das doch testen (nicht irgendwas bezahlen)!

was habe ich davon wenn ich die Daten die mir eliteweaver an mein Script sendet, an paypal sende? die sollen ja ebend auch wieder an eliteweaver zurück, da diese den paypal server nachahmen um das Script nunmal zu testen.

unsure.gif
blink.gif
wacko.gif
 
nur zur info:

hab das script von eliteweaver nicht weiter getestet,
habe aber inzwischen herausgefunden warum mir Paypal ein INVALID zurücksendet:
man muss, wenn man das ganze per Sandbox testet, auch in dem Antwort-Script folgendes angeben:
CODE $fp = fsockopen ('www.sandbox.paypal.com', 80, $errno, $errstr, 30);

statt

CODE $fp = fsockopen ('www.paypal.com', 80, $errno, $errstr, 30);


(wurde natürlich nirgends erwähnt
mad.gif
)

naja hauptsache es funktioniert nun endlich
biggrin.gif
 
wieso muss man sandbox angeben?
ich habe das gleiche problem, dass paypal immer INVALID schickt. Was muss ich machen, damit es korrekt funktioniert?
 
Zurück
Oben