【问题标题】:Could PDT fired before IPN or how to synchronize IPN and PDT?PDT 能否在 IPN 之前触发或如何同步 IPN 和 PDT?
【发布时间】:2011-12-11 14:41:12
【问题描述】:

我正在实施 IPN + PDT 的情况是:

IPN 来自贝宝,之后我验证 IPN 将其发送回贝宝(验证需要一些时间),如果一切顺利,我将在数据库中设置 IPN 正常的标志(交易仍未支付)。当用户从贝宝登陆我的状态时,PDT 会被解雇,并且只有在我验证交易 ID 并检查该翻译的 IPN 状态是否正常后,我才会将当前交易设置为已付款。

所以,到目前为止,在开发环境(我的开发 PC + paypal 沙箱)中一切看起来都不错,但理论上它可能发生在 IPN 处理/完成之前(IPN 验证延迟,由于某种原因需要更多时间)PDT 可能是被解雇,因此交易无法标记为已付款,这将是一个问题。

我在谷歌上搜索了一下,发现 What is the sequence of Event Firing - IPN & PDT 说:

因此,显然 IPN 在 PDT 之前触发。但有时,PayPal 收不到 来自您的网站的 http 200 ok(出于某种原因)然后贝宝认为 IPN 未正确触发,然后 PayPal 再次发送 IPN 尽管。在这种情况下,有机会在 IPN 之前触发 PDT。

有人可以确认一下吗:

  1. 是否有经验丰富的 PDT 在 IPN 完成之前发送?
    如果上一个问题的答案是“是” - 在这种情况下,我的第二个问题:
  2. 有什么方法可以同步 IPN 和 PDT(延迟 PDT 直到 IPN 完成)?

【问题讨论】:

    标签: asp.net-mvc-3 paypal


    【解决方案1】:

    不要将 PDT 用于订单管理。 PDT 是一种简单的解决方案,可以在买家返回您的网站时向他们显示交易详情。不应依赖它来处理订单管理任务,因为(正如您也提到的),它取决于买家返回您的网站,这可能并非在所有情况下都会发生。

    IPN 是可靠的,因为它总是 POST 到您的 IPN 脚本。

    至于 PDT 与 IPN 的顺序:没有,因为 PDT 是拉请求(从您到 PayPal),而 IPN 是推送(从 PayPal 到您)。

    简而言之;删除 PDT,除非您使用它来显示一个不错的“欢迎回来 $user”消息,并使用 IPN 来验证付款是否已通过并相应地更新您的数据库。

    【讨论】:

      猜你喜欢
      • 2016-08-17
      • 2011-11-20
      • 1970-01-01
      • 2011-02-19
      • 2013-02-17
      • 2014-07-18
      • 2013-07-26
      相关资源
      最近更新 更多