PayPal IPN прослушиватель вдруг перестал работать

PayPal IPN прослушиватель вдруг перестал работать. С 21 июля 2021 перестал работать PayPal IPN прослушиватель, хотя я ничего не меня в PHP-коде и до этого момента всё прекрасно работало. IPN прослушиватель перестал обрабатывать "Verified" и "Invalid", хотя транзакции продолжают обрабатываться и деньги поступают на счёт PayPal. До Verified всё работает. Так же в истории IPN сообщений в личном кабинете PayPal все транзакции сохраняются, об отправке этих сообщений ошибок нет, все имеют код 200. Повторные отправки так же сохраняются и имеют код 200.

Вот часть моего IPN прослушивателя, который раньше всегда работал прекрасно:

$raw_post_data  = file_get_contents('php://input');
$raw_post_array = explode('&', $raw_post_data);
$paypal_post    = array();

foreach ($raw_post_array as $keyval) {
    $keyval = explode ('=', $keyval);
    if (count($keyval) == 2) {
        $paypal_post[$keyval[0]] = urldecode($keyval[1]);
    }
}

//extract vars
extract($paypal_post, EXTR_OVERWRITE);

// build request
$req = 'cmd=' . urlencode('_notify-validate');
$ipn_vars = 'cmd=' . urlencode('_notify-validate');
foreach ($paypal_post as $k => $v) {
    $v = urlencode($v);
    $req .= "&$k=$v";
}

// sort array keys (only after building $req var which will be used to send curl to paypal)
ksort($paypal_post);
foreach ($paypal_post as $k => $v) {
    $ipn_vars .= "\n$k=" . urldecode($v);
}

/*--------------------------------------------------------------
SEND POST BACK TO PAYPAL
--------------------------------------------------------------*/
// paypal mode
$paypal_mode = 1;

// LIVE on/off
if($paypal_mode == 1) {
    $paypal_url = 'https://ipnpb.paypal.com/cgi-bin/webscr';
}
// else is SANDBOX site
else {
    $paypal_url = 'https://ipnpb.sandbox.paypal.com/cgi-bin/webscr';
}

// Step 2: POST IPN data back to PayPal to validate
$ch = curl_init($paypal_url);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
curl_setopt($ch, CURLOPT_SSLVERSION, 6);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: Close'));
$res = curl_exec($ch);
$info = curl_getinfo($ch);

if (!($res)) {
    $errno = curl_errno($ch);
    $error_message = curl_strerror($errno);
    $errstr = curl_error($ch);
    error_log("Got ".[$errno]." ".$errstr." (".$error_message.") when processing IPN data");
    curl_close($ch);
    exit;
}
curl_close($ch);

//---------------------------------------------------------------------
    
if (strcmp ($res, "Verified") == 0) {
      // В этом месте происходит добавление в базу данных информации о покупке и отправка писем покупателям
}
else if (strcmp ($res, "Invalid") == 0) {
     // Здесь идёт запись лога в текстовый файл с IPN
}

Всё прекрасно работает до строки:

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

а дальше ничего не происходит. В чем может быть причина?

UPD: Позже я обнаружил, что так же перестал работать PDT, выдавая ошибку на параметр "payment_status", который парсится с PayPal

Это у всех такие проблемы с PayPal в последнее время???


Ответы (0 шт):