所以,我一直在测试我的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
答案 0 :(得分:0)
您的IPN脚本中必定有问题,导致其中包含某些数据时会失败。这将导致200 OK以外的值被发送回PayPal的服务器,因此他们会认为它失败了。
您应该能够检查您的Web服务器日志,以查看正在发生的实际错误,如果您直接运行它,通常会在浏览器中看到这些错误。
在这方面,解决此类事情的一个好方法是构建自己的模拟器,这样你就可以做到这一点。使用设置为IPN URL的操作构建基本HTML表单。包含类似于您希望从PayPal IPN获取的参数的名称/值的隐藏字段。然后将其加载到浏览器中并直接提交,以便在屏幕上查看结果。
请记住,以这种方式测试数据不是来自PayPal的服务器。因此,它将是未完成的,因此如果您的代码中有逻辑来处理,那么您需要相应地调整它以便以这种方式进行测试。