我正在尝试将 PayPal REST API 集成到我的 Symfony 2 Web 应用程序中,但我发现很难理解完整的工作流程到底是什么样子的:
The 贝宝文档 https://developer.paypal.com/docs/integration/web/accept-paypal-payment/描述接受付款的以下步骤。一个可以使用贝宝游乐场 https://devtools-paypal.com/guide/pay_paypal/php模拟这些步骤:
- 获取访问令牌
-
Create a
Payment
通过API查询对象
- 将用户重定向到
approval url
收到于Payment
回复
- 用户在 PayPal 页面上批准付款后,他会使用 中定义的成功链接重定向回我的页面
Payment
目的。使用收到的信息execute付款。
- 付款已完成并显示状态
approved
来自文档: https://developer.paypal.com/docs/integration/web/accept-paypal-payment/ Once a payment完成后,它被称为sale。然后您可以查看销售情况并退款。
到目前为止,一切都很好。但:在此工作流程中,Webhooks 在哪里使用/触发?我在 PayPal 开发人员仪表板中定义了一个通配符 Webhook(接受所有可能的事件)。
我的观察是,我的系统收到 Webhook 事件1-2 分钟(!) after用户被重定向回成功链接并且付款执行后(第4步).
除了执行付款和接收 Webhook 之间的长时间延迟之外,此工作流程意味着我只收到 WebhookAFTER处理成功链接。这意味着,处理成功链接对于完成付款是绝对必要的。它是否正确?
我需要使用 Webhooks 吗?
我已经问过了这个问题 https://stackoverflow.com/questions/36221146/几天前,nifr 的回答非常合理:不能相信用户会遵循任何重定向 URL,而应该仅依赖 Webhook 事件。
然而,这与我之前描述的观察结果相冲突,因为如果不处理重定向 URL,我将永远不会收到 Webhook...
所以,处理PAYMENT.SALE.COMPLETED
webhook 事件没有多大意义,因为这应该在处理重定向 URL 时已经完成。Correct?
但是,要处理待付款的更新、处理退款或撤销付款等,只能通过侦听这些事件来实现。
所以答案是:仅使用 Webhook 来获取之前付款的更新。正确的?
所以,主要问题是:
- 接受付款的 5 步流程并未提及任何有关使用 Webhooks 的信息。这似乎没有多大意义,因为如果没有 Webhooks,人们就会错过更新事件等?那么,是否真的可以在没有Webhooks的情况下实现完整的支付流程呢?
- If yes, 在这种情况下如何处理更新(退款、待处理等)?
- If no, 由于需要相当长的时间才能完全接收和处理 Webhook,因此履行订单的正确策略/时间是什么?