我的system.log中遇到两个问题,我解决了一些问题。该网站似乎运行正常,但我非常希望从日志中删除这些持续存在的错误。
注意:未定义的变量:第17行/ var / www / ...中的顺序
// line 17
$merchantnumber = $standard->getConfigData('merchantnumber', $order ? $order->getStoreId() : null);
警告:在第267行的/ var / www / ...中除以零
// line 267
"vat" => (float)round((string)((round($order->getBaseShippingInclTax(),2)-round($order->getBaseShippingAmount(),2))/round((string)$order->getBaseShippingAmount(),2))*100, 2)
更新
// line 258-281
$items = $order->getAllItems();
foreach ($items as $itemId => $item)
{
$invoice["lines"][] = array
(
"id" => $item->getSku(),
"description" => $item->getName(),
"quantity" => round($item->getQtyOrdered(), 0),
"price" => $item->getBasePrice()*100,
"vat" => (float)round((string)((round($item->getBasePriceInclTax(),2)-round($item->getBasePrice(),2))/round((string)$item->getBasePrice(),2))*100, 2)
);
}
$invoice["lines"][] = array
(
"id" => $order->getShippingMethod(),
"description" => $order->getShippingDescription(),
"quantity" => 1,
"price" => $order->getBaseShippingAmount()*100,
"vat" => (float)round((string)((round($order->getBaseShippingInclTax(),2)-round($order->getBaseShippingAmount(),2))/round((string)$order->getBaseShippingAmount(),2))*100, 2)
);
return json_encode($invoice);
}
我在抱歉之前发布了错误的代码,在查看错误日志时我感到很困惑,因为项目和订单部分都出现了相同的(Devider)错误。
答案 0 :(得分:2)
在第一种情况下,您可以尝试将该行更改为
$merchantnumber = $standard->getConfigData('merchantnumber', (isset($order) && $order) ? $order->getStoreId() : null);
在第二种情况下,如果"vat"
为0,我无法准确判断$order->getBaseShippingAmount()
的值应该是什么。我怀疑你需要做类似的事情
if (!$order->getBaseShippingAmount()) {
return;
}
要添加到第267行以上的某处,但如果没有看到代码,很难确定。
答案 1 :(得分:2)
不幸的是,Magento代码似乎经常依赖PHP对逻辑错误的容忍度,这些错误被认为是通知。
$merchantnumber = $standard->getConfigData('merchantnumber', $order ?
$order->getStoreId() : null);
如果未设置$order
,我们希望使用NULL而不是订单的商店ID:
$merchantnumber = $standard->getConfigData('merchantnumber',
isset($order) ? $order->getStoreId() : null);
在第二个文件中:
更新检查您是指$order
还是$item
。如果它处于循环中,则可能是后者。
"vat" => (float)round((string)((round($item->getBaseShippingInclTax(),2)-round($item->getBaseShippingAmount(),2))/round((string)$item->getBaseShippingAmount(),2))*100, 2)
VAT%由ShippingInclTax(即ShippingAmount + VAT)反算。只有,如果getBaseShippingAmount()为零,则计算崩溃。
为了应对我们应该拥有的:
'vat' => (0 == round($item->getBaseShippingAmount(),2)) ? 0 :
(float)round((string)(
(round($item->getBaseShippingInclTax(),2)
-round($item->getBaseShippingAmount (),2)
)/round((string)$item->getBaseShippingAmount(),2)
)*100,2),
...我对所有这些round
并不满意,但它们可能就在那里,以便打印帐户“检查”到最后一个小数,并避免出现奇怪的结果,例如10.33 + 10.33 + 9.33 = 30.00而不是29.99。
我会写
'vat' => (0 == $item->getBaseShippingAmount()) ? 0
: round(
100.0*(
$item->getBaseShippingInclTax()/$item->getBaseShippingAmount()
-1.0
)
,2),
但即使数学上听起来更有声音,我担心结果可能与Magento在其他地方打印的内容“不匹配”。
如果你在一个循环中使用$order
(意味着无论项目是什么,你都有相同的值),你最好在循环之前计算VAT,然后在里面使用它。
答案 2 :(得分:1)
通知不是错误。您可以选择忽略它,也可以使用order
检查isset
变量是否存在:
...er', isset($order) ? $...
应始终避免除零,因为答案通常是未定义的(至少在数学上是未定义的)。在尝试进行除法之前检查分母是否为。