PayPal IPN 标识已执行的交易

PayPal IPN identify with executed transaction

我有以下设计问题: 在我的网站上,你 post 一个线程,然后使用 paypal 按钮结帐。 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”中找到它,但我不知道这是否是识别我的数据库元素的好方法。

一些注意事项:

  • 有更新的 v2/checkout/orders API,它取代了 v1/payments API。
  • v1/payments/../execute 和 v2/checkout/orders/../capture 已经给你一个权威的 'COMPLETED' 响应。无需等待 IPN 才知道交易已完成。
  • 无论如何,IPN 是一项古老的服务,已被当前的 webhooks 取代

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

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