2011-11-02 231 views
12

我正在嘗試構建一個非常簡單的paypal支持的購物車,以便用戶可以購買多個項目。我想要paypal處理所有付款細節。我甚至不想要訂單確認。我將手動檢查貝寶上的訂單確認。爲什麼PayPal需要DoExpressCheckoutPayment?

起初我想用「網站付款標準」,因爲看起來很容易創建一個表單,然後發送到貝寶,讓貝寶從那裏處理它。但是,不,這不起作用,因爲「網站付款標準」按鈕/表單不支持提交多個項目。我嘗試了各種形式的鍵/值,但它從來沒有奏效。

然後我嘗試使用說明找到快速結帳here。它在很大程度上工作,但據我瞭解,發送SetExpressCheckout後,你必須聽取貝寶的請求,並做一個DoExpressCheckoutPayment完成交易。 SO reference

我覺得這有點麻煩,因爲如果我的服務器無法接收貝寶的請求,我從來沒有發送DoExpressCheckoutPayment?因此,一位顧客認爲他們已完成提交訂單,但訂單從未收到。

有沒有人知道一種方法可以跳過這個「確認」步驟?我覺得沒有必要,也不確定爲什麼PayPal需要它。

+0

技術上來說,只有(或者甚至可用)「快速結帳」和「網站付款專業API」才需要使用「DoExpressCheckoutPayment」。 –

回答

39

這是因爲快速結帳和網站付款標準是根本不同的產品。

要使用Express Checkout,您可以調用SetExpressCheckout API。在API調用中,您可以指定產品,金額和RETURNURL的詳細信息。
將這些數據發佈到PayPal的API端點後,您會收到一個令牌。 然後,您將重定向買方,並將令牌附加到以下URL:https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-XXXXXXX

一旦買方同意您的購買,他將被重定向回您在RETURNURL中指定的URL。
您現在應該顯示訂單確認信息,並調用GetExpressCheckoutDetails API **。
當調用GetExpressCheckoutDetails時,提供令牌。在GetExpressCheckoutDetails API響應中,您會找到一個PayerID。

現在您已準備好致電DoExpressCheckoutPayment並向買方收費。請記住在調用DoExpressCheckoutPayment時包含令牌和payerID。

注:如果你想給買方立即致電GetExpressCheckoutDetails和DoExpressCheckoutPayment立即充電,買家重定向到https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-XXXXXXX&useraction=commituseraction=commit將更改PayPal「查看您的付款」頁面上的「繼續」按鈕爲「立即付款」按鈕。

-

之所以有快速結賬和網站付款標準之間的這種顯著的差異,是網站付款標準旨在成爲一個活動的工作液貝寶處理整個交易流程。 Express Checkout是一種更靈活的解決方案,可讓您將其與網站/購物車的現有結帳流程深入集成。

對於您的使用案例;使用PayPal'購物車上傳'按鈕查看。 例子請參閱https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_html_cart_upload

<form action="https://www.paypal.com/cgi-bin/webscr" method="post"> 
<input type="hidden" name="cmd" value="_cart"> 
<input type="hidden" name="upload" value="1"> 
<input type="hidden" name="business" value="[email protected]"> 
<input type="hidden" name="item_name_1" value="Item Name 1"> 
<input type="hidden" name="amount_1" value="1.00"> 
<input type="hidden" name="item_name_2" value="Item Name 2"> 
<input type="hidden" name="amount_2" value="2.00"> 
<input type="submit" value="PayPal"> 
</form> 

不過請注意,這是在默認情況下不安全,由於數額你要收費將在HTML清晰可見。

** PayerID也附加在您的RETURNURL的GET中。所以如果你願意,你可以跳過調用GetExpressCheckoutDetails。

+0

感謝您的詳細回覆。但是,我從未將網站付款標準等同爲快速結帳。如果我這樣做,這將是一個錯誤。我的主要問題是爲什麼PayPal需要DoExpressCheckoutPayment,因爲用戶已經完成付款,似乎沒有必要和誤導。但是,您的示例網站付款標準表單適用於多個項目,這是我真正想要開始的(但它仍不能回答此問題)。再來一次。謝謝! – vinhboy

+3

我知道你沒有;但它回答你的問題爲什麼需要DoExpressCheckoutPayment。 :-)這是野獸的本質。快速結賬是作爲一種介於您的購物車和訂單確認頁面之間的支付解決方案。因此,爲什麼需要DoExpressCheckoutPayment來完成支付;這允許商家在何時,如何以及向何處收費的情況下更靈活,而不是立即在PayPal網站本身收取費用。一旦買方*同意付款*,實際付款並未完成。它只是在DoEC被調用後才最終確定。 – Robert

+4

+1 for useraction = commit – Andreas

3

就本網站而言,DoExpressCheckoutPayment操作只需即爲PayPal Express Checkout API所需的

您是對的,PayPal無需處理付款,但有需要第二次操作的情況。這種情況的一個例子是用戶(您的網站的客戶)在PayPal付款確認期間選擇送貨地址。根據您的送貨商,您可能需要計算後的實際運費金額用戶在PayPal確認頁面上選擇了送貨地址。