php - 自定义 Prestashop Paypal Express 结帐订单详细信息

标签 php paypal prestashop express-checkout

我正在尝试破解 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/

相关文章:

php - 错误页面中的 Laravel Auth

php - 保存实体形式错误 - symfony2

php - 正在使用 PHP 通过 HTML 表单插入 MySQL,但数据不可搜索

php - 检测到 Paypal 购物车错误

html - PayPal 购物车送货选项不起作用

php - 如何让网页停止长时间运行的进程

html - 在 IFRAME 中嵌入 PayPal

php - Prestashop Collection 加入数据库

angularjs - 如何使用 Angular/Karma/Jasmine 正确测试放置(或发布)请求?

mysql - prestashop move 到新服务器回落到本地主机