我正在尝试破解 paypal 模块以更改通过 Express Checkout API 发送的订单详细信息。
使用 PS 1.5.4 和最新的 Paypal 模块,paypal 页面如下所示:
Item Name Amount + Tax
Item Description
Item Number
Item Price + Tax
Quantity
...
Item Total Total + Tax
Shipping And Handling Shipping + Tax
Total Total
我宁愿让它显示税前价格,然后只需要像这样的总税额:
Item Name Amount
Item Description
Item Number
Item Price
Quantity
...
Item Total Total
Shipping And Handling Shipping
Total Tax Total Tax
Total Total
我已经对 process.php 进行了修改,但我一定遗漏了一些东西,因为我在“被黑”的 process.php 中遇到了错误。当我将它切换回默认值时,它工作正常。
这是 github 存储库上原始 process.php 文件的链接: https://github.com/PrestaShop/PrestaShop-modules/blob/master/paypal/express_checkout/process.php
我破解的 process.php 与原始备份的差异:
Comparing files process.php and PROCESS.PHP.BAK
***** process.php
private function setProductsList(&$fields, &$index, &$total) {
...
$fields['L_PAYMENTREQUEST_0_AMT'.$index] = Tools::ps_round($product['price'], $this->decimals);
$fields['L_PAYMENTREQUEST_0_QTY'.$index] = $product['quantity'];
$product_tax = $product['price_wt'] - $product['price'];
$total = $total + (($fields['L_PAYMENTREQUEST_0_AMT'.$index] + $product_tax) * $product['quantity']);
***** PROCESS.PHP.BAK
private function setProductsList(&$fields, &$index, &$total) {
...
$fields['L_PAYMENTREQUEST_0_AMT'.$index] = Tools::ps_round($product['price_wt'], $this->decimals);
$fields['L_PAYMENTREQUEST_0_QTY'.$index] = $product['quantity'];
*****
***** process.php
private function setPaymentValues(&$fields, &$index, &$total, &$taxes){
...
else
$shipping_cost_wt = $this->context->cart->getTotalShippingCost(null, false);
***** PROCESS.PHP.BAK
private function setPaymentValues(&$fields, &$index, &$total, &$taxes){
...
else
$shipping_cost_wt = $this->context->cart->getTotalShippingCost();
*****
***** process.php
private function setPaymentValues(&$fields, &$index, &$total, &$taxes) {
...
$fields['PAYMENTREQUEST_0_AMT'] = $total + $fields['PAYMENTREQUEST_0_SHIPPINGAMT'];
$fields['PAYMENTREQUEST_0_TAXAMT'] = $this->context->cart->getOrderTotal() - $this->context->cart->getOrderTotal(
false);
}
***** PROCESS.PHP.BAK
private function setPaymentValues(&$fields, &$index, &$total, &$taxes) {
...
$fields['PAYMENTREQUEST_0_AMT'] = $total + $fields['PAYMENTREQUEST_0_SHIPPINGAMT'];
}
*****
这是我得到的错误。
Error occurred:
Please try to contact the merchant:
PayPal response:
TIMESTAMP -> 2013-04-04T09:09:42Z
L_ERRORCODE0 -> 10413
L_SHORTMESSAGE0 -> Transaction refused because of an invalid argument. See additional error messages for details.
L_LONGMESSAGE0 -> The totals of the cart item amounts do not match order amounts.
L_SEVERITYCODE0 -> Error
任何人都有任何建议。
最佳答案
将 PAYMENTREQUEST_0_ITEMAMT
和 $fields['L_PAYMENTREQUEST_0_AMT'.$index]
的总和添加到您的 API 调用中。
当我开始向 PAYMENTREQUEST_0_AMT
添加运费时,我遇到了这个问题,这不是完全发生在你身上的事情。
我最好的建议是,只要项目成本总和不同于 PAYMENTREQUEST_0_AMT
,就添加 PAYMENTREQUEST_0_ITEMAMT
。
关于php - 自定义 Prestashop Paypal Express 结帐订单详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15821510/