2016-03-29 169 views
4

我想PayPal的REST API集成到我的Symfony 2 web應用程序,但我覺得很難理解的完整的工作流程究竟是如何的樣子:PayPal REST API訂單工作流程:付款 - >銷售 - > Webhook?

PayPal docs描述以下步驟接受付款。人們可以利用PayPal Playground來模擬下列步驟操作:

  1. 獲取的訪問令牌
  2. 通過查詢API創建一個Payment對象
  3. 將用戶重定向到在Payment響應收到approval url
  4. 在用戶批准PayPal頁面上的付款後,他會使用Payment對象中定義的成功鏈接重定向到我的頁面。使用收到的信息到執行的付款。
  5. 付款完成後,狀態approved

From the docs:一旦支付是全面的,它被稱爲 銷售。然後,您可以查看銷售情況並退款。

到目前爲止好。但是: Webhooks在此工作流中使用/觸發了哪些內容?我在PayPal開發人員儀表板中定義了一個通配符Webhook(接受所有可能的事件)。

我的觀察是,我的系統接收網絡掛接事件1-2分鐘(!)後付款執行(第四步)後,用戶被重定向到成功的鏈接和

除了執行付款和接收Webhook之間的這種長時間的延遲,這個工作流程意味着,我只接收處理成功鏈接的Webhook AFTER這意味着,處理成功鏈接對於完成支付是絕對必要的。它是否正確?

我需要使用Webhooks嗎?

幾天前我已經問過this question,nifr的答案很合理:一個不能信任用戶關注任何重定向URL,但應該只依賴Webhook事件。

然而,這所以碰撞與我之前所描述的,因爲我將永遠不會收到網絡掛接不處理重定向URL的意見...

,處理PAYMENT.SALE.COMPLETED網絡掛接事件沒有做出很大的意義,因爲這應該在處理重定向網址時完成。 正確嗎?

但是,要處理待處理付款的更新,處理退款或轉回付款等。只有通過聽取這些事件纔有可能。

所以答案是:只有使用Webhooks才能獲得以前付款的更新。正確?

所以,主要的問題是:

  1. 的5個步驟接受付款並沒有說明使用網絡掛接任何東西。這似乎沒有多大意義,因爲沒有Webhooks,人們會錯過更新事件等等。 那麼,真正有可能在沒有Webhook的情況下實施完整的支付工作流程嗎?
  2. 如果是,在這種情況下更新(退款,待處理等)如何處理?
  3. 如果否,完成訂單的正確策略/時間是什麼,因爲完成接收和處理webhook需要相當長的時間?

回答

1

我仍然在貝寶的世界是一個新手,但我前幾天集成貝寶加REST API在一個網上商店,並從我的理解,我可以告訴大家,工作流程是這樣的:

  1. 創建付款
  2. 重定向到PayPal
  3. 付款人可以支付使用(使用銀行直接借記卡或信用卡付款沒有PayPal賬戶)的貝寶賬戶OR
  4. 在PayPal方面完成流程後,PayPal將用戶重定向回您的成功URL。
  5. 直到現在用戶仍然沒有收費(你沒有錢)。在您(在您的成功網址中)執行$payment->execute($paymentExecution,$api);時,您要求PayPal從用戶收取金額。但在此之後,你沒有錢。 Paypal首先要處理收費並稍後通過WebhookEvents通知您。

當用戶支付每個直接借記卡或信用卡等時,Webhook通知(帶有那個令人討厭的延遲)尤爲重要。處理此類支付需要幾秒/分鐘。

redirectUrl對於收取/執行付款非常必要。 在這裏執行成功,只是爲了告訴用戶他完成了他的工作,並且您可以在這裏保存/捕獲PaymentID/Transaction id以便以後通過WebhookEvent Listener使用/更新。

所以我建議你只有在通過WebhookEvent Listener收到notofications後才更新你的數據庫(Payment completed),而不是成功的Red​​irectUrl。