PayPal неоднократно нажимает на URL-адрес уведомления

#php #paypal #paypal-adaptive-payments #adaptive-parallel-payment

#php #paypal #paypal-адаптивные платежи #адаптивный-параллельный-платеж

Вопрос:

Я произвел платеж через paypal adaptive payment и его успешно

затем я отправляю запрос на проверку, и я получил статус = ПРОВЕРЕНО

вот код :

 function process_new() {
$req = 'cmd=_notify-validateamp;'.file_get_contents("php://input");
$ipnmsg=$this->decodePayPalIPN($req);
$ch = curl_init('https://www.sandbox.paypal.com/cgi-bin/webscr');
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_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);
curl_close($ch);
    //if ($this->InstantPaymentNotification->is_valid($req)) 
    if($res=='VERIFIED') // i got verified here
    {
        $txnIds=array();
        $notifications = $this->InstantPaymentNotification->buildAssociationsFromIPN_new($ipnmsg);
        foreach($notifications as $notification){
            $this->IpnNotification->create();
            $this->IpnNotification->save($notification);
            $txnIds[]=$this->IpnNotification->id;
            }
       //$this->InstantPaymentNotificationNew->saveAll($notification);
        $this->__processTransactionNew($txnIds);
    }

    //$this->redirect('/');
}
 

не удается найти причину, по которой notify_url продолжает нажимать.

Если потребуется дополнительная информация, я тоже ее опубликую…

Это история IPN :

введите описание изображения здесь

   `$code = curl_getinfo($curl, CURLINFO_HTTP_CODE);`
 

он возвращает 200, но paypal по-прежнему показывает код состояния HTTP: 500

и URL-адрес уведомления:http://example.com/instant_payment_notifications/process_new не возвращает код состояния HTTP: 500

Спасибо.

Ответ №1:

Посмотрите внимательно на скриншот вашего PayPal: ваш сервер возвращает HTTP-код 500 на эти запросы, что означает, что PayPal интерпретирует это как плохую вещь и что HTTP-транзакция не была завершена успешно, и он будет повторять попытку, пока не получит 200 OK.

Проверьте конфигурацию вашего сервера. Вносили ли вы недавно изменения в конфигурацию вашего сервера? Если вы создадите свою собственную публикацию по URL-адресу конечной точки, вернет ли она вам код статуса 500? Был ли он отключен на техническое обслуживание в течение того времени, когда были отправлены эти запросы? Настройте некоторый мониторинг API, чтобы убедиться, что эти 500 ошибок не возникают часто.

Комментарии:

1. как я проверю это СООБЩЕНИЕ на ваш URL-адрес конечной точки, возвращающий код состояния http 500. curl_setopt($curl, CURLOPT_URL, END_POINT_URL . $APIName . '/' . $APIOperation); where END_POINT_URL=’ svcs.sandbox.paypal.com ‘; $APIName=’Адаптивные платежи’; $APIName=’Оплатить’;

2. Просто создайте запрос, который имитирует запрос IPN PayPal, и получите код состояния. Я понятия не имею, почему вы просто вставили этот код туда…

3. URL-адрес конечной точки, на который я ссылаюсь, указан как «URL-адрес уведомления» на вашем скриншоте.

4. Создайте HTML-форму с действием, установленным для вашего IPN-URL, и включите скрытые поля, соответствующие параметрам, которые вы ожидаете получить от PayPal в IPN. Таким образом, вы можете загрузить его в браузере и отправить напрямую, чтобы увидеть результат на экране и избавиться от любых возникающих ошибок. Имейте в виду, что он не будет проверяться, когда вы делаете это таким образом, потому что данные поступили не от PayPal.

5. Вы также можете просто проверить журналы своего веб-сервера, которые должны содержать ту же информацию, которую вы увидите на экране в браузере. Вероятно, у вас просто какая-то синтаксическая ошибка или что-то происходит в вашем скрипте IPN.