Payal“DoExpressCheckoutPayment” - 为什么要传递$ finalPaymentAmount? (PHP)

时间:2014-04-23 10:03:03

标签: php paypal

我正在努力让最简单的Express Checkout版本在PHP中运行。

我的购物篮有一个按钮,可以将用户发送到结账向导提供的名为expresscheckout.php的脚本。

在返回网址页面上,我致电GetShippingDetails($_SESSION['TOKEN'])以获取用户的送货详情。看似没有文档,我在响应中得到了键/值'CHECKOUTSTATUS' => 'PaymentActionNotInitiated'This question解释说,为了完成交易,我必须调用DoExpressCheckout,它由Paypal提供的PHP函数ConfirmPayment( $FinalPaymentAmt )包装。

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

  • paymentType有三种类型:SaleAuthorisationOrder,其中第一种用于PHP脚本expresscheckout.php,其中根据{{​​3}}“可以立即完成”。由于付款金额是在脚本调用Paypal提供的包装器的重定向到Paypal之前的调用中指定的:

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

问题

  1. 为什么还必须在ConfirmPayment( $FinalPaymentAmt )中指定?如果为$paymentAmount$finalPaymentAmount指定的值不同,会发生什么?
  2. 如果$FinalPaymentAmt不是“促销”,那么$paymentType是否只需要/使用?

1 个答案:

答案 0 :(得分:2)

我不熟悉结帐向导,但一般的Express Checkout流程包含3个API请求。

  • SetExpressCheckout
  • GetExpressCheckoutDetails
  • DoExpressCheckoutPayment

SEC设置付款并返回令牌。然后,您将用户重定向到PayPal。他们登录并同意继续,然后将其发送回您的网站。

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

确认后,您可以致电DECP以最终金额确定订单。

这就是为什么金额确实会在结账流程的开始和结束之间发生变化的原因,无论交易类型如何,SEC和DECP都将始终需要该金额。