PayPal IPN在付款完成数小时后发送多个通知

PayPal IPN在付款完成数小时后发送多个通知,paypal,paypal-ipn,Paypal,Paypal Ipn,在IPN文档中有以下行: 为了处理传输和接收延迟或故障的可能性,IPN 消息服务实现了一种重试机制,它以不同的间隔重新发送消息 直到您确认消息已成功接收 IPN正在发送相同的通知9次。。。我需要寄什么回来?我的脚本中没有错误。如果我使用IPN模拟器,我会收到以下消息: IPN已成功发送 这样看来,模拟器可以判断消息是否正确发送,但真正的通知程序却不能 我正在使用沙盒,如果这有什么区别吗 收到通知后是否需要打印任何内容?无需担心多重通知。首先发回IPN消息,然后处理它。在处理过程中,检查txn_i

在IPN文档中有以下行:

为了处理传输和接收延迟或故障的可能性,IPN 消息服务实现了一种重试机制,它以不同的间隔重新发送消息 直到您确认消息已成功接收

IPN正在发送相同的通知9次。。。我需要寄什么回来?我的脚本中没有错误。如果我使用IPN模拟器,我会收到以下消息:

IPN已成功发送

这样看来,模拟器可以判断消息是否正确发送,但真正的通知程序却不能

我正在使用沙盒,如果这有什么区别吗


收到通知后是否需要打印任何内容?

无需担心多重通知。首先发回IPN消息,然后处理它。在处理过程中,检查txn_id之前是否未被处理。如果它已经被处理,它是来自Paypal的重复IPN消息,您可以忽略处理。 有关更多信息,请参阅pdf文件:

编辑: 我收到通知后是否需要打印任何内容? 无需打印任何内容,但如果要记录详细信息,可以将其记录下来。 来自我上面提到的pdf文件(第10页)

无论您是否有意,您的听众都必须对每条信息做出回应 用它做任何事。如果你不回应,贝宝会假设 未收到该消息,请重新发送该消息。贝宝 继续定期重新发送消息,直到侦听器发送 返回正确的消息,尽管重新发送之间的间隔 消息每次都会增加。此邮件最多可重新发送一次 四天。这种重发算法可能导致以下情况: PayPal在您发回IPN时重新发送IPN消息 原始消息。在这种情况下,您应该再次发送回复, 以弥补PayPal实际上没有收到您的 第一次回应。你还应该确保你没有 处理与消息关联的事务两次重要: 贝宝希望在30天内收到对IPN消息的响应 秒。您的侦听器不应执行耗时的操作, 例如,在响应IPN消息之前创建流程

见第19-20页 您的侦听器软件必须

  • 等待来自PayPal的HTTP帖子

  • 创建一个包含完全相同的IPN变量和值且顺序相同的请求, 前面带有cmd=\u notify-validate

  • 将请求发布到paypal.com或sandbox.paypal.com,具体取决于您是否 将在沙箱中进行直播或测试您的侦听器

  • 等待来自PayPal的响应,该响应已验证或无效

  • 如果确认响应,则执行以下检查:

  • 确认付款状态已完成。贝宝发送IPN消息等待和拒绝付款以及;在付款结清之前不要发货

  • 使用事务ID验证事务是否尚未处理,从而防止处理重复事务

  • 通常,您将事务ID存储在数据库中,以便知道您只处理唯一的事务

  • 验证收件人的电子邮件地址是否已注册给您。此检查可提供额外的防欺诈保护

  • 验证价格、商品说明等是否与您网站上的交易相符。此检查可提供额外的防欺诈保护

  • 如果验证响应通过检查,则根据txn_类型的值采取措施 变量(如果存在);否则,根据原因代码的值采取措施 变数

  • 如果响应无效,请保存消息以供进一步调查


您的IPN脚本出现了一些问题,导致它经常失败。这可能发生在脚本的最底层,因此您希望看到的一切都会发生,但随后会将500个错误发送回PayPal

你有没有检查过你的PayPal IPN历史记录,看看它显示了什么?你可能会看到很多错误。此外,您还需要检查web服务器日志,以查看在命中该脚本时发生的错误

这可能是只有在特定的命令下才会发生的事情。例如,我经常看到人们做数据库更新或类似的事情,而像O'Reilly这样的名字破坏了他们的脚本,因为他们没有正确处理撇号


查看web服务器日志应该会告诉您错误发生的位置,然后您可以运行一些测试来帮助解决问题。我喜欢创建一个基本的HTML表单,将操作设置为我的IPN侦听器,然后添加与我期望在IPN中得到的内容相匹配的隐藏字段。通过这种方式,您可以在浏览器中加载它,并直接向其发布各种值,这样您就可以在屏幕上看到结果。请记住,如果您以这种方式进行测试,IPN将不会被验证,因为它不是来自PayPal,因此您需要确保您的代码已设置为相应地处理该问题。

您必须以
空200响应进行回复
,以向PayPal表明在将响应数据处理为

public function yourIpnHandler(){

    //response verification and processing goes here

    header("HTTP/1.1 200 OK");
}
public function yourIpnHandler(){
    //response verification and processing goes here


    header("HTTP/1.1 200 OK");
}

收到空的200响应后,paypal将不会发送更多响应,因为它知道响应已成功发送到

您必须使用空的200响应进行回复,以向paypal表明在将响应数据处理为

public function yourIpnHandler(){

    //response verification and processing goes here

    header("HTTP/1.1 200 OK");
}
public function yourIpnHandler(){
    //response verification and processing goes here


    header("HTTP/1.1 200 OK");
}
收到一个空的200响应后,PayPal将不会发送更多响应,因为它知道响应已成功发送到i