首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PayPal IPN在付款完成数小时后发送多个通知。

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

Stack Overflow用户
提问于 2013-10-30 12:16:43
回答 3查看 7K关注 0票数 10

在IPN文档中有以下一行:

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

IPN发出同样的通知9次..。我要送回什么?我的脚本中没有错误。如果我使用IPN模拟器,我会得到以下消息:

IPN发送成功

那么,模拟器似乎可以判断消息被正确发送了,但是真正的通知者却不能?

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

收到通知后需要打印什么吗?

EN

回答 3

Stack Overflow用户

发布于 2013-10-30 12:28:52

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

编辑:,我收到通知后需要打印什么吗?不需要打印任何东西,但是如果你想记录细节,你可以记录它们。来自我上面提到的pdf文件(第10页)

您的侦听器必须响应每条消息,无论您是否打算对它做任何事情。,如果您不响应,PayPal假设消息没有收到并重新发送消息。PayPal继续定期重新发送消息,直到侦听器将正确的消息发回,尽管每次转发消息之间的间隔都会增加。这条消息可以持续四天之久。此重发算法可能导致PayPal在发送回原始消息时重新发送IPN消息的情况。在这种情况下,您应该再次发送您的响应,以涵盖PayPal第一次没有实际收到您的响应的可能性。还应确保不处理与消息关联的事务两次。的重要性: PayPal期望在30秒内收到对IPN消息的响应。在响应IPN消息之前,侦听器不应该执行耗时的操作,例如创建进程。

请参阅第19-20页您的侦听器软件必须

  • 等待来自PayPal的HTTP。
  • 创建一个请求,该请求包含完全相同的IPN变量和值,顺序相同,前面是cmd=_notify-验证。
  • 将请求发送到paypal.com或sandbox.paypal.com,这取决于您是要运行还是要在沙箱中测试侦听器。
  • 等待来自PayPal的响应,该响应要么已验证,要么无效。
  • 如果验证了响应,请执行以下检查:
  • 确认付款状态已完成。PayPal也会发送等待付款和拒绝付款的IPN消息;在付款被清除之前,不要发货。
  • 使用事务ID验证事务尚未处理,从而防止处理重复事务。
  • 通常,您将事务ID存储在数据库中,以使您知道只处理唯一的事务。
  • 确认接收者的电子邮件地址是否已向您注册。这一检查提供了防止欺诈的额外保护措施。
  • 验证价格、项目描述等是否与您网站上的交易相匹配。这一检查提供了防止欺诈的额外保护措施。
  • 如果已验证的响应通过检查,则根据存在的txn_type变量的值采取行动;否则,根据reason_code变量的值采取行动。
  • 如果响应无效,请保存该消息以供进一步调查。
票数 12
EN

Stack Overflow用户

发布于 2013-10-31 09:02:19

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

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

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

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

票数 3
EN

Stack Overflow用户

发布于 2017-10-17 12:06:09

您必须用一个空的200个响应来响应,以指示PayPal在将响应数据处理为

代码语言:javascript
复制
public function yourIpnHandler(){
    //response verification and processing goes here


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

在得到一个空的200个响应后,PayPal将不会发送更多的响应,因为它知道响应已成功地传递到ipn处理程序。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19682013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档