PayPal IPN唯一标识符

arn*_*slu 25 paypal paypal-ipn

我一直认为txn_id用IPN消息发送是唯一的.PayPal指南似乎支持这个想法 - https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_admin_IPNIntro

避免重复的IPN消息.检查您是否尚未处理由IPN消息中返回的事务ID标识的事务.您可能需要将IPN消息返回的事务ID存储在文件或数据库中,以便检查重复项.如果PayPal发送的交易ID是重复的,则不应再次处理.

但是我发现PayPal的eCheck支付IPN使用相同的交易ID发送两次.在初始付款期间,一旦payment_status处于"待定"状态,并且在几天后eCheck实际处理payment_status为"已完成" 时再次进行.

我想存储两个事务,但仍希望避免存储重复项.在IPN中还有另一个字段被调用,ipn_track_id并且它对于这两个事务都是不同的,但我找不到它的文档,除了这个模糊的描述:

内部; 仅供MTS和DTS使用

其他人正在使用ipn_track_id唯一标识IPN消息?

Rob*_*ert 34

ipn_track_id不应该使用; 主要是因为这仅用于内部使用,因为它对每个IPN消息都是唯一的.
txn_id 对每一个独特的交易,而不是每个IPN消息.

这意味着什么; 一个事务可以有多个IPN消息.例如,eCheck默认情况下将处于"待定"状态,eCheck清除后将处于"完成"状态.
但你也可能会看到逆转,取消逆转,开启的案件和退款txn_id.

伪代码:

If not empty txn_id and txn_type = web_accept and payment_status = Completed  
    // New payment received; completed. May have been a transaction which was pending earlier.
    Update database set payment_status = Completed and txn_id = $_POST['txn_id']  

If not empty txn_id and txn_type = web_accept and payment_status = Pending  
    // New payment received; completed  
    Update database set payment_status = Pending and payment_reason = $_POST['pending_reason'] and txn_id = $_POST['txn_id']
Run Code Online (Sandbox Code Playgroud)

您可以在https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_html_IPNandPDTVariables#id08CTB0S055Z上找到更多IPN变量.

基本上; PayPal将生成唯一的卖家交易ID.此转换ID可能会在"完成"之前经历各个阶段,因此您需要能够处理这些异常.

至于PayPal在文档中的说明:如果在交付期间遇到错误,PayPal可能会重新发送单个IPN消息.例如,只要PayPal POST为其提供IPN数据,您的脚本就需要返回正确的HTTP/1.1 200 OK HTTP状态响应.
如果您没有返回HTTP/1.1 200 OK响应,PayPal将重新尝试每个单独的IPN消息发送相同数据16次.

注意:卖方的交易ID与买方的交易ID不同,因为它们是两种不同的行为(一种是借方,一种是贷方).


小智 8

ipn_track_id不是唯一的定期付款.至少对于分期付款计划来说并非如此.当客户创建分期付款计划时,如果您的计划在结账时有第一笔付款,您将收到2条具有相同ipn_track_id的IPN消息(示例如下).

第一次通知"recurring_payment_profile_created"第一笔付款"recurring_payment"

计划创建的IPN

 [txn_type] => recurring_payment_profile_created
 [recurring_payment_id] => I-57UAPHFJ3SBY
 [product_name] => Risk-Free Trial
 [time_created] => 06:24:39 Aug 15, 2013 PDT
 [ipn_track_id] => bdd94fdee935a
Run Code Online (Sandbox Code Playgroud)

首次付款IPN

 [txn_type] => recurring_payment
 [mc_gross] => 10.95
 [shipping] => 0.00
 [product_type] => 1
 [time_created] => 06:24:39 Aug 15, 2013 PDT
 [ipn_track_id] => bdd94fdee935a
Run Code Online (Sandbox Code Playgroud)

  • 这个!这非常重要,应在其文档中明确列出.不能依赖于经常性付款的独特性. (3认同)