PayPal REST API订单工作流程:付款 - >销售 - >网络挂接?

时间:2016-03-29 07:50:26

标签: php paypal paypal-sandbox paypal-rest-sdk

我正在尝试将PayPal REST API集成到我的Symfony 2 Web应用程序中,但我发现很难理解整个工作流程的确切程度:

PayPal docs描述了接受付款的以下步骤。可以使用PayPal Playground来模拟这些步骤:

  1. 获取访问令牌
  2. 通过查询API
  3. 创建 Payment个对象
  4. 将用户重定向至approval url回复
  5. 中收到的Payment
  6. 用户在PayPal页面上批准付款后,使用Payment对象中定义的成功链接将其重定向回我的页面。使用收到的信息执行付款。
  7. 付款已完成,状态为approved
  8.   

    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获取之前付款的更新。正确吗

    所以,主要问题是:

    1. 接受付款的5个步骤没有说明使用Webhooks。这似乎没有多大意义,因为没有Webhooks会错过更新事件等等? 那么,是否真的可以在没有Webhooks的情况下实施完整的支付工作流程?
    2. 如果是,在这种情况下如何处理更新(退款,待处理等)?
    3. 如果不是,完成订单的正确策略/时间是什么,因为完全接收和处理webhook需要相当长的时间?

1 个答案:

答案 0 :(得分:1)

我仍然是PayPal世界的新手,但几天前我在网上商店中集成了PayPal Plus REST API,根据我的理解,我可以看出工作流程如下:

  1. 创建付款
  2. 重定向到PayPal
  3. 付款人可以使用PayPal帐户付款(使用银行直接付款或没有PayPal帐户的信用卡付款)
  4. 完成PayPal方面的流程后,PayPal会将用户重定向回您的成功网址。
  5. 到目前为止,用户仍未收费(您没有钱)。在您(在您的成功网址中)执行$payment->execute($paymentExecution,$api);的那一刻,您要求Paypal向用户收取金额。但在此之后,你没有钱。 Paypal首先处理收费并稍后通过WebhookEvents通知您。
  6. 当用户按直接付款或信用卡等付款时,Webhook通知(带有令人讨厌的延迟)尤其重要。处理此类付款需要几秒钟/分钟。

    redirectUrl绝对是收费/执行付款所必需的。 这里执行成功,只是告诉用户,他完成了他的工作,你可以在这里保存/捕获PaymentID / Transaction id,以便以后使用/更新通过WebhookEvent Listener。

    因此我建议您仅在通过WebhookEvent侦听器接收通知后更新您的数据库(付款已完成),而不是在成功RedirectUrl中。