我们使用 Templates Master 的自定义结帐扩展程序,称为“Firecheckout”。不确定这是否相关,但我想我应该提到它。有时我会看到一封交易失败的电子邮件,原因是“请指定送货方式”。我花了很长时间试图找出这是如何发生的,我迷路了。我已经尝试了我能想到的一切来复制这个问题。根据我所做的事情的组合(从购物车中添加/删除商品,添加/删除更改运输选项的优惠券代码,在移动和桌面网站之间切换等)我已经能够做到结帐页面没有'没有选择运输方式的选项。但是,如果我尝试提交订单,我会在运输方式部分立即收到一条红色消息,上面写着“
搜索代码我发现错误电子邮件是在_validate方法中的TM_FireCheckout_Model_Service_Quote(扩展Mage_Sales_Model_Service_Quote)类中触发的
$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的后续调用应该与默认安装相同。
如有必要,我可以提供更多详细信息。我基本上是在尝试了解可能触发该错误的原因以及如何重现它,以便最终修补导致该错误的漏洞。
谢谢!