为什么Paypal需要DoExpressCheckoutPayment?

vin*_*boy 12 paypal paypal-sandbox paypal-ipn

我正在尝试构建一个非常简单的PayPal支持的购物车,以便用户可以购买多个项目.我希望paypal能够处理所有付款细节.我甚至不想要订单确认.我会手动检查paypal上的订单确认.

起初我想使用"网站付款标准",因为它似乎很容易创建一个表格,发布到贝宝,并让贝宝从那里处理它.但不,这不起作用,因为"网站付款标准"按钮/表单不支持提交多个项目.我在我的表单中尝试了各种键/值,但从未奏效.

然后我按照此处的说明尝试了Express Checkout .它在很大程度上有效,但据我了解,在发送SetExpressCheckout后,您必须收听来自paypal的请求并执行DoExpressCheckoutPayment来完成交易.所以参考.

我发现这有点麻烦,因为如果我的服务器无法收到来自paypal的请求并且我从未发送DoExpressCheckoutPayment怎么办?所以客户认为他们已完成提交订单,但订单从未收到过.

有没有人知道跳过这个"确认"步骤的方法?我觉得没必要,也不确定为什么paypal需要它.

Rob*_*ert 42

这是因为快速结账和网站付款标准是根本不同的产品.

要使用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=commit.这useraction=commit会将PayPal上的"继续"按钮"查看您的付款"页面更改为"立即付款"按钮.

-

Express Checkout和网站支付标准之间存在如此显着差异的原因是网站支付标准旨在成为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="seller@designerfotos.com">
<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> 
Run Code Online (Sandbox Code Playgroud)

但请注意,默认情况下这是不安全的,因为您要收取的金额将在HTML中清晰可见.

**PayerID也附加在RETURNURL的GET中.因此,如果您愿意,可以跳过调用GetExpressCheckoutDetails.

  • 我知道你没有; 但它回答了你为什么需要DoExpressCheckoutPayment的问题.:-)这是野兽的本性.Express Checkout旨在作为介于中间的付款解决方案,位于您的购物车和订单确认页面之间.因此,为什么需要DoExpressCheckoutPayment来完成付款; 这使得商家可以更灵活地在何时,如何以及在何处向买家收费,而不是立即在PayPal网站上向买家收取费用.一旦买方*同意付款*,实际付款就不会完成.它只在DoEC被召集后才最终确定. (3认同)
  • 得到它:https://cms.paypal.com/uk/cgi-bin/?cmd = __render-content&content_ID = developer/e_howto_api_ECCustomizing#id0864860D0YK (2认同)