西部数码主机 | 阿里云主机| 虚拟主机 | 服务器 | 返回乐道官网
当前位置: 主页 > php教程 > magento教程 >

解决magento订单0元的情况

时间:2016-10-17 15:24来源:未知 作者:好模板 点击:
magento 有着强大的促销规则,再加上自己开发或者安装 积分插件等功能,总会出现用户结账后订单为 0元的情况,这个时候 第三方支付平台往往是不支持这个价格的。 (测试了 支付宝
magento 有着强大的促销规则,再加上自己开发或者安装 积分插件等功能,总会出现用户结账后订单为 0元的情况,这个时候
第三方支付平台往往是不支持这个价格的。
(测试了 支付宝 和快钱 是这样的)
 
这个时候怎么解决?对于magento 当然有现成解决办法
(可是我是自己开发完才注意到的。。。。所以我的解决方法就放后面吧,可以当作进一步理解magento用的 大笑,其实对于有些用户就选择支付宝等支付方式的话,还是需要做我这种类似的开发的)
1.
在magento 后台 System -> Configuration -> Payment Methods  中有个支付方式是
 
Zero Subtotal Checkout (中文翻译的应该是 “无小计结账”)
 
解决magento订单0元的情况
 
启用这个支付方式,当订单为 0元的时候就会显示这个 支付方式 。
我这里设置 New Order Status 为 Processing 就表明用户订单为 0元的时候选择这个支付方式。
这会直接将订单状态置为 processing。 如果你选择了 new oreder status 是 processing 会同时出现选项
Automatically Invoice All Items 选择no 表明 不同时创建发票 。
 
2.
我的解决办法是在确认订单,跳转链接的时候判断 订单金额 是0元的直接 跳转到success 页面并且 做订单状态 创建发票和发邮件等操作。
例如支付宝
在支付宝插件的model中有 方法getOrderPlaceRedirectUrl() 这个决定了确认订单后跳转的链接。
 
 
public function getOrderPlaceRedirectUrl()  
   {  
       return Mage::getUrl('alipay/payment/redirect');  
   }  
 
我是在 controller 的 redirectAction() 中做相应操作的
在合适位置加入如下代码:
 
 
$order = $this->getOrder();  
  
        $orderGrandTotal = (float)$order->getGrandTotal();  
        if($orderGrandTotal == 0){  
  
            if($order->getStatus() == "pending"){  
                $order->addStatusToHistory(  
                    'processing',  
                    Mage::helper('customer')->__('总计为 0 元的订单直接置为processing'));  
            }  
            try{  
                $order->sendNewOrderEmail();  
                if($this->saveInvoice($order)){  
                    $order->setState(Mage_Sales_Model_Order::STATE_PROCESSING, true);  
                }  
                $order->save();  
            } catch(Exception $e){  
  
            }  
            $this->_redirectUrl(Mage::getUrl('checkout/onepage/success'));  
            return;  
        }  
 
 
你可以将 第三方支付插件的redirectAction 中都加入这个判断来解决问题。
这时当用户选择 支付宝支付 但是 订单又是0元的时候 并不会跳转到支付宝也就不会提示价格参数 不合法。
当然 你也可以采用 订单价格为0元的时候
只显示 无小计结账的支付方式。 
根据订单价格屏蔽其它支付方式 可以在
template/checkout/onepage/payment/methods.phtml 中修改。(这里的修改,用户是可以修改 post数据来更改的)
(责任编辑:好模板)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
热点内容