Seit Mitte Januar 2014 hat bei mir der Paypal Gateway plötzlich nur noch sporadisch funktioniert. Manchmal wurden Zahlungen freigeschaltet, manchmal nicht. Und das, obwohl ich bei mir nichts verändert hatte. Nach ein wenig Debuggen, hab ich gesehen, dass der Script hier nicht mehr weiter geht:

                while (!feof($fp)) {
                        $res = fgets ($fp, 1024);
                        $debugger[] = 'res: '.$res;
                        // - HIER GEHTS NICHT MEHR WEITER - //
                        if (strcmp ($res, "VERIFIED") == 0) {

Die Lösung zum Problem hab ich dann in diesem Blog gefunden. Zwar hatte ich 2013, als Paypal die Umschaltung auf HTTP 1.1 ankündigte, die entsprechenden Änderungen durchgeführt, jedoch waren diese Änderungsangaben anscheinend unvollständig.  Die neue Response hat am Ende zusätzlich noch „\r\n“ drin, weshalb die Bedingung

if (strcmp ($res, "VERIFIED") == 0) { 

jetzt nicht mehr funktioniert. Die Lösung ist einfach und heisst trim:

$res = trim(fgets ($fp, 1024));

That’s it. Nun funktioniert der Gateway wieder!

Referenz: http://www.johnboy.com/blog/http-11-paypal-ipn-example-php-code

Flattr this!