2011-11-02 230 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确认页面上选择了送货地址。