PayPal IPN 识别已执行交易

Posted

技术标签:

【中文标题】PayPal IPN 识别已执行交易【英文标题】:PayPal IPN identify with executed transaction 【发布时间】:2020-10-25 00:24:55 【问题描述】:

我有以下设计问题: 在我的网站上,您发布一个线程,然后使用贝宝按钮结帐。 paypal 按钮发送诸如 thread.content 之类的服装数据和诸如 payerID、paymentID 等常规字段...以进行付款。 付款最终通过

执行
request.post(PAYPAL_API + '/v1/payments/payment/' + paymentID +
        '/execute', ...,
            function(err, response)
        //here I insert into Database a new thread with costum data
);

现在付款最终执行后,Webhook 启动,并触发我的 IPN 侦听器。 我想确认并更新状态为“已完成”“待定”“mc_gross-mc_fee”等的数据库,但在这里我无法用数据库行识别当前的 IPN 事件。在插入 INTO 数据库时,我还可以插入“paypal-debug-id”,我也可以在 IPN“ipn_track_id”中找到它,但我不知道这是否是识别我的数据库元素的好方法。

【问题讨论】:

【参考方案1】:

一些注意事项:

有一个更新的 v2/checkout/orders API,它取代了 v1/payments API。 v1/payments/../execute 和 v2/checkout/orders/../capture 已经为您提供了权威的“已完成”响应。无需等待 IPN 知道交易已完成。 无论如何,IPN 是一项古老的服务,已被当前的 webhook 取代

无论如何,如果您希望将来自 IPN/webhook 的异步消息与您的订单相协调,您可以使用 invoice 字段或等效字段(对于每笔交易必须是唯一的),或 custom / custom_id(可能包含任何内容) .付款人的交易详情中不会显示自定义字段,而发票字段会显示。

另一种方法是简单地存储来自执行/捕获 API 调用的销售 id (v1) 或捕获 id (v2),因为此时交易已经完成。这将使您能够与 IPN 或 webhook 的事务 ID 进行核对,无论出于何种原因,您都需要这样做。

【讨论】:

所以我根本不需要通过 IPN 确认交易已经发生?我在考虑操纵或假装付款的用户,但我可能对非 IPN 变体的安全性过于悲观。 执行/捕获 API 响应给出确认

以上是关于PayPal IPN 识别已执行交易的主要内容,如果未能解决你的问题,请参考以下文章

使用 Paypal IPN 识别唯一个人资料

用于电子支票的 PayPal IPN

贝宝 IPN 验证

Paypal IPN:获取买家地址

PayPal IPN 有时不更新数据库

Paypal IPN 交易 ID