【问题标题】:Customize Prestashop Paypal Express Checkout Order Details自定义 Prestashop Paypal Express 结帐订单详细信息
【发布时间】:2013-03-27 03:15:09
【问题描述】:

我正在尝试破解 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 repo 上原始 process.php 文件的链接: https://github.com/PrestaShop/PrestaShop-modules/blob/master/paypal/express_checkout/process.php

我破解的process.php的diff和原版的备份:

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

任何人都有任何建议。

【问题讨论】:

  • 我不是 paypal API 方面的专家,所以请随意击落我。据我所知,您似乎正在更新$fields 中的值。您是在使用它们时创建这些数组索引,还是它们已经存在?例如:$fields['PAYMENTREQUEST_0_TAXAMT']
  • 您提到的字段是我使用时创建的。其他字段已经存在,我只是更改了它们的值。

标签: php paypal prestashop express-checkout


【解决方案1】:

PAYMENTREQUEST_0_ITEMAMT$fields['L_PAYMENTREQUEST_0_AMT'.$index] 的总和添加到您的API 调用中。

当我开始将运费添加到 PAYMENTREQUEST_0_AMT 时遇到了这个问题,这不是确切发生在你身上的事情。

我最好的建议是,只要项目成本总和与 PAYMENTREQUEST_0_AMT 不同,就添加 PAYMENTREQUEST_0_ITEMAMT

【讨论】:

  • 不完全是我的问题,但你让我走上了需要记录值的道路,所以谢谢。
【解决方案2】:

好的, 我终于修好了。我可以写出具体的代码修复,但我觉得它对我的情况和这个版本的 prestashop 来说太专业了。如果有人要求,我会添加它。

更重要的部分是我是如何发现这个错误的。 由于模块发送请求,然后必须从响应中找出是否有错误,因此无法调试 var_dump 或 echo。

相反,我编写了一个简单的自定义日志文件来将值转储到进程中。 我已经读到由于潜在的锁定问题,在 apache 日志中这样做是不受欢迎的。

所以 TLDR: 使用 PHP 文件函数并将总数和其他变量记录到同一目录中的文件中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    • 2023-03-30
    • 2023-03-16
    • 2019-07-16
    • 2018-08-23
    • 2019-02-05
    • 2014-04-17
    相关资源
    最近更新 更多