PayPal REST API:在重定向 URL 或 Webhook 调用上完成订单/付款?

And*_*ord 5 php paypal symfony

我正在将 PayPal REST API 集成到我的 Symfony 2 Web 应用程序中。我不确定完成订单/付款的正确时间/地点是什么:

连同其他参数,如金额、客户数据等。我将两个 URL 传输到 PayPal API:一个是用户在接受付款时重定向到的 URL,另一个是在付款取消时用户重定向到的 URL。

这没有任何问题,当付款完成时,当用户使用我之前传输的 URL 重定向到我的页面时,我会获得完成订单所需的所有信息(例如解锁某些内容)。

但是我不确定这是否是正确的方法:

  • 如果由于任何原因将用户重定向回我的页面失败,即使付款已完成,购买也不会完成(没有解锁内容)。
  • 如果客户使用手动银行转帐,则付款pendingcompleted在他手动将钱转入其 PayPal 帐户时创建并将设置为。我必须以completed某种方式处理第二条消息
  • ...

可以使用Webhooks以下方法解决这些问题: 我在我的 PayPal 配置文件中指定一个特殊的回调 URL,API 将使用此 URL 通知我的系统不同的事件。

这样我会在付款待处理时收到通知,并在付款完成后立即收到第二个通知。听起来很棒。但是,Webhooks 是否也意味着完成即时支付?Doks 说,Webhooks 调用是异步执行的,并且无法保证它们的顺序。

我可以确定,PAYMENT.SALE.COMPLETED在用户重定向到我的页面之前,我的系统会通过Webhook接收事件吗?或者有没有可能,他先被重定向,我稍后再收到事件?在这种情况下,用户将返回页面并且看不到购买结果。

那么,处理重定向 URL 和 webhook 事件以完成付款的正确方法/顺序是什么?

Nic*_*ich 2

您不能相信用户被重定向到您指定的某个页面以将付款标记为已完成这一事实。不要那样做。

客户可以中止交易并通过手动将其输入到地址栏中来访问此“成功”页面。然后就没有付款了。

您可以并且应该信任的唯一证据是您是否收到PAYMENT.SALE.COMPLETED来自 PayPal 的电子邮件。

您可以向 PayPal 提供成功 URL,客户可以在其中看到“等待付款完成”,直到对您的 Webhook 端点的请求按预期到达。然后你将他转发到真正成功的页面或他想购买的内容。

如果您没有收到预期的 WebHook 请求,则在一段时间后显示超时错误。使用 Ajax 或 Websockets 来完成此等待循环。

或者,您可以显示“成功”页面,但仅在 Webhook 请求到达后才让客户使用/解锁内容,如果客户在以 WebHook 请求形式发送的付款确认到达之前尝试访问内容,则显示“出现问题”消息。

请记住,我们在这里讨论的是用户被重定向和 Webhook 被发送之间的几毫秒时间。通常,Webhook 请求是在客户发生重定向之前发送的,但您不能相信这一点。