【发布时间】:2012-05-10 12:02:02
【问题描述】:
我们使用 Templates Master 的自定义结帐扩展程序,称为“Firecheckout”。不确定这是否相关,但我想我应该提到它。有时我会看到一封交易失败的电子邮件,原因是“请指定送货方式”。我花了很长时间试图找出这是如何发生的,我迷路了。我已经尝试了我能想到的一切来复制这个问题。根据我所做的事情的组合(从购物车中添加/删除商品,添加/删除更改运输选项的优惠券代码,在移动和桌面网站之间切换等)我已经能够做到结帐页面没有'没有选择运输方式的选项。但是,如果我尝试提交订单,我会在运输方式部分立即收到一条红色消息,上面写着“请指定运输方式”(请注意电子邮件中的内容与页面上显示的错误中的内容之间的差异...缺少“a”)。这不会导致错误电子邮件。
搜索代码我发现错误邮件是在_validate方法中的TM_FireCheckout_Model_Service_Quote(扩展Mage_Sales_Model_Service_Quote)类中触发的 p>
$method= $address->getShippingMethod();
$rate = $address->getShippingRateByCode($method);
if (!$this->getQuote()->isVirtual() && (!$method || !$rate)) {
Mage::throwException($helper->__('Please specify a shipping method.'));
}
在这种情况下,我猜 $method 或 $rate 是 null 或 false,但为什么/怎么可能呢?我能做些什么来确保这永远不会发生吗? FireCheckout 的 _validate 方法和父类的 _validate 方法之间的唯一区别在于哪些字段被认为是必需的。它不会以任何方式更改地址对象,因此对 getShippingMethod 和 getShippingRateByCode 的后续调用应该与默认安装相同。
如有必要,我可以提供更多详细信息。我基本上是在尝试了解可能触发该错误的原因以及如何重现该错误,以便最终修补导致该错误的漏洞。
谢谢!
【问题讨论】:
-
为什么不在 _validate()
Mage::log("Firecheckout: " . var_dump($method) . " | " . var_dump($rate), null, 'mydebug.log', true);中添加一个日志行到 Mage_Sales_Model_Service_Quote 的本地副本并尾随这个自定义日志文件,或者添加订单和客户 ID 以查看这些值是否持续存在? -
我有完全相同的错误,但我正在使用 Apptha 的 Onestepcheckout 扩展。任何帮助将不胜感激。
标签: magento magento-1.5