我正在努力让最简单的Express Checkout版本在PHP中运行。
我的购物篮有一个按钮,可以将用户发送到结账向导提供的名为expresscheckout.php
的脚本。
在返回网址页面上,我致电GetShippingDetails($_SESSION['TOKEN'])
以获取用户的送货详情。看似没有文档,我在响应中得到了键/值'CHECKOUTSTATUS' => 'PaymentActionNotInitiated'
。 This question解释说,为了完成交易,我必须调用DoExpressCheckout
,它由Paypal提供的PHP函数ConfirmPayment( $FinalPaymentAmt )
包装。
为什么需要$FinalPaymentAmt
参数?如果我是对的:
paymentType
有三种类型:Sale
,Authorisation
和Order
,其中第一种用于PHP脚本expresscheckout.php
,其中根据{{3}}“可以立即完成”。由于付款金额是在脚本调用Paypal提供的包装器的重定向到Paypal之前的调用中指定的: CallShortcutExpressCheckout(($paymentAmount, $currencyCodeType, $paymentType, $returnURL, $cancelURL);
问题:
ConfirmPayment( $FinalPaymentAmt )
中指定?如果为$paymentAmount
和$finalPaymentAmount
指定的值不同,会发生什么?$FinalPaymentAmt
不是“促销”,那么$paymentType
是否只需要/使用?答案 0 :(得分:2)
我不熟悉结帐向导,但一般的Express Checkout流程包含3个API请求。
SEC设置付款并返回令牌。然后,您将用户重定向到PayPal。他们登录并同意继续,然后将其发送回您的网站。
回到您的网站/应用程序后,您致电GECD以获取买家的送货地址。此时,您可能需要在订单中添加更多的运费,税金,手续费等。如果是这样,您可以向买方提交最终审核页面。
确认后,您可以致电DECP以最终金额确定订单。
这就是为什么金额确实会在结账流程的开始和结束之间发生变化的原因,无论交易类型如何,SEC和DECP都将始终需要该金额。