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 в последнее время???