PayPal IPN模拟器不会在奇怪的条件下发送IPN

时间:2014-11-04 09:57:19

标签: php paypal paypal-ipn paypal-sandbox

所以,我一直在测试我的IPN脚本并根据我的需要进行开发,但是我遇到了一个问题,我收到了“我们很抱歉,我们无法发送IPN 。“错误。

  

未提及的所有选项均为默认选项

情景1 - 成功

Transaction Type: Web Accept
All default information.

情景2 - 成功

Transaction Type: Web Accept
Receiver_email: Example@domain.com

情景3 - 成功

Transaction Type: Web Accept
Receiver_email: Example@domain.com
Item_name: My Item

情景3 - 成功

Transaction Type: Web Accept
Receiver_email: Example@domain.com
Item_name: My Item
mc_gross: 39.99

情景4 - 成功

Transaction Type: Web Accept
All defaults;
custom: Jimmy|0

情景5 - 成功

Transaction Type: Web Accept
All defaults;
Reveiver_email: Example@domain.com
custom: Jimmy|0

情景6 - 未通过

Transaction Type: Web Accept
All defaults;
Reveiver_email: Example@domain.com
Item_name: My Item
custom: Jimmy|0

场景7 - 失败

Transaction Type: Web Accept
Receiver_email: Example@domain.com
Item_name: My Item
mc_gross: 39.99
custom: Jimmy|0

那么,为什么我可以发送

  

自定义:吉米| 0

方案4-5 中,然后发送方案1-3 中显示的所有其他信息没有问题,但只要我从< 场景6 (自定义字段)到我要发送的值,它会中断。

我用大约4-5个不同的值对此进行了测试,并发送了几乎所有的IPN请求,试图找出它。

似乎在使用Item_name和Custom方法时会导致这种情况,如方案5和6

中所示

注意,从自定义“|”中删除分隔符值时IPN会发送,但为什么分隔符在所有其他场景中都有问题?我还将自定义字段扩展为多个字符,以确保它不是长度问题。

!!似乎当更改发送到IPN的分隔符时它工作正常,但似乎导致错误的问题实际上是我的explode()方法。

$custom = explode('~', $_POST['custom']);

$referral = $custom[0];
$software_type = $custom[1];

我正在爆炸的任何角色都会导致错误。

但是,在将$ referral和$ software_type打印到error_log时,它会给出正确的值:

[04-Nov-2014 02:18:11 America/Los_Angeles] [Referral]: Jimmy
[04-Nov-2014 02:18:11 America/Los_Angeles] [Software]: 0

1 个答案:

答案 0 :(得分:0)

您的IPN脚本中必定有问题,导致其中包含某些数据时会失败。这将导致200 OK以外的值被发送回PayPal的服务器,因此他们会认为它失败了。

您应该能够检查您的Web服务器日志,以查看正在发生的实际错误,如果您直接运行它,通常会在浏览器中看到这些错误。

在这方面,解决此类事情的一个好方法是构建自己的模拟器,这样你就可以做到这一点。使用设置为IPN URL的操作构建基本HTML表单。包含类似于您希望从PayPal IPN获取的参数的名称/值的隐藏字段。然后将其加载到浏览器中并直接提交,以便在屏幕上查看结果。

请记住,以这种方式测试数据不是来自PayPal的服务器。因此,它将是未完成的,因此如果您的代码中有逻辑来处理,那么您需要相应地调整它以便以这种方式进行测试。