Php PayPal IPN模拟器在奇怪的情况下不会发送IPN

Php PayPal IPN模拟器在奇怪的情况下不会发送IPN,php,paypal,paypal-ipn,paypal-sandbox,Php,Paypal,Paypal Ipn,Paypal Sandbox,所以,我一直在测试我的IPN脚本,并根据我的需要开发它,但我遇到了一个问题,我收到了我们很抱歉,我们无法发送IPN。错误 未提及的所有选项都是默认值 情景1——成功 情景2——成功 情景3-成功 情景3-成功 情景4-成功 情景5——成功 场景6-失败 场景7-失败 那么,为什么我可以发送 海关:吉米| 0 在场景4-5中,然后发送场景1-3中显示的所有其他信息,没有问题,但只要我将场景6中的值添加到要发送的值中,自定义字段就会中断 我用大约4-5个不同的值对此进行了测试,并发送了几乎所有的IP

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

未提及的所有选项都是默认值

情景1——成功

情景2——成功

情景3-成功

情景3-成功

情景4-成功

情景5——成功

场景6-失败

场景7-失败

那么,为什么我可以发送

海关:吉米| 0

在场景4-5中,然后发送场景1-3中显示的所有其他信息,没有问题,但只要我将场景6中的值添加到要发送的值中,自定义字段就会中断

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

当同时使用Item_名称和自定义方法时,似乎会导致这种情况,如场景5和6所示

注意,当从自定义“|”中删除分隔符值时,IPN将发送,但为什么分隔符在所有其他情况下都工作时会导致问题?我还将自定义字段扩展到许多字符,以确保它不是长度问题

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

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

$referral = $custom[0];
$software_type = $custom[1];
无论我从哪个角色爆炸,都会导致错误

但是,在将$referral和$software_类型打印到错误日志时,它会给出正确的值:

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

您的IPN脚本中一定有错误,导致在包含某些数据时失败。这将导致发送回PayPal服务器的值不是200 OK,所以他们会认为它失败了

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

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


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

我将此标记为正确,因为解释如何在不使用paypal沙箱的情况下进行本地调试对我帮助很大。我能够找出脚本在哪里中断以及为什么中断,并将开发时间缩短了几个小时。再次感谢。
Transaction Type: Web Accept
Receiver_email: Example@domain.com
Item_name: My Item
Transaction Type: Web Accept
Receiver_email: Example@domain.com
Item_name: My Item
mc_gross: 39.99
Transaction Type: Web Accept
All defaults;
custom: Jimmy|0
Transaction Type: Web Accept
All defaults;
Reveiver_email: Example@domain.com
custom: Jimmy|0
Transaction Type: Web Accept
All defaults;
Reveiver_email: Example@domain.com
Item_name: My Item
custom: Jimmy|0
Transaction Type: Web Accept
Receiver_email: Example@domain.com
Item_name: My Item
mc_gross: 39.99
custom: Jimmy|0
$custom = explode('~', $_POST['custom']);

$referral = $custom[0];
$software_type = $custom[1];
[04-Nov-2014 02:18:11 America/Los_Angeles] [Referral]: Jimmy
[04-Nov-2014 02:18:11 America/Los_Angeles] [Software]: 0