PayPal IPN模拟器返回" INVALID"但我遵守了规则

时间:2016-06-07 12:10:55

标签: php paypal paypal-ipn guzzle

所以我有一个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/webscrbody发回此内容时。

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的回复。我不知道它是否来自处理SSL终止的服务器的不同IP地址是问题,还是我疯了。

我在PayPal的模拟器请求体上运行了差异,我发送回的身体没有cmd变量,没有区别。

4 个答案:

答案 0 :(得分:7)

似乎新的IPN模拟器界面在 payment_date 字段中使用了javascript日期。如果您手动将其设置为 today ,它可以正常工作。无论这是IPN模拟器端的编码/解码问题,还是IPN监听器,我都不确定。

答案 1 :(得分:1)

过去几天我们一直在使用IPN模拟器,并且在验证请求中返回了间歇性的INVALID消息。

等待几分钟,或者只需按下"发送IPN"消息几次似乎有效。

我们看到请求返回INVALID,稍后相同的请求会返回VERIFIED。相当讨厌。

答案 2 :(得分:1)

如果IPN来自IPN模拟器,PayPal事务验证总是返回INVALID,但我找到了一种解决方法。如果IPN将来自真实交易,它可以正常工作。我就是这样做的。

  1. 转到PayPal Developer并登录
  2. 创建一个沙箱帐户(如果您已有沙盒帐户,请忽略这两个步骤)
  3. 现在转到https://www.sandbox.paypal.com并登录
  4. 然后访问button management并创建一个按钮
  5. 不要忘记设置沙箱帐户的IPN通知网址
  6. 现在通过您在沙盒帐户中创建的按钮进行实际操作
  7. 完美无瑕

答案 3 :(得分:0)

为了记录,我一直在使用Paypals IPN Simulator这个问题,并发现该解决方案是Paypal的典型解决方案:

问题:当Paypal IPN Simulator运行时,正确格式化的IPN测试会在所有检查显示正确的情况下返回 INVALID

解决方案:

  • 1)模拟器始终在"沙盒"上运行环境。我用它来检查一个" LIVE"付款网站反馈并花了几个小时才发现您的IPN需要设置为沙箱模式。这在Paypal模拟器上没有提到,似乎是硬编码的,"假设"通过Paypal。

  • 2)IPN模拟器中的Payment_Date字段无效,并且在返回Paypal时不被接受,因此请在提交IPN Simulator运行时清除此字段或将此字段设置为null

  • 3)有时,奇怪的是,Paypal IPN模拟器会告诉你

      

    未发送IPN,并且未验证握手。请检查您的信息。

    即使模拟的事务由我的IPN侦听器脚本完全处理并返回VERIFIED 。总是检查自己的反馈脚本,而不是Paypal决定告诉你的废话。

上述问题的组合已经失去了几个小时的生命。 Stripe is far, far better to code with