paypal - 为什么 Paypal 需要 DoExpressCheckoutPayment?

标签 paypal paypal-ipn paypal-sandbox

我正在尝试构建一个非常简单的支持 paypal 的购物车,以便用户可以购买多件商品。我希望 Paypal 处理所有付款细节。我什至不想要订单确认。我将在 paypal 上手动检查订单确认。

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

然后我使用找到的说明尝试了 Express Checkout here .它在很大程度上起作用,但据我了解,在发送 SetExpressCheckout 之后,您必须监听来自 paypal 的请求并执行 DoExpressCheckoutPayment 以完成交易。 SO reference .

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

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

最佳答案

那是因为 Express Checkout 和 Website Payments Standard 是根本不同的产品。

要使用 Express Checkout,您需要调用 SetExpressCheckout API。在 API 调用中,您指定产品、金额和 RETURNURL 的详细信息。
将此数据发布到 PayPal 的 API 端点后,您会收到一个 token 作为返回。 然后您将重定向买家,并将 token 附加到以下 URL:https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-XXXXXXX

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

现在您可以调用 DoExpressCheckoutPayment 并向买家收费。请记住在调用 DoExpressCheckoutPayment 时同时包含 token 和 payerID。

注意:如果您想通过立即调用 GetExpressCheckoutDetails 和 DoExpressCheckoutPayment 立即向买家收费,请将买家重定向到 https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-XXXXXXX&useraction=commit . useraction=commit 会将 PayPal“查看您的付款”页面上的“继续”按钮更改为“立即付款”按钮。

--

Express Checkout 和 Website Payments Standard 之间存在如此显着差异的原因在于,Website Payments Standard 旨在成为一种直接工作解决方案,由 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 - 为什么 Paypal 需要 DoExpressCheckoutPayment?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7984864/

相关文章:

mobile - Web View 中的 Paypal 结帐

php - Paypal 订阅 IPN 自定义变量

php - Paypal IPN - 配置文件或 Notify_URL

Paypal IPN 无效

ruby-on-rails - Paypal - 使用 Rails 定期计费(适用于非美国商家)

rest - 支付 REST API : Large amount causes "instrument declined" error in sandbox

iphone - 支付宝按钮问题

paypal - .NET 自适应支付 SDK : PaymentDetails() is throwing a ConnectionException (404)

PHP Paypal REST 计费协议(protocol)与数字项目相结合

php - Paypal 响应 avscode(万事达卡)始终为 "X"