DoRiMaN
Erfahrenes Mitglied
Halli Hallo an Alle!
Ich habe da ein Problem beim Integrieren des PayPal IPN in meinen Shop...
Ich habe alle Anleitungen, Foren und Seiten durchsucht, aber werde einfach nicht schlau...
Ich habe in der PayPal Sandbox ein Developer-Konto, mit 2 Testkonten (ein Käufer und ein Business-Konto) eröffnet. Beide Testkonten sind verifiziert...
In den Zahlungsoptionen des Business-Kontos habe ich IPN aktiviert, und verweise auch auf die korrekte Script-Datei.
Die sieht so aus:
ist eigentlich ziemlich gleich wie das von PayPal angebotene Beispiel... Meine Änderungen:
- Mail und Log-Funktionen
- Sandbox.paypal.com
- Custom-Variable laden
Wenn ich dieses Script mit dem IPN-Test-Script auf http://www.eliteweaver.co.uk/testing teste, funktioniert alles einwandfrei. Ich erhalte das Testmail, und im Log-File wird alles als OK beschrieben. Auch meine Query (hier übersichtshalber nicht dabei) wird ausgeführt.
Wenn ich das Script aber in der Sandbox teste, geschieht folgendes:
- Das Testmail erhalte ich
- Verbindung wird hergestellt
- Resultat des $fp: Ich erhalte vom PayPal-Server einen 500er Internal Server Error. Hier der Auszug aus dem Log für die Variable $result:
Weiss irgend jemand, ob dies ein Problem mit meinem Script, oder mit der PayPal-Sandbox ist? Wie bereits geschrieben, konnte ich nichts finden was mir weiterhelfen konnte...
Um dieses Problem zu umgehen, habe ich gedacht, ich verwende PDT und nicht IPN. Das Script habe ich von PayPal übernommen, alles korrekt konfiguriert. Nur wird beim Zurückleiten des Benutzers die GET-Variable tx nicht gesetzt, also kann ich die Transaktion nicht prüfen im Script... Ist dieses Problem bekannt?
Danke im Voraus und Gruss
DoRiMaN
Ich habe da ein Problem beim Integrieren des PayPal IPN in meinen Shop...
Ich habe alle Anleitungen, Foren und Seiten durchsucht, aber werde einfach nicht schlau...
Ich habe in der PayPal Sandbox ein Developer-Konto, mit 2 Testkonten (ein Käufer und ein Business-Konto) eröffnet. Beide Testkonten sind verifiziert...
In den Zahlungsoptionen des Business-Kontos habe ich IPN aktiviert, und verweise auch auf die korrekte Script-Datei.
Die sieht so aus:
PHP:
<?php
@mail('MEINE@E-MAIL.COM', 'IPN-Test', 'this is an IPN Test: '.date('d.m.Y H:i:s', time()), 'From: MEINE@E-MAIL.COM');
include('includes/headervars.inc.php'); // Stellt Funktionen und Variabeln zur Verfügung
$log = fopen('logs/log_'.time().'.txt', 'w+'); // Testlog erstellen
if($dbVerbindung===true && $functions->shopOnline && isset($_POST['mc_currency'])){
fwrite($log, 'Shop ONLINE
');
$req = 'cmd=_notify-validate';
foreach($_POST as $key => $value){
$value = urlencode(stripslashes($value));
$req .= "&$key=$value";
}
fwrite($log, 'Request to send: '.$req.'
');
// Validierungs-POST zurückschicken
$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";
$header .= "Host: www.sandbox.paypal.com\r\n";
//$fp = fsockopen('www.paypal.com', 80, $errno, $errstr, 30);
$fp = fsockopen('www.sandbox.paypal.com', 80, $errno, $errstr, 30);
//$fp = fsockopen('www.eliteweaver.co.uk', 80, $errno, $errstr, 30);
fwrite($log, 'Header: '.$header.'
');
$txn_id = $_POST['txn_id'];
$payment_status = $_POST['payment_status'];
$payment_amount = $_POST['mc_gross'];
$receiver_email = $_POST['receiver_email'];
$payer_email = $_POST['payer_email'];
$payment_date = date('Y-m-d H:i:s');
$bestellung_id = $_POST['custom'];
$first_name = $_POST['first_name'];
$last_name = $_POST['last_name'];
$address_street = $_POST['address_street'];
$adress_city = $_POST['adress_city'];
$address_zip = $_POST['address_zip'];
$address_country = $_POST['address_country'];
if(!$fp){
// HTTP ERROR
fwrite($log, 'HTTP-Error: '.$errno.': '.$errstr.'
');
} else {
fwrite($log, 'Connection estabilished
');
fputs($fp, $header.$req);
$counter = 0;
while(!feof($fp)){
$counter++;
$res = fgets($fp, 1024);
fwrite($log, 'Result: '.$res.'
');
if(strcmp($res, "VERIFIED")==0 && ($payment_status=="Completed" || $payment_status=="Pending")){
fwrite($log, 'Result: VERIFIED
');
} elseif(strcmp($res, "INVALID")==0){
fwrite($log, 'Result: INVALID
');
$cls_mailer->mailSenden('MEINE@E-MAIL.COM', 'Invalid PayPal Payment', $bestellung_id.': '.date('d.m.Y H:i:s', time()), true);
}
}
fclose($fp);
}
} else {
fwrite($log, 'Shop OFFLINE or POST NOT PRESENT');
}
fclose($log);
?>
- Mail und Log-Funktionen
- Sandbox.paypal.com
- Custom-Variable laden
Wenn ich dieses Script mit dem IPN-Test-Script auf http://www.eliteweaver.co.uk/testing teste, funktioniert alles einwandfrei. Ich erhalte das Testmail, und im Log-File wird alles als OK beschrieben. Auch meine Query (hier übersichtshalber nicht dabei) wird ausgeführt.
Wenn ich das Script aber in der Sandbox teste, geschieht folgendes:
- Das Testmail erhalte ich
- Verbindung wird hergestellt
- Resultat des $fp: Ich erhalte vom PayPal-Server einen 500er Internal Server Error. Hier der Auszug aus dem Log für die Variable $result:
Code:
Result: HTTP/1.1 500 Internal Server Error
Result: Date: Wed, 28 Mar 2007 13:53:05 GMT
Result: Server: Apache/1.3.27 (Unix) mod_ssl/2.8.12 OpenSSL/0.9.7a mod_fastcgi/2.4.2 PHP/4.3.2
Result: Connection: close
Result: Content-Type: text/html; charset=iso-8859-1
Result:
Result: <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
Result: <HTML><HEAD>
Result: <TITLE>500 Internal Server Error</TITLE>
Result: </HEAD><BODY>
Result: <H1>Internal Server Error</H1>
Result: The server encountered an internal error or
Result: misconfiguration and was unable to complete
Result: your request.<P>
Result: Please contact the server administrator,
Result: webmaster@paypal.com and inform them of the time the error occurred,
Result: and anything you might have done that may have
Result: caused the error.<P>
Result: More information about this error may be available
Result: in the server error log.<P>
Result: <P>Additionally, a 404 Not Found
Result: error was encountered while trying to use an ErrorDocument to handle the request.
Result: <HR>
Result: <ADDRESS>Apache/1.3.27 Server at <A HREF="mailto:webmaster@paypal.com">www.sandbox.paypal.com</A> Port 80</ADDRESS>
Result: </BODY></HTML>
Weiss irgend jemand, ob dies ein Problem mit meinem Script, oder mit der PayPal-Sandbox ist? Wie bereits geschrieben, konnte ich nichts finden was mir weiterhelfen konnte...
Um dieses Problem zu umgehen, habe ich gedacht, ich verwende PDT und nicht IPN. Das Script habe ich von PayPal übernommen, alles korrekt konfiguriert. Nur wird beim Zurückleiten des Benutzers die GET-Variable tx nicht gesetzt, also kann ich die Transaktion nicht prüfen im Script... Ist dieses Problem bekannt?
Danke im Voraus und Gruss
DoRiMaN