PayPal IPN - HTTP ERROR

creativeheadz

Erfahrenes Mitglied
Hallo zusammen,
ich wollte gerade die PayPal IPN auf meiner Seite integrieren.Bei einem Schritt komme ich leider nicht weiter. Ich teste das ganze mittels der Sandbox.

Folgende Schritte werden erfolgreich durchlaufen:

Kunde legt Produkt in den Warenkorb
Kunde wählt Zahlungsmethode (PayPal)
Kunde sendet Bestellung
Daten werden per Post an PayPal übergeben
Kunde loggt sich ein
Kunde zahlt

IPN wird aufgerufen

Bezahlvorgang abgeschlossen
Kunde kehrt zurück auf meine Seite

--

IPN wird aufgerufen:

Leider bleibt das IPN Skript an der Stelle HTTP ERROR "hängen" Das habe ich getestet indem ich in jeder if Anweisung einen INSERT eingebaut habe.

Ich nutze den Standard Code von PayPal:

PHP:
<?php
$connect = mysql_connect ("localhost","USER", "PWD")
or die ("keine Verbindung möglich.  Benutzername oder Passwort sind falsch");

mysql_select_db("DBNAME")or die ("Die Datenbank existiert nicht.");

// PHP 4.1

// 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 ('https://www.sandbox.paypal.com', 443, $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
	
$query = mysql_query("INSERT INTO transactions (SUBJECT) VALUES ('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

$query = mysql_query("INSERT INTO transactions (SUBJECT) VALUES ('VERIFIED')");

}
else if (strcmp ($res, "INVALID") == 0) {
	
$query = mysql_query("INSERT INTO transactions (SUBJECT) VALUES ('INVALID')");

}
}
fclose ($fp);
}
?>


Hat jemand ne Idee oder einen Vorschlag zu meinen Problem?
 
Ich glaube ich habe den Fehler gefunden:

Falsch:
PHP:
$fp = fsockopen ('https://www.sandbox.paypal.com', 443, $errno, $errstr, 30);

Richtig:
PHP:
$fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30);
 
Zurück