2017-05-07 101 views
0

情況:我正在開發一個wordpress插件,在​​上,客戶可以上傳圖像,修改圖像,調整大小並由打印機打印。然後用戶需要爲最終圖像尺寸的良好基礎付費。爲了達到最短的工作流程,我希望在同一頁面上有「簽出」按鈕。PayPal快速結帳我開發的wordpress插件

我曾希望將paypal作爲支付網關,我相信paypal express checkout按鈕集成將是'最簡單的'。我已閱讀了貝寶文檔here。我真正困惑的是它可以集成到客戶端REST或服務器端REST中,甚至在閱讀所有示例代碼和示例後,我都不知道如何將其集成到我的插件中。

對於客戶端REST:我知道我可以回調'onAuthorize'以重定向到預定義的頁面以確認服務器端付款,但是如何將成功付款詳細信息傳遞迴服務器?更重要的是,我怎麼知道傳回的支付細節是來自PayPal和真實的,而不是從惡意網站發送的?

對於服務器端REST:這對我來說更有意義,從服務器端調用paypal API,但是如何將付款金額和訂單明細從edit-order頁傳遞到create-payment頁?從示例代碼

var CREATE_PAYMENT_URL = 'https://my-store.com/paypal/create-payment'; 
    var EXECUTE_PAYMENT_URL = 'https://my-store.com/paypal/execute-payment'; 

    paypal.Button.render({ 

     env: 'sandbox', // Or 'sandbox' 

     commit: true, // Show a 'Pay Now' button 

     client: { 
      sandbox: 'xxxxxxxxx', 
      production: 'xxxxxxxxx' 
     } 

     payment: function() { 
      return paypal.request.post(CREATE_PAYMENT_URL).then(function(data) { 
       return data.id; 
      }); 
     }, 

     onAuthorize: function(data) { 
      return paypal.request.post(EXECUTE_PAYMENT_URL, { 
       paymentID: data.paymentID, 
       payerID: data.payerID 
      }).then(function() { 

       // The payment is complete! 
       // You can now show a confirmation message to the customer 
      }); 

因爲paypal.request.post(CREATE_PAYMENT_URL)似乎只接受一個參數,如何沿着訂單的詳細信息傳遞,以創建付款?

僅供參考,我以前使用過條紋SDK和API,它們非常直截了當......我只是不明白PayPal快速檢出是如何完成的!特別是對於客戶端REST,這對我來說毫無意義...爲什麼有人希望客戶端REST完成客戶端的全部過程,並且不向服務器返回任何信息以確定是否支付了該商品?我錯過了什麼,不明白?

回答

1

對於客戶端REST:我知道我可以在「onAuthorize」回調重定向到一個預先定義的頁面,服務器端確認付款,但我怎麼傳球成功付款明細回服務器?更重要的是,我怎麼知道傳回的支付細節是來自PayPal和真實的,而不是從惡意網站發送的?

你是對的,沒有100%可靠的方法來做到這一點。這裏推薦的方法是將paymentID和payerID返回給你的服務器,並在那裏通過paypal REST API來調用以驗證金額。

對於服務器端REST:這更有意義,我打電話給從服務器端的貝寶的API,但如何通過從編輯訂單頁面的支付金額和訂單細節,以創建付款頁面?從示例代碼

我推薦的方法是:

  1. 做​​在onAuthrorize
  2. 重定向頁面
  3. 做一個服務器端的調用來獲取付款細節

https://developer.paypal.com/docs/integration/direct/express-checkout/integration-jsv4/advanced-payments-api/show-payment-details/

您還可以在同一頁面

建設一個單頁的應用程序,並表示由客戶端​​返回的細節的選擇,因爲paypal.request.post(CREATE_PAYMENT_URL)似乎只接受一個參數,如何傳遞訂單明細以創建付款?

實際上,你可以通過第二個參數,該參數將被傳遞到你的服務器鍵值:

paypal.request.post(CREATE_PAYMENT_URL, { foo: 'bar' })

paypal.request.post實際上只是一個包裝,使AJAX更容易調用。

爲什麼有人希望客戶端REST完成客戶端的整個過程,並且不向服務器返回任何內容以確定是否支付了該商品?

您還應該進行服務器端驗證以確保該項目已付款。客戶端集成使創建和執行付款變得更簡單。


有一點需要注意 - 客戶端和服務器端集成都使用相同的REST api。所以沒有什麼能夠阻止你將兩者結合使用。客戶端調用只是簡化了一些調用,而無需額外的服務器端邏輯。

+0

很好的答案!還有一個問題,你可以將我的文檔重定向到他們的快速結賬JavaScript文檔嗎?我找到的「文檔」僅僅是演示和示例,沒有關於JavaScript /庫實際提供的方法和函數的詳細信息。 –

+0

代碼本身位於此處,並且還有一些有關該repo的示例:https://github.com/貝寶/貝寶結帳 - 它仍然缺少完整的API文檔,儘管對於JavaScript提供的一切。 – bluepnume

+0

我知道它......不知道這些函數需要什麼參數/參數,什麼是返回阻礙我......任何過時的文檔,我可以看看,至少有一些想法? (Ps我知道我總是可以深入研究源代碼......但使用sdk的意義在於,我不必瞭解背後的所有邏輯......坦率地說,我對編程仍然陌生,而這些可能會壓倒我) –