就我目前所知,有三種必須的方法才能完成完整的交易。
SetExpressCheckout 有道理,我創建它的項目和所有付款,然後將用戶重定向到我收到的響應redirecturi。
GetExpressCheckoutDetails 該方法應該位於SetExpressCheckout的returnurl指定的url上。通過讓這來自貝寶並使用它來調用這個方法的道理,我們可以得到付款人的ID,我們將用它來調用的最後方法DoExpressCheckoutPayment
DoExpressCheckoutPayment 該方法需要令牌和計費用戶標識,我們現在都有。它還要求付款和付款項目才能真正完成交易。
現在我的問題是:
在我RETURNURL,我打電話都GetExpressCheckoutDetails然後DoExpressCheckoutPayment。現在 - 我能否始終堅持一切都是正確的,並且在調用這兩件事情時交易將會通過?我在想,如果用戶沒有足夠的資金,也許Paypal不會繼續使用returnurl?
爲什麼我們需要在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
(
)
可以說我不使用useraction = commit - paypal有什麼想法?創建訂單 - >重定向到PayPal - >返回商家網站審查訂單? (但不是快速結賬,所以你不會回到商家店鋪,直到你完成完成?) - 因爲我仍然不明白getExpressCheckoutDetails部分,爲什麼它有 – Karem
定期流程將包括用戶被髮送到PayPal登錄或輸入cc詳細信息,然後查看訂單並單擊繼續。那時他們會被送回你的網站。您將使用GECD獲取送貨地址,以便您可以計算可能需要應用的送貨/稅款,並在致電DECP完成整件事之前向買方顯示最終評估頁。 –
非常好的解釋!所以我使用了useraction = commit,所以即使我有USESESSIONPAYMENTDETAILS和token,payerid提供時,我仍然可以直接調用DoExpressCheckoutPayment:Order total is missing? – Karem