Magento的交易错误“请指定送货方式”

问题描述 投票:7回答:2

我们使用模板大师定制的结帐扩展名为“Firecheckout”。不知道这是相关的,但想通我应该提到它。有时候我看到一个事务失败电子邮件的原因是“请指定送货方式”。我花了很长时间试图追查这种情况发生,我很失落。我已经试过所有我能想到的复制问题。根据的事情,我做组合(添加/从购物车中删除项目,添加/删除改变航运选择优惠券代码,移动和桌面网站之间切换等),我已经能够让这个结帐页面没有按“T有选择送货方法的选项。但是,如果我试图提交我得到了,说:“请指定送货方式”航运法部分立即红色消息的顺序(注之间说话是算数的电子邮件,它说在网页上显示的错误有什么区别...失踪 “了”)。这不会导致错误邮件。

通过代码搜索我发现了错误的电子邮件在TM_FireCheckout_Model_Service_Quote在_Validate方法(扩展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.'));
}

在这种情况下,我想无论是$方法或$速度为空或假,但为什么/怎么可能?有什么我可以做,以确保这不会发生?该FireCheckout的_Validate方法和父类的方法_Validate之间的唯一差别是在被认为必需字段。它不以任何方式改变的地址对象,所以getShippingMethod和getShippingRateByCode后续调用应该是作为默认安装相同。

如果必要的话,我可以提供更多的细节。基本上,我试图了解可能引发的错误,以及如何我可以重现它,所以我最终能够修补是导致它摆在首位的孔。

谢谢!

magento magento-1.5
2个回答
0
投票

我以前遇到过类似的事情之前,但它不符合Firecheckout。但是,它也从Apptha像@Lennon Onestepcheckout扩展。长话短说,这是在JavaScript处理该丢弃的数据差距。我没有给你一个明确的答案,但我劝你看看什么样的形式验证和数据之间发生在结算表单上保存信息。

你可以做什么,开始研究是观察Firebug的FF,看控制台,看看你的数据仍然让周围通过。您还可以创建一个简单的观察模块做在controler_action_predispatch事件如下:

$request = $observer->getControllerAction()->getRequest();
Mage::log(var_export($request->getParams(),true));

..或者干脆直接结帐路线内编辑控制器中的文件。不管你的船浮筒。

启用日志和tail -f var/logs/system.log。你应该确保该请求的日志相匹配。这就是我如何开始虽然解决我的问题。

再次,这是不是“copypasta”修复或直指问题的根源的教程,而是分享我如何,我从我的亲身经验诊断我的问题的经验。

您可以在http://www.silksoftware.com/magento-module-creator非常快速地创建一个模块


0
投票

您需要更改后确定的运输方式。例如,在Firecheckout的“indexController的”创建一个函数为“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();

在这个例子中,我记录传送数据返回给客户的最后一个地址,如果你的情况,你需要保存为一个新的客户,只需创建一个地址给他,并保存为送货地址。

我希望能有帮助,祝你好运。

© www.soinside.com 2019 - 2024. All rights reserved.