我正在尝试将PayPal REST API集成到我的Symfony 2 Web应用程序中,但我发现很难理解整个工作流程的确切程度:
PayPal docs描述了接受付款的以下步骤。可以使用PayPal Playground来模拟这些步骤:
Payment
个对象
approval url
回复Payment
Payment
对象中定义的成功链接将其重定向回我的页面。使用收到的信息执行付款。 approved
From the docs: 付款完成后,将其称为a 的销售即可。然后,您可以查询销售并退款。
到目前为止一切顺利。但是:在此工作流程中,Webhooks在哪里使用/解雇?我在PayPal开发人员仪表板中定义了一个通配符Webhook(接受所有可能的事件)。
我的观察是,我的系统收到Webhook事件 1-2分钟(!) 后,用户被重定向回成功链接付款执行后(步骤4)。
除了执行付款和接收Webhook之间的长时间延迟之外,此工作流程意味着我只接收处理成功链接的Webhook AFTER 。 这意味着,处理成功链接绝对是付款完成所必需的。这是正确的吗?
我是否需要使用Webhooks?
我前几天已经问过this question,nifr的回答非常合理:一个人不能相信用户遵循任何重定向网址,但应该只依赖于Webhook事件。
然而,这与我之前描述的观察结果相冲突,因为如果不处理重定向网址,我将永远不会收到Webhook ...
因此,处理PAYMENT.SALE.COMPLETED
webhook事件没有多大意义,因为这应该在处理重定向URL时完成。 正确吗
但是,只有通过收听这些事件,才能处理待处理付款的更新,处理退款或撤销付款等。
答案是:仅使用Webhooks获取之前付款的更新。正确吗
所以,主要问题是:
答案 0 :(得分:1)
我仍然是PayPal世界的新手,但几天前我在网上商店中集成了PayPal Plus REST API,根据我的理解,我可以看出工作流程如下:
$payment->execute($paymentExecution,$api);
的那一刻,您要求Paypal向用户收取金额。但在此之后,你没有钱。 Paypal首先处理收费并稍后通过WebhookEvents通知您。redirectUrl绝对是收费/执行付款所必需的。 这里执行成功,只是告诉用户,他完成了他的工作,你可以在这里保存/捕获PaymentID / Transaction id,以便以后使用/更新通过WebhookEvent Listener。
因此我建议您仅在通过WebhookEvent侦听器接收通知后更新您的数据库(付款已完成),而不是在成功RedirectUrl中。