自定义Prestashop PayPal快速结帐订单详情

问题描述:

我想破解贝宝模块来更改通过Express Checkout API发送的订单详细信息。自定义Prestashop PayPal快速结帐订单详情

随着PS 1.5.4和最新的贝宝模块,贝宝页面看起来是这样的:

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进行了修改,但是我必须缺少一些东西,因为我的“hacked”process.php出现错误。当我将它切换回默认状态时,它可以正常工作。

这里是原来的process.php文件的链接在GitHub库: 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 

任何人有任何建议。

+0

我不是paypal API的专家,所以随时可以将我击倒。从我所看到的,它看起来像你正在更新'$ fields'中的值。您是在创建这些数组索引时使用它们,还是已经在那里?例如:'$ fields ['PAYMENTREQUEST_0_TAXAMT']' – christopher 2013-04-04 21:01:24

+0

您提到的字段是在我使用它时创建的。其他领域已经在那里,我只是改变了他们的价值观。 – cmgriffing 2013-04-04 21:02:21

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

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

相反,我写了一个简单的自定义日志文件来将值转储到过程中。 我已经读过,因为潜在的锁定问题,这样做进入apache日志是皱起了眉头。

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

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

我遇到这个问题,当我开始增加运输成本PAYMENTREQUEST_0_AMT这不是恰好发生了什么事给你。

我最好的建议是在物品费用的总和不同于PAYMENTREQUEST_0_AMT的时候增加PAYMENTREQUEST_0_ITEMAMT

+0

不是我的问题是什么,但是你让我走下了需要记录值的路径,所以谢谢。 – cmgriffing 2013-04-23 14:53:11