2010-11-22 3 views
5

Also, das ist ein neues bei mir. Mein Paypal IPN arbeitet seit einiger Zeit und hat heute einen Fehler bekommen.Paypal IPN Fehler mit eingebetteten Newline in Adresse

Während der Postback mit PayPal (Hinzufügen cmd = _notify-validate) zu verifizieren, sagt der PayPal-Responder "Nein, das war nicht von mir". Das einzige, was seltsam diesen bestimmten Eintrag ist der Weg (glaube ich) die Benutzer ihre Adresse angegeben:

123 Adresse Straße
# 789

Alles andere scheint normal und die IPN-Handler andere Benachrichtigungen ganz ist der Umgang mit glücklich.

Wer hat so etwas gesehen?

+0

Verwendung: CodeIgniter für PHP auf Apache/Linux. (Nicht dass ich das für relevant halte, aber wer weiß). Buchung mit curl_exec. –

Antwort

4

Okay, also habe ich meinen Fehler gefunden, und ja, es bezieht sich auf den Zeilenumbruch in der Adresse.

Im Grunde tat ich dies:

foreach ($post_array as $name => $value) { 
    $value = urlencode($value); 
    $post_string .= $name . '=' . $value . '&'; 
} 
$post_string .= "cmd=_notify-validate"; 

Wenn ich auch die /n zu einem /r/n konvertieren musste, etwa so:

foreach ($post_array as $name => $value) { 
    $value = urlencode(str_replace("\n", "\r\n", $value)); 
    $post_string .= $name . '=' . $value . '&'; 
} 
$post_string .= "cmd=_notify-validate"; 

Jetzt PayPal glücklich ist.

Le Seufzer.

0

Ein bisschen mehr Info, da ich gerade einen halben Tag mit diesem Bug verbracht habe.

Dies scheint ein Fehler durch den CodeIgniter Rahmen eingeführt werden, die ich auch benutze, CodeIgniter ist die Standardisierung neue Linien https://github.com/EllisLab/CodeIgniter/blob/2.1.4/system/core/Input.php#L707

Dies scheint die IPN-Antwort und die Antwort oben zu brechen, ist der beste Weg, um es zu beheben.

$value = urlencode(str_replace("\n", "\r\n", $value));