聆听 "receipt confirm" 买家使用 PayPal Express Checkout 的意见

Listen "receipt confirm" from buyer using PayPal Express Checkout

我在 PayPal 社区支持上创建了一个问题,但它似乎不活跃,所以我在那里重新创建了...
我是在线服务商家。我已经完成了对沙盒 PayPal Express Checkout 的测试,并正在尝试实时集成。但是,live 最大的不同是:在结帐UI 批准后,钱仍然暂时搁置,买家必须点击"confirm receipt" 最后确认。这不会发生在沙盒环境中,钱将直接记入商家帐户。我已经尝试整合 IPN 和 Webhook 来监听事件,但是 none 可以捕捉到这个事件 "confirm receipt"。请帮我处理这个事件,因为如果我不能听它,我的服务就不能自动执行。非常感谢您的帮助,任何建议或建议都非常有用。
上一期here

Webhook 将发送 2 个事件 "Payment sale completed",第一个是用户批准结帐 "payment_hold_status": "HELD",第二个是用户确认收货 "payment_hold_status": "RELEASED"。 谢谢@Preston PHX,没仔细看

不幸的是,Paypal 社区论坛支持似乎不是很活跃 - 有许多未解答的问题,而且我的问题从未得到任何答案。

待处理的付款在实时环境中很常见,尤其是当您的帐户未完全验证时,但无法在沙盒中对其进行测试。因此,我在我的实际环境中进行了大量的观察和试错测试。希望这个答案可以帮助其他人避免在他们的实际环境中进行测试。

subscription/billing 计划或定期(一次性)付款的待处理付款管理方式不同。

支持两种不同的 webhook:

1. PAYMENT.CAPTURE.COMPLETED 用于定期付款,并有一个 status 可用于检查付款状态,可以是已完成、待处理或失败(以及其他)。

参见:Webhook event names - payments v2

对于PAYMENT.CAPTURE.COMPLETE,pending 和 on hold 似乎是一回事。

2。 PAYMENT.SALE.* 用于订阅,这里待处理的付款是(或应该)使用不同的 webhooks 管理的。

参见:Webhook event names - sales

  • PAYMENT.SALE.COMPLETED 销售完成。
  • PAYMENT.SALE.DENIED 销售状态从待定变为拒绝。
  • PAYMENT.SALE.PENDING 销售状态更改为待处理。

付款可以直接转为已完成,也可以从待处理转为已完成或从待处理转为已拒绝。

我认为,后者是指客户未确认购买 - 可能他们想要退款但懒得完成该过程。

但是,我刚刚注意到 Paypal 正在为暂停的付款发送两次 PAYMENT.SALE.COMPLETED webhook。一次没有迹象表明付款已暂停,第二次表明资金已释放。

这是我收到的两个示例(匿名的)webhook 请求:

第一个通知:付款已完成,没有资金被冻结的迹象:

{
  "id": "WH-99J09075X12340123-12X4860914197212Z",
  "event_version": "1.0",
  "create_time": "2021-08-27T02:05:34.170Z",
  "resource_type": "sale",
  "event_type": "PAYMENT.SALE.COMPLETED",
  "summary": "Payment completed for $ 15.0 USD",
  "resource": {
    "id": "5X123412X12341234",
    "state": "completed",
    "amount": {
      "total": "15.00",
      "currency": "USD",
      "details": {
        "subtotal": "15.00"
      }
    },
    "payment_mode": "INSTANT_TRANSFER",
    "protection_eligibility": "ELIGIBLE",
    "protection_eligibility_type": "ITEM_NOT_RECEIVED_ELIGIBLE,UNAUTHORIZED_PAYMENT_ELIGIBLE",
    "transaction_fee": {
      "value": "0.96",
      "currency": "USD"
    },
    "invoice_number": "",
    "custom": "REF-017089",
    "billing_agreement_id": "I-5X8313XXYYZZ",
    "receipt_id": "I-12342635535001234",
    "create_time": "2021-08-27T02:04:51Z",
    "update_time": "2021-08-27T02:05:11Z",
    "links": [],
    "soft_descriptor": "PAYPAL *MY COMPANY"
  },
  "links": [],
  "paypal": {}
}

第二次通知:付款现已发放

{
  "id": "WH-99J09075X12340123-12X4860914197211Z",
  "event_version": "1.0",
  "create_time": "2021-09-16T17:22:12.797Z",
  "resource_type": "sale",
  "event_type": "PAYMENT.SALE.COMPLETED",
  "summary": "Payment completed for $ 15.0 USD",
  "resource": {
    "id": "5X123412X12341234",
    "state": "completed",
    "amount": {
      "total": "15.00",
      "currency": "USD",
      "details": {
        "subtotal": "15.00"
      }
    },
    "payment_mode": "INSTANT_TRANSFER",
    "protection_eligibility": "ELIGIBLE",
    "protection_eligibility_type": "ITEM_NOT_RECEIVED_ELIGIBLE,UNAUTHORIZED_PAYMENT_ELIGIBLE",
    "payment_hold_status": "RELEASED",
    "transaction_fee": {
      "value": "0.96",
      "currency": "USD"
    },
    "invoice_number": "",
    "custom": "REF-017089",
    "billing_agreement_id": "I-5X8313XXYYZZ",
    "receipt_id": "I-12342635535001234",
    "create_time": "2021-08-27T02:04:51Z",
    "update_time": "2021-09-16T17:22:12Z",
    "links": [],
    "soft_descriptor": "PAYPAL *MY COMPANY"
  },
  "links": [],
  "paypal": {}
}

看到第二个通知有 payment_hold_status 现在已发布,但第一个通知没有 payment_hold_status

对于我的实施,为了避免多次计算付款,我将忽略此通知。如果有人有更好的解决方案,请给我留言。谢谢!

注: 付款从待处理到完成可能需要长达 3 周的时间,并且通常需要用户确认他们收到了他们的产品,因此您需要交付待处理的付款。 Paypal 应该将钱保管在第三方账户中,因此只要他们认为订单是合法的,您就应该拿到钱。参见:https://www.paypal.com/us/smarthelp/article/how-do-i-get-my-money-sooner-for-a-transaction-on-hold-faq3743