为什么Paypal需要DoExpressCheckoutPayment?

为什么Paypal需要DoExpressCheckoutPayment?,paypal,paypal-ipn,paypal-sandbox,Paypal,Paypal Ipn,Paypal Sandbox,我试图建立一个非常简单的贝宝支持的购物车,让用户可以购买多个项目。我希望贝宝处理所有的付款细节。我甚至不想确认订单。我将手动检查贝宝上的订单确认 起初,我想使用“网站支付标准”,因为创建一个表单将发布到paypal并让paypal处理它似乎很容易。但是,这不起作用,因为“网站付款标准”按钮/表单不支持提交多个项目。我在表格中尝试了各种关键/价值,但从未奏效 然后我尝试使用找到的说明快速结帐。这在很大程度上起到了作用,但据我所知,在发送SetExpressCheckout后,您必须侦听paypal

我试图建立一个非常简单的贝宝支持的购物车,让用户可以购买多个项目。我希望贝宝处理所有的付款细节。我甚至不想确认订单。我将手动检查贝宝上的订单确认

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

然后我尝试使用找到的说明快速结帐。这在很大程度上起到了作用,但据我所知,在发送SetExpressCheckout后,您必须侦听paypal的请求,然后执行DoExpressCheckoutPayment以完成交易

我觉得这有点麻烦,因为如果我的服务器无法接收来自paypal的请求,而我从未发送DoExpressCheckoutPayment怎么办?因此,客户认为他们已完成提交订单,但从未收到订单


有人知道跳过这个“确认”步骤的方法吗?我觉得它没有必要,也不知道贝宝为什么需要它。

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

要使用快速签出,可以调用SetExpressCheckout API。在API调用中,您可以指定产品、金额和返回URL的详细信息。
一旦您将此数据发布到PayPal的API端点,您将收到一个令牌作为回报。 然后,您将重定向买家,并将令牌附加到以下URL:

一旦买家同意您的购买,他将被重定向回您在RETURNURL中指定的URL。
现在应该显示订单确认,并调用GetExpressCheckoutDetails API**。
调用GetExpressCheckoutDetails时,提供令牌。在GetExpressCheckoutDetails API响应中,您将找到PayerID

现在,您可以打电话给DoExpressCheckoutPayment,向买家收费。请记住在调用DoExpressCheckoutPayment时同时包含令牌和payerID

注意:如果您想通过调用GetExpressCheckoutDetails和DoExpressCheckoutPayment立即向买家收费,请将买家重定向到。
useraction=commit
将贝宝“查看您的付款”页面上的“继续”按钮更改为“立即付款”按钮

--

Express Checkout和Web Payments Standard之间之所以存在如此显著的差异,是因为Web Payments Standard旨在成为一种工作解决方案,其中PayPal处理整个交易流程。快速结帐是一种更灵活的解决方案,它允许您将其与网站/购物车的现有结帐流程深度集成

用于您的用例;使用PayPal的“购物车上载”按钮查看。 请参阅以获取示例


但是请注意,这在默认情况下是不安全的,因为您要收取的金额在HTML中是显而易见的


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

就本网站而言,
DoExpressCheckoutPayment
操作只是PayPal Express CheckOutPayment API所必需的


您是对的,PayPal不需要处理付款,但有些场景需要第二次操作。这种情况的一个例子是,用户(您站点的客户)在PayPal支付确认期间选择发货地址。根据您的配送供应商,用户在PayPal确认页面上选择配送地址后,您可能需要计算实际配送金额。

感谢您的详细回复。然而,我从未将网站付款标准等同于快速结帐。如果我这样做了,那将是一个错误。我的主要问题是为什么paypal要求DoExpressCheckoutPayment,因为用户已经完成了付款,这似乎是不必要的和误导性的。然而,您的示例网站支付多个项目的标准表单有效,这是我真正想要开始的(但是它仍然不能回答这个问题)。再一次非常感谢。我知道你没有;但它回答了您的问题,为什么需要ExpressCheckOutPayment.:-)这是野兽的本性。快速结帐是一种介于购物车和订单确认页面之间的中间付款解决方案。因此,为什么需要DoExpressCheckoutPayment来完成付款;这使得商家在何时、如何以及在何处向买家收费方面具有更大的灵活性,而不是在贝宝网站上立即向买家收费。一旦买方同意付款,实际付款就不会完成。只有在调用DoEC后才会最终确定。是否有关于
useraction=commit
的官方文档?明白了:@panzi如果你有兴趣的话?我在找几个小时。。。谢谢从技术上讲,
DoExpressCheckoutPayment
仅适用于Express Checkout和Website Payments Pro API。
<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>