я использую PayPal IPN Listener класс, который работал отлично в течение нескольких месяцев, но недавно (без каких-либо изменений кода) я получил странную проблему.
Следующий код, который проверяет Уведомление о мгновенном платеже, вызывает исключение: Неверный статус ответа: 403
$listener = new IpnListener();
$listener->use_sandbox = PAYPAL_SANDBOX;
try {
$listener->requirePostMethod();
$verified = $listener->processIpn();
} catch (Exception $e) {
error_log('Process IPN failed: ' . $e->getMessage() . " [".$_SERVER['REMOTE_ADDR']."] \n" . $listener->getResponse());
exit(0);
}
GetResponse () Метод дает мне эту информацию:
HTTP/1.1 403 Forbidden
Server: AkamaiGHost
Mime-Version: 1.0
Content-Type: text/html
Content-Length: 284
Expires: Fri, 19 Sep 2014 08:06:58 GMT
Date: Fri, 19 Sep 2014 08:06:58 GMT
Connection: close
Strict-Transport-Security: max-age=63072000
<HTML><HEAD>
<TITLE>Access Denied</TITLE>
</HEAD><BODY>
<H1>Access Denied</H1>
You don't have permission to access "http://www.paypal.com/cgi-bin/webscr" on this server.<P>
Reference #18.682d1402.1411114018.180f58
</BODY>
</HTML>
Я устанавливаю вызовы PayPal ExpressCheckout API с помощью Библиотека Angelleye. Это не самая последняя версия, но пока она работала просто отлично.
Я создаю ссылку для оплаты Express Checkout и размещаю ее в HTML. Пользователь идет по PayPal (в прямом эфире и в песочнице одинаково) по ссылке, платит и успешно возвращается на мою страницу «Спасибо». Платеж получен, но IPN не выполняется.
Заранее спасибо!
Наконец, нашел решение этой проблемы после разговора со службой технической поддержки PayPal. Это была проблема с чем-то, что они изменили и работают над исправлением, но чтобы заставить его работать снова, вам просто нужно отправить HTTP-заголовок «User-Agent» с запросом Curl, что-то вроде:
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: Close', 'User-Agent: company-name'));
Что касается того, как должен быть установлен «User-Agent», он должен содержать не менее 5 символов, вероятно, название вашей компании, как показано в примере, но это не обязательно.
Агент технической поддержки также указал мне на: https://ppmts.custhelp.com/app/answers/detail/a_id/92 если вышеупомянутое исправление не работает, но оно сделало для меня.
Других решений пока нет …