我正在尝试将PayPal REST API集成到我的Symfony 2 Web应用程序中,但我发现很难理解完整的工作流程:
PayPal文档描述了接受付款的以下步骤。可以使用PayPal Playground模拟这些步骤:
- 获取访问令牌
- 通过查询API创建
Payment
对象 - 将用户重定向到
Payment
响应中收到的approval url
- 在PayPal页面上用户批准付款后,使用
Payment
对象中定义的成功链接将用户重定向回我的页面。使用收到的信息执行付款。 - 付款完成,状态为
approved
一旦付款完成,它就被称为销售。然后,您可以查找销售并退款。
到目前为止都很好。但是:这个工作流程中在哪里使用/触发Webhooks?我已经在PayPal开发者仪表板中定义了一个通配符Webhook(接受所有可能的事件)。
我的观察是,我的系统在用户被重定向回成功链接之后的1-2分钟内 以及 支付执行之后(第4步)才会收到Webhook事件。
除了执行付款和接收Webhook之间的长时间延迟外,此工作流程意味着我只在处理成功链接之后收到Webhook。这意味着处理成功链接对于完成付款是绝对必要的。这正确吗?
我需要使用Webhooks吗?
我已经在几天前问过这个问题,nifr的答案相当合理:不能信任用户遵循任何重定向URL,而应仅依赖Webhook事件。
然而,这与我之前描述的观察相冲突,因为如果不处理重定向URL,我将永远不会收到Webhook...
因此,处理PAYMENT.SALE.COMPLETED
Webhook事件没有太多意义,因为在处理重定向URL时应该已经完成了。 正确吗?
但是,要处理待处理付款的更新、处理退款或撤销的付款等,只有通过监听这些事件才能实现。
所以答案是:只使用Webhooks来获取之前进行的付款的更新。正确吗?
所以,主要问题是:
- 接受付款的5个步骤并未提及使用Webhooks。这似乎不太合理,因为没有Webhooks,将会错过更新事件等。那么,是否真的可以在没有Webhooks的情况下实现完整的支付流程呢?
- 如果是,那么在这种情况下,如何处理更新(退款、待处理等)?
- 如果不是,那么什么是正确的策略/时间来完成订单,因为完全接收和处理Webhook需要相当长的时间?