我正在尝试让最简单的 Express Checkout 版本在 PHP 中运行。
我的购物篮有一个按钮,可将用户发送到结帐向导提供的名为 expresscheckout.php
的脚本。
在返回 URL 页面上,我调用 GetShippingDetails($_SESSION['TOKEN'])
以获取用户的送货详细信息。看似没有记录,我在响应中得到键/值 'CHECKOUTSTATUS' => 'PaymentActionNotInitiated'
。 This question说明要完成交易,我必须调用 DoExpressCheckout
,它由 Paypal 提供的 PHP 函数 ConfirmPayment( $FinalPaymentAmt )
包装。
为什么需要 $FinalPaymentAmt
参数?如果我是正确的:
paymentType
有3种类型:Sale
、Authorisation
和Order
,使用第一种在 PHP 脚本expresscheckout.php
中,根据 this page “可以立即完成”。由于在脚本对 Paypal 提供的包装器的调用中重定向到 Paypal 之前的调用中指定了付款金额:
CallShortcutExpressCheckout(($paymentAmount, $currencyCodeType, $paymentType, $returnURL, $cancelURL);
问题:
- 为什么还必须在
ConfirmPayment( $FinalPaymentAmt )
中指定?如果为$paymentAmount
和$finalPaymentAmount
指定的值不同,会发生什么情况? $FinalPaymentAmt
是否仅在$paymentType
不是“Sale”时才需要/使用?
最佳答案
我不熟悉结账向导,但一般的快速结账流程包含 3 个 API 请求。
- 设置快速结账
- GetExpressCheckoutDetails
- DoExpressCheckoutPayment
SEC 设置付款并返回 token 。然后您将用户重定向到 PayPal。他们登录并同意继续,这会将他们送回您的网站。
回到您的网站/应用程序后,您可以调用 GECD 以获取买家的送货地址。此时您可能需要为订单添加更多的运费、税金、手续费等。如果是这样,您将向买家展示最终评论页面。
确认后,您将调用 DECP 以最终金额确定订单。
这就是为什么在结账流程的开始和结束之间金额确实会发生变化,并且无论交易类型如何,SEC 和 DECP 都始终需要该金额。
关于php - Payal "DoExpressCheckoutPayment"- 为什么要传递 $finalPaymentAmount? (PHP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23241018/