【发布时间】:2012-03-03 15:46:46
【问题描述】:
我一直认为与 IPN 消息一起发送的txn_id 是唯一的。 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 为“待处理”,几天后电子支票实际处理中,payment_status 为“已完成”。
我想存储两个交易,但仍想避免存储重复。 IPN 中还有另一个字段称为ipn_track_id,这两种交易都不同,但我找不到它的文档,除了这个模糊的描述:
内部;仅供 MTS 和 DTS 使用
还有其他人在使用ipn_track_id 来唯一标识 IPN 消息吗?
【问题讨论】:
-
在逻辑上它是一个事务,因此相同的 txn_id。将 payment_status 添加到(主)键可以解决这个问题,不是吗?文档可能应该是:不应再次处理相同状态的 txn_id。
-
有道理,谢谢你的建议。
-
值得注意的是,您应该只根据 PayPals IPN 指南处理 payment_status="Completed" 的交易。
-
@steve 我依赖 payment_status="Completed" 其中我的 BIN btn 被删除并且交易进入我的数据库。希望这是一个好方法。
-
我觉得只有在 payment_status='Completed' 时才应该检查 txn_id 的唯一性。因为没有文档提到 payment_status 和 txn_id 组合的唯一性,如果两个具有相同 txn_id 的“待处理”访问您的数据库,您的程序可能会中断。正如我所说,这是我的直觉,Paypal 应该在文档中更清楚地说明。
标签: paypal paypal-ipn