PayPal IPN

Stimmt, im falle des PayPal starter APIs gibts keine zugangsdaten die du übergeben musst, weil du die transaktion vorher nicht registrierst.

Ich würd jetzt erstmal gucken ob das IPN script überhaupt aufgerufen wird. (im webserver log).

Und dann musst du raus finden was nicht funktioniert

Ich könnte mir vorstellen, dass dieser aufruf:
PHP:
    $fp = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30);
aus irgend nem grund fehlschlägt (Zertifikat fehler oder ähnliches).

Ab besten mal prüfen ob $fp auch tatsächlich erstellt wird.
 
Offensichtlich wirds aufgerufen, wenn der Code, der dafür verantwortlich ist, ausgeführt wird. Die Frage ist nur, warum es Live anders reagiert als in der Sandbox.

Außerdem rate ich dir dringend ab, das Starter zu nutzen. Das Formular mit sämtlichen darin befindlichen Daten kann man manipulieren. Ich könnte bspw. die business-Email ändern, und damit an mich selbst überweisen. Das Geld würde trotzdem bei dir im Shop als "gutgeschrieben" ankommen.

Das Starter ist höchst unsicher.
 
Natürlich verschlüssle ich die wichtigen Daten bevor ich sie übergebe und prüfe sie in der IPN nochmals. Diesen Teil hab ich zum Testen extra rausgenommen, um sicher zu gehen damit es nicht an dem scheitert.
 
Ok, du bekommst im IPN also die business-Email-Adresse auch wieder zurück und kannst diese validieren. Das geht aus der Doku erstmal nicht hervor.

Hast du schon Gelegenheit gehabt, die komplette Antwort mal raus zu loggen, um zu sehen, was da tatsächlich drin steht?

Edit:

Ich würde im IPN mal diesen Teil hier debuggen:

PHP:
    while (!feof($fp)) {
        $res = fgets ($fp, 1024);
        Logger::log($res);  // Wenn du meine Klasse verwendest, ansonsten trigger_error() oder etwas eigenes.
        if (strcmp ($res, 'VERIFIED') == 0) {
        
mail($_POST['payer_email'], "Test", "Hallo Kunde", "From: Test <test@paypalemail.com>");
                    
        } else if (strcmp ($res, 'INVALID') == 0) {
        }

    }

Dann die app.log anschauen und dann siehst du evtl. den Fehler. Im Übrigen würde ich strcmp() für diesen Zweck nicht verwendet. ANSI <=> UTF-8 könnte hier ein Problem darstellen. Verwende statt dessen einfach ein ==, aber was kommt da eigentlich wirklich rüber? Kann es sein, das in dem String evtl. mehr als nur "VERIFIED" drin steht, evtl. sowas wie "payer_status=verified"? Könnte es sein, das der Wert statt groß komplett klein geschrieben ist? strcmp() unterscheidet zwischen Groß- und Kleinschreibung.
 
Zuletzt bearbeitet:
So vielen Dank für eure Hilfe, es funktioniert jetzt einwandfrei! Das Problem lang wirklich an einem Zertifikat Problem.

"fsockopen" mit folgender Zeile austauschen und es funktioniert:
PHP:
$fp = fsockopen ('www.paypal.com', 80, $errno, $errstr, 30);


Ich bin jetzt froh das es funktioniert aber unverständlich ist es für mich dennoch, denn über die Sandbox funktioniert es ja auch über die SSL verbindung.


Gruß proloser
 
Zurück