PDT和IPN的API非常相似。主要区别在于接收通知的时间。因此,我建议同时实现两者。
- 使用PDT,您可以立即收到通知并进行任何必要的额外处理,并向用户显示确认页面。
- 使用IPN,即使用户的计算机在发送PDT之前爆炸,您也保证收到付款已经接收的通知。
同时实现两个功能,兼顾两种方式的优点。但是,如果只实现一个,IPN是可靠的。
一个注意点:如果同时实现两者,则有可能重复处理您的付款。请注意确保不会发生这种情况。我编写的应用程序几乎相同地处理了PDT和IPN(后端部分相同),并且该代码在数据库中获取了每个Web用户锁定,因此,如果同一用户尝试多次提交完全相同的付款,它只能被处理一次。一旦处理完成,该处理结果将用于任何随后的处理尝试。
编辑
还有一件事:IPN提供的信息比PDT更详细。您可以从IPN收到许多不同的消息,例如退款通知等,因此您确实应该实现它。
PayPal的PDT系统向使用PayPal支付标准的商家网站发送订单确认并让它们验证此信息。这样的网站可以在“订单确认”页面上本地显示这些数据。
何时使用PDT?
IPN提供了上述相同的功能。那么,什么时候应该选择PDT而不是IPN呢?
使用PDT,当客户完成付款时,您的网站会立即收到通知。然而,使用IPN时,客户完成付款和您的网站接收到此事件的通知之间存在实质性的延迟。
因此,如果您的网站包含需要立即付款通知的功能,请使用PDT。
例如,考虑一个数字音乐店。使用PDT,该店可以让客户立即下载他们的购买,因为PDT会立即发送订单确认。使用IPN,这样的即时订单履行是不可能的。
IPN的优点
PDT有一个主要的弱点:它只发送一次订单确认。因此,当PDT发送确认时,您的网站必须运行;否则,它将永远无法接收消息。
相比之下,使用IPN,订单确认的交付几乎是保证的,因为IPN会重新发送确认,直到您的网站确认收到。因此,PayPal建议您实施IPN而不是PDT。
另一个IPN的优点是它可以发送多种类型的通知,而PDT只能发送订单确认。因此,使用IPN,您的站点可以接收到例如退款通知以及订单确认等内容。
注意:如果您的站点必须立即收到付款通知,则可以同时实现IPN和PDT。但是,这样做会导致您的站点每次销售都会收到两个订单确认。因此,您必须小心处理(例如,发货)给定确认消息的一个副本就可以了。
这里有文档