Симулятор PayPal IPN возвращает "Неверный", но я следовал правилам

Итак, у меня есть служба PHP, единственная задача которой - принимать соединения PayPal IPN. Я использую PSR7 $request->getBody()->getContents() чтобы получить следующее из запроса симулятора PayPal IPN.

payment_type=echeck&payment_date=Tue%20Jun%2007%202016%2012%3A56%3A47%20GMT+0100%20%28BST%29&payment_status=Completed&address_status=confirmed&payer_status=verified&first_name=John&last_name=Smith&payer_email=buyer@paypalsandbox.com&payer_id=TESTBUYERID01&address_name=John%20Smith&address_country=United%20States&address_country_code=US&address_zip=95131&address_state=CA&address_city=San%20Jose&address_street=123%20any%20street&business=seller@paypalsandbox.com&receiver_email=seller@paypalsandbox.com&receiver_id=seller@paypalsandbox.com&residence_country=US&item_name=something&item_number=AK-1234&quantity=1&shipping=3.04&tax=2.02&mc_currency=USD&mc_fee=0.44&mc_gross=12.34&mc_gross_1=12.34&txn_type=web_accept&txn_id=787223012&notify_version=2.1&custom=xyz123&invoice=abc1234&test_ipn=1&verify_sign=AFcWxV21C7fd0v3bYYYRCpSSRl31AfBnnvbsi0E9urbgYYn51fFWPj23

Поэтому, когда я отправляю это обратно, используя Guzzle 6 POSTв https://www.sandbox.paypal.com/cgi-bin/webscr используя следующее body,

cmd=_notify-validate&payment_type=echeck&payment_date=Tue%20Jun%2007%202016%2012%3A56%3A47%20GMT+0100%20%28BST%29&payment_status=Completed&address_status=confirmed&payer_status=verified&first_name=John&last_name=Smith&payer_email=buyer@paypalsandbox.com&payer_id=TESTBUYERID01&address_name=John%20Smith&address_country=United%20States&address_country_code=US&address_zip=95131&address_state=CA&address_city=San%20Jose&address_street=123%20any%20street&business=seller@paypalsandbox.com&receiver_email=seller@paypalsandbox.com&receiver_id=seller@paypalsandbox.com&residence_country=US&item_name=something&item_number=AK-1234&quantity=1&shipping=3.04&tax=2.02&mc_currency=USD&mc_fee=0.44&mc_gross=12.34&mc_gross_1=12.34&txn_type=web_accept&txn_id=787223012&notify_version=2.1&custom=xyz123&invoice=abc1234&test_ipn=1&verify_sign=AFcWxV21C7fd0v3bYYYRCpSSRl31AfBnnvbsi0E9urbgYYn51fFWPj23

я получил INVALID для ответа. Я не знаю, является ли это проблемой с другого IP-адреса сервера, который обрабатывает завершение SSL, или я просто схожу с ума.

Я проверил различие между телом запроса симулятора PayPal и телом, которое я отправил обратно без cmd Переменная и нет никакой разницы.

4 ответа

Казалось бы, новый интерфейс симулятора IPN использует javascript Dates в поле payment_date. Если вы установите вручную что-то вроде сегодняшнего дня, все будет хорошо. Является ли это проблемой кодирования / декодирования на стороне симулятора IPN или в вашем прослушивателе IPN, я не уверен.

Мы использовали симулятор IPN в течение последних нескольких дней и становимся непостоянными INVALID сообщения, возвращенные по запросу проверки.

Ожидание нескольких минут или простое нажатие сообщения "Отправить IPN" несколько раз работает.

Мы видели запрос вернуть INVALIDи через несколько секунд тот же запрос возвращается VERIFIED, Довольно раздражает.

Проверка транзакции PayPal всегда возвращает INVALID, если IPN исходит из симулятора IPN, но я нашел обходной путь. Если IPN придет из реальной транзакции, он работает нормально. Вот как я это сделал.

  1. Зайдите в PayPal Developer и войдите в систему
  2. Создайте учетную запись в песочнице (если у вас уже есть учетная запись в песочнице, пропустите эти 2 шага)
  3. Теперь перейдите на https://www.sandbox.paypal.com/ и войдите
  4. Затем зайдите в управление кнопками и создайте кнопку
  5. Не забудьте установить URL-адрес уведомления IPN для своей учетной записи в песочнице
  6. Теперь сделайте реальную тракцию с кнопки, которую вы создали в учетной записи песочницы.
  7. Работает без нареканий

Для справки, у меня возникла эта проблема с Paypals IPN Simulator, и я обнаружил, что решение типично для Paypal:

Проблема: правильно отформатированный тестовый запуск IPN на Paypal IPN Simulator возвращает INVALID, когда все проверки показывают, что он должен быть правильным.

Решение:

  • 1) Симулятор ВСЕГДА работает в среде "песочницы". Я использовал его, чтобы проверить обратную связь с сайтами оплаты в режиме реального времени, и потратил несколько часов, чтобы обнаружить, что ваш IPN должен быть установлен в режим песочницы. Это не упоминается в симуляторе Paypal и кажется жестко закодированным и "принятым" Paypal.

  • 2) Payment_Date поле в симуляторе IPN недопустимо и не принимается при возврате в Paypal, поэтому очистите это поле или установите для этого поля значение null при отправке запускается IPN Simulator.

  • 3) Иногда, как ни странно, Paypal IPN Simulator скажет вам

    IPN не был отправлен, и рукопожатие не было проверено. Пожалуйста, ознакомьтесь с вашей информацией.

    Хотя смоделированная транзакция полностью обработана моим сценарием прослушивателя IPN и возвращаетVERIFIED, Всегда проверяйте собственный сценарий обратной связи, а не дерьмо, которое Paypal решит вам сообщить.


Сочетание вышеуказанных проблем потеряло несколько часов моей жизни. Полоса далеко, гораздо лучше кодировать.

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