使用 PayPal Express Checkout 听取买家的“收据确认”

Posted

技术标签:

【中文标题】使用 PayPal Express Checkout 听取买家的“收据确认”【英文标题】:Listen "receipt confirm" from buyer using PayPal Express Checkout 【发布时间】:2020-07-09 14:43:36 【问题描述】:

我在 PayPal 社区支持上创建了一个问题,但它似乎不活跃,所以我在那里重新创建... 我是一个在线服务商。我已经完成了沙盒 PayPal Express Checkout 的测试,并正在尝试实时集成。但是,现场最大的不同是:在结账界面批准后,款项仍处于暂停状态,买家必须点击“确认收货”进行最终确认。这在沙盒环境中不会发生,资金将直接记入商家账户。我尝试将 IPN 和 Webhook 都集成到侦听事件中,但它们都无法捕获此事件“确认接收”。请帮我处理这个事件,因为如果我听不到它,我的服务就不能自动执行。非常感谢您的帮助,任何建议或建议都非常受欢迎。 上一期here

【问题讨论】:

您尝试订阅哪些 webhook 事件名称developer.paypal.com/docs/integration/direct/webhooks/…?可能是纠纷之类的。您可以订阅任何/全部并将它们记录到文件中以查看您获得的内容。顺便说一句,这种确认收据行为似乎因地区/国家/地区而异——您是否在您的 PayPal 交易中添加了跟踪 # 信息? @PrestonPHX,我没有注意到事件“付款销售完成”,webhook 事件发送 x2,我认为它是重复的但不是(第二个事件是“释放”钱 - 用户确认收据) ... 非常感谢您的帮助,祝您有美好的一天。 【参考方案1】:

Webhook 将发送两个事件"Payment sale completed",第一个是用户批准结帐"payment_hold_status": "HELD",第二个是用户确认收据"payment_hold_status": "RELEASED"。 谢谢@Preston PHX,我没注意。

【讨论】:

这不是真的,或者至少对于我的实现来说不是真的。 payment_hold_status 要么根本没有指定,要么是 "payment_hold_status": "RELEASED"【参考方案2】:

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

待付款在实际环境中很常见,尤其是在您的帐户未经过全面验证但无法在沙盒中进行测试的情况下。因此,我对我的生活环境进行了大量的观察和反复试验。希望这个答案可以帮助其他人避免在他们的实际环境中进行测试。

对于订阅/计费计划或定期(一次性)付款,未决付款的管理方式不同。

有两种不同的 webhook 需要支持:

1. PAYMENT.CAPTURE.COMPLETED 用于定期付款,并有一个status,您可以使用它来检查付款状态,可以是 COMPLETED、PENDING 或 FAILED(以及其他)。

见:Webhook event names - payments v2

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

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

见:Webhook event names - sales

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

付款可以直接到 COMPLETED,它们可以从 PENDING 到 COMPLETED 或从 PENDING 到 DENIED。

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

但是,我刚刚注意到 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

【讨论】:

以上是关于使用 PayPal Express Checkout 听取买家的“收据确认”的主要内容,如果未能解决你的问题,请参考以下文章

支付完成后注销Paypal Express账户

使用 Paypal Express Checkout 进行汇款

PayPal按钮和PayPal Express Checkout之间有什么区别?

使用 Express Checkout 测试 Paypal 信用

使用 AngularJS 的 Paypal Express 结帐

如何使用 OmniPay 获得 PayPal_Express 响应?