Симулятор 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¬ify_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¬ify_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 придет из реальной транзакции, он работает нормально. Вот как я это сделал.
- Зайдите в PayPal Developer и войдите в систему
- Создайте учетную запись в песочнице (если у вас уже есть учетная запись в песочнице, пропустите эти 2 шага)
- Теперь перейдите на https://www.sandbox.paypal.com/ и войдите
- Затем зайдите в управление кнопками и создайте кнопку
- Не забудьте установить URL-адрес уведомления IPN для своей учетной записи в песочнице
- Теперь сделайте реальную тракцию с кнопки, которую вы создали в учетной записи песочницы.
- Работает без нареканий
Для справки, у меня возникла эта проблема с 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 решит вам сообщить.
Сочетание вышеуказанных проблем потеряло несколько часов моей жизни. Полоса далеко, гораздо лучше кодировать.