我们使用名为“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 的调用应与默认安装相同。
如有必要,我可以提供其他详细信息。我基本上试图了解可能触发该错误的内容以及如何重现它,以便我最终可以修补导致该错误的漏洞。
谢谢!
答案 0 :(得分:0)
之前我遇到过类似的事情,但Firecheckout没有。但它也是来自Apptha的Onestepcheckout扩展,如@Lennon。长话短说,这是javascript处理中的差异,破坏了数据。我没有确切的答案,但我建议您查看表单验证和结帐表单上的数据保存之间发生的情况。
你可以做些什么来开始调查是在FF上启动Firebug,观察控制台并查看你的数据是否仍然传播。您还可以创建一个简单的观察者模块,以便在controler_action_predispatch
事件中执行以下操作:
$request = $observer->getControllerAction()->getRequest();
Mage::log(var_export($request->getParams(),true));
..或者直接编辑结帐路线中的控制器文件。无论什么漂浮你的船。
启用日志和tail -f var/logs/system.log
。您应该确保请求与日志匹配。这就是我开始解决问题的方法。
同样,这不是针对问题根源的“copypasta”修复或教程,而是分享我从第一手经验中诊断出问题的经验。
快速创建模块答案 1 :(得分:0)
您需要在更改后定义送货方式。 例如,在" indexController" Firecheckout创建一个函数" saveShippingAction"。 您可以通过Ajax每次调用此函数来更改客户数据,也可以根据需要调用。
内部地方:
$customer = Mage::getSingleton('customer/session')->getCustomer();
$shippingData = $this->getRequest()->getParam('shipping');
$shippingData['street'] = implode("\n", $shippingData['street']);
$customerAddress = $customer->getAddresses();
$customerAddress = end($customerAddress);
$customerAddress->setIsDefaultShipping(true)->setSaveInAddressBook(true);
$customerAddress->addData($shippingData)->save();
在此示例中,我将交货数据记录回客户的最后一个地址,如果您需要为新客户保存,只需为他创建一个地址并保存为送货地址。
我希望有所帮助,祝你好运。