2014-04-23 60 views
1

我正试图获得在PHP中使用Express Checkout的最简单版本。

我的购物篮中有一个按钮,它将用户发送给由结帐向导提供的名为expresscheckout.php的脚本。

在返回URL页面上,我拨打GetShippingDetails($_SESSION['TOKEN'])以获取用户的送货细节。看似没有记录,我在响应中得到键/值'CHECKOUTSTATUS' => 'PaymentActionNotInitiated'This question解释说,要完成交易,我必须拨打DoExpressCheckout,这是由贝宝提供的PHP函数ConfirmPayment($FinalPaymentAmt)包装。

为什么需要$FinalPaymentAmt参数?如果我是正确的:

  • 有三种类型的paymentTypeSaleAuthorisationOrder,其中第一个在PHP脚本expresscheckout.php使用,并根据this page“可立即完成”。由于在重定向到贝宝之前在脚本的号召,贝宝调用中指定的支付金额提供包装:

CallShortcutExpressCheckout(($paymentAmount, $currencyCodeType, $paymentType, $returnURL, $cancelURL);

问题

  1. 为什么它也有在ConfirmPayment($FinalPaymentAmt)中指定?如果为$paymentAmount$finalPaymentAmount指定的值不同,会发生什么情况?
  2. 是否$FinalPaymentAmt只在必要/使用如果$paymentType不是“销售”?

回答

2

我对结账向导不熟悉,但一般Express Checkout流程由3个API请求组成。

  • SetExpressCheckout
  • GetExpressCheckoutDetails
  • DoExpressCheckoutPayment

SEC树立支付,并返回一个令牌。然后你将用户重定向到PayPal。他们登录并同意继续,并将其发送回您的网站。

回到您的网站/应用程序后,您可以致电GECD以获取买家的送货地址。此时,您可能需要为订单中添加更多货币,税款,手续费等。如果是这样,您会向买方提供最终评估页面。

确认后,您会致电DECP以最终数量完成订单。

因此,这就是结账流程开始和结束之间的金额确实可能发生变化的原因,无论交易类型如何,SEC和DECP都需要此金额。

相关问题