为啥 Paypal 需要 DoExpressCheckoutPayment?
Posted
技术标签:
【中文标题】为啥 Paypal 需要 DoExpressCheckoutPayment?【英文标题】:Why is DoExpressCheckoutPayment required for Paypal?为什么 Paypal 需要 DoExpressCheckoutPayment? 【发布时间】:2011-12-20 13:20:14 【问题描述】:我正在尝试构建一个非常简单的由贝宝支持的购物车,以便用户可以购买多件商品。我希望贝宝处理所有付款细节。我什至不想要订单确认。我将在 paypal 上手动检查订单确认。
起初我想使用“网站支付标准”,因为创建一个将发布到贝宝并让贝宝从那里处理它的表单似乎很容易。但是不,这不起作用,因为“网站付款标准”按钮/表单不支持提交多个项目。我在表单中尝试了各种键/值,但都没有成功。
然后我按照here 的说明尝试了 Express Checkout。它在很大程度上有效,但据我了解,在发送 SetExpressCheckout 后,您必须侦听来自贝宝的请求并执行 DoExpressCheckoutPayment 才能完成交易。 SO reference.
我觉得这有点麻烦,因为如果我的服务器无法接收到来自 paypal 的请求而我从不发送 DoExpressCheckoutPayment 怎么办?因此,客户认为他们已完成提交订单,但从未收到订单。
有谁知道跳过这个“确认”步骤的方法吗?我觉得没有必要,也不知道为什么 paypal 需要它。
【问题讨论】:
从技术上讲,DoExpressCheckoutPayment
只有 Express Checkout 和 Website Payments Pro API 才需要(甚至可用)。
【参考方案1】:
这是因为 Express Checkout 和 Website Payments Standard 是根本不同的产品。
要使用 Express Checkout,您需要调用 SetExpressCheckout API。在 API 调用中,您可以指定产品、金额和 RETURNURL 的详细信息。 一旦您将此数据发布到 PayPal 的 API 端点,您就会收到一个令牌作为回报。 然后,您将重定向买家,并将令牌附加到以下 URL:https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-XXXXXXX
买家同意您的购买后,他会被重定向回您在 RETURNURL 中指定的网址。 您现在应该显示订单确认,并调用 GetExpressCheckoutDetails API**。 调用 GetExpressCheckoutDetails 时,提供令牌。在 GetExpressCheckoutDetails API 响应中,您会找到一个 PayerID。
现在您可以致电 DoExpressCheckoutPayment 并向买家收费。请记住在调用 DoExpressCheckoutPayment 时同时包含令牌和付款人 ID。
注意:如果您想立即通过调用 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>
但是请注意,默认情况下这是不安全的,因为您要收取的金额将在 HTML 中清晰可见。
** PayerID 也附加在您的 RETURNURL 的 GET 中。因此,如果您愿意,可以跳过调用 GetExpressCheckoutDetails。
【讨论】:
感谢您的详细回复。但是,我从未将网站支付标准等同于快速结帐。如果我这样做了,那将是一个错误。我的主要问题是为什么 paypal 需要 DoExpressCheckoutPayment,因为用户已经完成付款,这似乎没有必要且具有误导性。但是,您的多个项目的示例网站付款标准表单有效,这是我真正想要开始的所有内容(但它仍然没有回答这个问题)。再来一次。谢谢! 我知道你没有;但它回答了您为什么需要 DoExpressCheckoutPayment 的问题。 :-) 这是野兽的本性。 Express Checkout 旨在作为一种中间支付解决方案,位于您的购物车和订单确认页面之间。因此,为什么需要 DoExpressCheckoutPayment 才能完成付款;这允许商家在何时、如何以及在何处向买家收费方面具有更大的灵活性,而不是在 PayPal 网站本身上立即向买家收费。一旦买方同意付款,实际付款并未完成。仅在调用 DoEC 后才最终确定。useraction=commit
有官方文档吗?
知道了:cms.paypal.com/uk/cgi-bin/…
@panzi 有兴趣吗?我正在寻找几个小时...谢谢!【参考方案2】:
就本网站而言,DoExpressCheckoutPayment
操作是 PayPal Express Checkout API 所必需的。
您是正确的,PayPal 不需要处理付款,但在某些情况下会需要第二次操作。这种情况的一个示例是用户(您网站的客户)在 PayPal 付款确认期间选择送货地址。根据您的送货服务提供商,您可能需要在用户在 PayPal 确认页面上选择送货地址后计算实际送货金额。
【讨论】:
以上是关于为啥 Paypal 需要 DoExpressCheckoutPayment?的主要内容,如果未能解决你的问题,请参考以下文章
为啥Paypal在使用django-paypal时会重试IPN