【问题标题】:PayPal IPN Simulator won't send IPN under strange conditionsPayPal IPN 模拟器在奇怪的情况下不会发送 IPN
【发布时间】:2014-11-04 09:57:19
【问题描述】:

所以,我一直在测试我的 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

scenario 4-5 中,然后发送所有其他信息,如 scenario 1-3 中显示的那样没有问题,但是只要我添加了 scenario 1-3 中的值strong>场景 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

【问题讨论】:

    标签: php paypal paypal-ipn paypal-sandbox


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 我将其标记为正确,因为解释如何在不使用贝宝沙箱的情况下进行本地调试对我有很大帮助。我能够找出脚本出现问题的位置以及原因,并将我的开发时间缩短了大约几个小时。再次感谢。
    猜你喜欢
    • 2017-08-01
    • 2013-12-21
    • 2017-09-27
    • 1970-01-01
    • 2015-06-29
    • 2017-10-03
    • 2011-10-01
    • 2017-01-04
    • 2014-01-05
    相关资源
    最近更新 更多