Bri*_*VPS 7 magento magento-1.5
我们使用模板大师的自定义结帐扩展名为"Firecheckout".不确定这是否相关,但我想应该提一下.偶尔我会看到一封交易失败的电子邮件,原因是"请指定送货方式".我花了很长时间试图追踪这是如何发生的,我迷失了.我已经尝试了一切我能想到的复制问题.取决于我所做的事情的组合(添加/删除购物车中的商品,添加/删除更改运送选项的优惠券代码,在移动和桌面网站之间切换等)我已经能够使其结帐页面没有没有为运输方式选择一个选项.但是,如果我尝试提交订单,我会在发货方法部分中显示"请指定送货方式"的直接红色消息(请注意电子邮件中的内容与页面上显示的错误中的内容之间的区别......缺少"a").这不会导致错误电子邮件.
搜索代码我发现错误电子邮件是在_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.'));
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我猜$ method或$ rate是null还是false,但为什么/怎么可能呢?我能做些什么来确保这种情况永远不会发生?FireCheckout的_validate方法和父类的_validate方法之间的唯一区别在于哪些字段被认为是必需的.它不会以任何方式更改地址对象,因此后续对getShippingMethod和getShippingRateByCode的调用应与默认安装相同.
如有必要,我可以提供更多细节.我基本上试图了解可能触发该错误的内容以及如何重现它,以便我最终可以修补导致它的漏洞.
谢谢!
我以前也遇到过类似的情况,但不是 Firecheckout 遇到的。但它也是来自 Apptha 的 Onestepcheckout 扩展,如@Lennon。长话短说,JavaScript 处理上的差异导致了数据的浪费。我没有给您明确的答案,但我建议您研究一下表单验证和结帐表单上的数据保存之间发生的情况。
要开始调查,您可以在 FF 上启动 Firebug,观察控制台并查看您的数据是否仍在传递。您还可以创建一个简单的观察者模块来在事件中执行以下操作controler_action_predispatch
:
$request = $observer->getControllerAction()->getRequest();
Mage::log(var_export($request->getParams(),true));
Run Code Online (Sandbox Code Playgroud)
..或者直接编辑结账路线中的控制器文件。任何能让你的船漂浮的东西。
启用日志,并且tail -f var/logs/system.log
. 您应该确保请求与日志匹配。这就是我开始解决我的问题的方式。
再次强调,这不是“copypasta”修复或针对问题根源的教程,而是分享我如何根据第一手经验诊断问题的经验。
您可以在http://www.silksoftware.com/magento-module-creator快速创建模块