在IPN文档中有这一行:
为了处理传输和接收延迟或失败的可能性,IPN 消息服务实现重试机制,以不同的间隔重新发送消息 直到您确认已成功收到该消息。
IPN发送相同的通知9次...我需要发回什么?我的脚本没有错误。如果我使用IPN模拟器,我会收到以下消息:
IPN已成功发送
那么模拟器似乎可以告诉消息是否正确发送但真正的通知器不能?
如果有任何不同,我正在使用沙盒吗?
收到通知后是否需要打印任何内容?
答案 0 :(得分:11)
无需担心多重通知。首先发回IPN消息然后处理它。处理时检查先前未处理过txn_id的检查。如果已经处理,则它是来自Paypal的重复IPN消息,您可以忽略该处理。 有关更多信息,请参阅pdf文件: IPNGuide.pdf
修改强> 收到通知后是否需要打印任何内容? 无需打印任何内容,但如果要记录详细信息,则可以记录它们。 从我上面提到的pdf文件(第10页)
无论您是否打算,您的听众都必须回复每封邮件 用它来做任何事情。如果你没有回应,PayPal就会这样做 消息未收到并重新发送消息。贝宝 继续定期重新发送消息,直到听众发送 回复正确的消息,虽然重新发送间隔 消息每次都会增加。该消息可以重新发送 四天。这种重发算法可以导致其中的情况 PayPal会在您发送回来时重新发送IPN消息 原始信息。在这种情况下,您应该再次发送您的回复, 以涵盖PayPal实际上没有收到你的可能性 第一次回应。你也应该确保不这样做 处理与消息关联的事务两次。 重要: PayPal希望在30内收到对IPN消息的响应 秒。你的听众不应该执行耗时的操作, 例如在响应IPN消息之前创建进程
参见第19-20页 您的监听软件必须
等待来自PayPal的HTTP帖子。
创建一个请求,该请求包含完全相同的IPN变量和值,顺序相同, 先于cmd = _notify-validate。
将请求发布到paypal.com或sandbox.paypal.com,具体取决于您是否 正在沙盒中上线或测试你的听众。
等待PayPal的回复,该回复是VERIFIED或INVALID。
如果回复是VERIFIED,请执行以下检查:
确认付款状态为已完成。 PayPal也会发送待处理和拒绝付款的IPN消息;在付款清算之前不要发货。
使用交易ID验证交易尚未处理,从而防止处理重复交易。
通常,您将事务ID存储在数据库中,以便您知道自己只处理唯一的事务。
确认接收方的电子邮件地址已注册。此检查提供额外的防欺诈保护。
确认价格,商品描述等与您网站上的交易相符。此检查提供额外的防欺诈保护。
如果验证的响应通过了检查,请根据txn_type的值执行操作 变量如果存在;否则,根据reason_code的值采取行动 变量
如果回复为INVALID,请保存该邮件以供进一步调查
答案 1 :(得分:3)
你的IPN脚本正在发生一些事情,导致它失败很多。这可能发生在脚本的最底层,所以你期望看到的所有事情都会发生,但是500错误会被发送回PayPal。
您是否检查过PayPal IPN历史记录,看看它在那里显示的内容?你可能会看到很多错误。此外,您还需要检查Web服务器日志,以查看该脚本命中时发生的错误。
这可能只是某些订单发生的事情。例如,我经常看到人们正在进行数据库更新或类似的东西,像O'Reilly这样的名字打破了他们的脚本,因为他们没有正确处理撇号。
查看您的Web服务器日志应该会显示错误发生的位置,然后您可以运行一些测试来帮助找出问题所在。我喜欢创建一个基本的HTML表单,将操作设置为我的IPN侦听器,然后添加与我期望在IPN中获得的字段匹配的隐藏字段。这样你就可以在浏览器中加载它并直接发布各种值,这样你就可以在屏幕上看到结果。请记住,如果您正在以这种方式进行测试,IPN将不会被验证,因为它不是来自PayPal,因此您需要确保您的代码设置为相应地处理。
答案 2 :(得分:2)
您必须回复空200响应,以便在处理响应数据后向PayPal指示IPN已正确接收
public function yourIpnHandler(){
//response verification and processing goes here
header("HTTP/1.1 200 OK");
}
获得空200响应后,PayPal将不会发送更多响应,因为它知道响应已成功传递给ipn-handler。
答案 3 :(得分:0)
您必须回复empty 200 response
,以便在处理响应数据后向PayPal表明已正确接收IPN
public function yourIpnHandler(){
//response verification and processing goes here
header("HTTP/1.1 200 OK");
}
获得空200响应后,paypal将不会发送更多回复,因为它知道响应已成功传递到