2014-04-10 107 views
0

我不明白。快速結賬的貝寶,爲什麼有三種方法來完成付款?

就我目前所知,有三種必須的方法才能完成完整的交易。

  1. SetExpressCheckout 有道理,我創建它的項目和所有付款,然後將用戶重定向到我收到的響應redirecturi。

  2. GetExpressCheckoutDetails 該方法應該位於SetExpressCheckout的returnurl指定的url上。通過讓這來自貝寶並使用它來調用這個方法的道理,我們可以得到付款人的ID,我們將用它來調用的最後方法DoExpressCheckoutPayment

  3. DoExpressCheckoutPayment 該方法需要令牌和計費用戶標識,我們現在都有。它還要求付款和付款項目才能真正完成交易。

現在我的問題是:

  1. 在我RETURNURL,我打電話都GetExpressCheckoutDetails然後DoExpressCheckoutPayment。現在 - 我能否始終堅持一切都是正確的,並且在調用這兩件事情時交易將會通過?我在想,如果用戶沒有足夠的資金,也許Paypal不會繼續使用returnurl?

  2. 爲什麼我們需要在DoExpressCheckoutPayment中再次指定付款項目?當我們已經在SetExpressCheckout中完成時?

我很習慣其他支付網關,只需啓動付款 - >重定向到支付網關 - >完成。當交易完成後,他們在那裏進行回撥,然後我可以設置完成的訂單並將物品交付給用戶。

我希望有人能澄清事情對我來說,一勞永逸(有關於這個這麼多similiar問題)

更新

$DECPFields = array(
        'token' => $_GET['token'],        // Required. A timestamped token, the value of which was returned by a previous SetExpressCheckout call. 
        'payerid' => $_GET['PayerID'],       // Required. Unique PayPal customer id of the payer. Returned by GetExpressCheckoutDetails, or if you used SKIPDETAILS it's returned in the URL back to your RETURNURL. 
        'returnfmfdetails' => '1',     // Flag to indiciate whether you want the results returned by Fraud Management Filters or not. 1 or 0.       'allowedpaymentmethod' => 'InstantPaymentOnly',     // The payment method type. Specify the value InstantPaymentOnly. 
        'buttonsource' => '',      // ID code for use by third-party apps to identify transactions in PayPal. 
        'USESESSIONPAYMENTDETAILS' => '1' 
       ); 

$PayPalRequest = array(
         'DECPFields' => $DECPFields 
         ); 

$decp = $PayPal -> DoExpressCheckoutPayment($PayPalRequest); 

這是請求/響應

Array 
(
    [TIMESTAMP] => 2014-04-13T00:14:26Z 
    [CORRELATIONID] => 7f6dd4f8798aa 
    [ACK] => Failure 
    [VERSION] => 112.0 
    [BUILD] => 10567876 
    [L_ERRORCODE0] => 10400 
    [L_SHORTMESSAGE0] => Transaction refused because of an invalid argument. See additional error messages for details. 
    [L_LONGMESSAGE0] => Order total is missing. 
    [L_SEVERITYCODE0] => Error 
    [ERRORS] => Array 
     (
      [0] => Array 
       (
        [L_ERRORCODE] => 10400 
        [L_SHORTMESSAGE] => Transaction refused because of an invalid argument. See additional error messages for details. 
        [L_LONGMESSAGE] => Order total is missing. 
        [L_SEVERITYCODE] => Error 
       ) 

     ) 

    [PAYMENTS] => Array 
     (
     ) 

回答

1

你對其他支付網關的解釋基本上是PayPal Payments Standard。一種非常基本的HTML表單,它將用戶發送到他們登錄的網關或輸入cc詳細信息以完成付款並完成。然後,您可以設置IPN以接收有關該事務的數據並自動執行後面提到的後處理任務。

Express Checkout更先進。它使用實際的API,並提供了更多的自由來整合事情,以滿足您的需求。

首先,GetExpressCheckoutDetails是可選的。當您調用SetExpressCheckout並重定向到PayPal時,您可以使用該重定向URL上的「useraction」參數來更改體驗。如果你使用useraction = commit,那麼會發生兩件事情。

  • 貝寶查看頁面上的按鈕,將改變從「繼續」,「支付」
  • 的PayerID將返回一個URL參數時,貝寶將用戶返回到您的網站。這可以讓你直接跳到DoExpressCheckoutPayment,如果你想。

作爲該功能的一部分,您還可以使用setup a callback that communicates with PayPal's review page。他們的評論頁面會將買方的送貨地址和商品詳情發送回您的腳本。您的腳本可以獲取該數據,使用該數據計算運費選項,然後將運費和稅務詳細信息返回到PayPal評論頁面。 PayPal頁面更新了一個下拉列表,該列表將填充您的腳本返回的結果,以便用戶可以使用PayPal評論完成整個訂單,並且不需要在自己的網站上構建另一個評論。

至於DoExpressCheckoutPayment,如果您在該請求中包含USESESSIONPAYMENTDETAILS參數,它將使用您通過SetExpressCheckout發送的詳細信息,因此您不必再次包含它。

GECD和DECP確實可能出錯,所以您總是希望通過錯誤處理來運行,並相應地記錄日誌。有些情況下,PayPal頁面上選擇的資金不起作用,PayPal actually builds in a way to circle back around and handle that基於您將返回的特定錯誤代碼。

希望有幫助!

+0

可以說我不使用useraction = commit - paypal有什麼想法?創建訂單 - >重定向到PayPal - >返回商家網站審查訂單? (但不是快速結賬,所以你不會回到商家店鋪,直到你完成完成?) - 因爲我仍然不明白getExpressCheckoutDetails部分,爲什麼它有 – Karem

+1

定期流程將包括用戶被髮送到PayPal登錄或輸入cc詳細信息,然後查看訂單並單擊繼續。那時他們會被送回你的網站。您將使用GECD獲取送貨地址,以便您可以計算可能需要應用的送貨/稅款,並在致電DECP完成整件事之前向買方顯示最終評估頁。 –

+0

非常好的解釋!所以我使用了useraction = commit,所以即使我有USESESSIONPAYMENTDETAILS和token,payerid提供時,我仍然可以直接調用DoExpressCheckoutPayment:Order total is missing? – Karem