PayPal IPN симулятор возвращается «INVALID», но я следил за правилами

Таким образом, у меня есть служба PHP, и только работа заключается в том, чтобы принимать IPN-соединения PayPal. Я использую PSR7 $request->getBody()->getContents() request- $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 

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

 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, или если я просто схожу с ума.

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

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

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

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

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

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

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

Решение:

  • 1) Симулятор ALWAYS работает в среде «песочницы». Я использовал его, чтобы проверить обратную связь с сайтами «LIVE» и потребовалось несколько часов, чтобы узнать, что ваш IPN должен быть установлен в режим песочницы. Это не упоминается в симуляторе Paypal и кажется жестко запрограммированным и «принято» Paypal.

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

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

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

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


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