Paypal IPN просто не будет работать должным образом

Это мой код:

// post back to PayPal system to validate
$header .= "POST cgi-bin/webscr HTTP/1.1\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
    $header .="Host: www.paypal.com\r\n";
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
    $header .="Connection: close\r\n\r\n";
$fp = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30);

if (!$fp) { // HTTP ERROR
    echo 'HTTP ERROR';
} else {

    fputs ($fp, $header . $req);
    while (!feof($fp)) { $res = fgets ($fp, 2048); }

        if (strpos ($res), "VERIFIED") !== false) {
            switch ($transaction_type) {
                case "subscr_payment": 
                    if ($payment_status == "Completed" &&strtolower($receiver_email) == strtolower($receiverEmail)&&$currency=$payment_currency)

Ранее я пытался войти в trim утверждение в этой строке:

if (strpos ($res, "VERIFIED") !== false)

Я изменил это на:

if (strcmp (trim($res), 'VERIFIED') == 0)

1 ответ

Решение

Ваш заголовок 'Connection: close' (который заканчивается на \r\n) правильно следует пустая строка (т.е. другая \r\n), являясь последним заголовком, но также и предыдущий заголовок ('Content-Length'). Таким образом, заголовок "Connection: close" рассматривается как часть полезной нагрузки. Удалите пустую строку из предыдущего заголовка, т.е. измените 2-ую последнюю \r\n\r\n в \r\n, На самом деле я бы поменял их обоих и добавил бы еще один отпечаток \r\n после последнего заголовка, чтобы вы больше не ломали его.

Другие вопросы по тегам