Buy.php 8.1 KB
Newer Older
D
v1.2.0  
devil_gong 已提交
1 2 3 4
<?php
// +----------------------------------------------------------------------
// | ShopXO 国内领先企业级B2C免费开源电商系统
// +----------------------------------------------------------------------
D
devil_gong 已提交
5
// | Copyright (c) 2011~2019 http://shopxo.net All rights reserved.
D
v1.2.0  
devil_gong 已提交
6 7 8 9 10 11 12
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: Devil
// +----------------------------------------------------------------------
namespace app\index\controller;

D
devil_gong 已提交
13
use think\facade\Hook;
14 15 16 17
use app\service\GoodsService;
use app\service\UserService;
use app\service\PaymentService;
use app\service\BuyService;
D
v1.2.0  
devil_gong 已提交
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

/**
 * 购买
 * @author   Devil
 * @blog     http://gong.gg/
 * @version  0.0.1
 * @datetime 2016-12-01T21:51:08+0800
 */
class Buy extends Common
{
    /**
     * 构造方法
     * @author   Devil
     * @blog    http://gong.gg/
     * @version 1.0.0
     * @date    2018-11-30
     * @desc    description
     */
    public function __construct()
    {
        parent::__construct();

        // 是否登录
41
        $this->IsLogin();
D
v1.2.0  
devil_gong 已提交
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
    }
    
    /**
     * [Index 首页]
     * @author   Devil
     * @blog     http://gong.gg/
     * @version  0.0.1
     * @datetime 2017-02-22T16:50:32+0800
     */
    public function Index()
    {
        if(input('post.'))
        {
            session('buy_post_data', $_POST);
            return redirect(MyUrl('index/buy/index'));
        } else {
D
devil_gong 已提交
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
            // 站点类型,是否开启了展示型
            if(MyC('common_site_type', 0, true) == 1)
            {
                $this->assign('msg', '展示型不允许提交订单');
                return $this->fetch('public/tips_error');
            }

            // 获取下单信息
            $data = session('buy_post_data');
            if(empty($data))
            {
                $this->assign('msg', '商品信息为空');
                return $this->fetch('public/tips_error');
            }

            // 参数
            $params = array_merge(input(), $data);
D
v1.2.0  
devil_gong 已提交
75 76 77 78 79 80 81
            $params['user'] = $this->user;
            $ret = BuyService::BuyTypeGoodsList($params);

            // 商品校验
            if(isset($ret['code']) && $ret['code'] == 0)
            {
                // 用户地址
82 83
                $address = UserService::UserAddressList(['user'=>$this->user]);
                $this->assign('user_address_list', $address['data']);
D
v1.2.0  
devil_gong 已提交
84 85 86

                // 支付方式
                $this->assign('payment_list', PaymentService::BuyPaymentList(['is_enable'=>1, 'is_open_user'=>1]));
D
devil_gong 已提交
87

D
devil_gong 已提交
88 89 90 91 92 93 94 95
                // 地址选中处理
                // 防止选中id不存在地址列表中
                // 如果默认没有则表示不存在地址列表中
                if(isset($params['address_id']) && empty($ret['data']['base']['address']))
                {
                    unset($params['address_id']);
                }
 
D
devil_gong 已提交
96
                // 页面数据
D
devil_gong 已提交
97 98 99
                $this->assign('base', $ret['data']['base']);
                $this->assign('goods_list', $ret['data']['goods']);
                $this->assign('extension_data', $ret['data']['extension_data']);
D
v1.2.0  
devil_gong 已提交
100
                $this->assign('params', $params);
D
devil_gong 已提交
101 102 103 104

                // 钩子
                $this->PluginsHook($ret['data'], $params);

D
v1.2.0  
devil_gong 已提交
105 106 107 108 109 110 111 112
                return $this->fetch();
            } else {
                $this->assign('msg', isset($ret['msg']) ? $ret['msg'] : '参数错误');
                return $this->fetch('public/tips_error');
            }
        }
    }

D
devil_gong 已提交
113 114 115 116 117 118 119
    /**
     * 钩子处理
     * @author   Devil
     * @blog    http://gong.gg/
     * @version 1.0.0
     * @date    2019-08-13
     * @desc    description
D
devil_gong 已提交
120
     * @param   [array]           $data     [确认数据]
D
devil_gong 已提交
121 122
     * @param   [array]           $params   [输入参数]
     */
D
devil_gong 已提交
123
    private function PluginsHook($data = [], $params = [])
D
devil_gong 已提交
124 125 126 127 128 129 130
    {
        // 订单确认页面顶部钩子
        $hook_name = 'plugins_view_buy_top';
        $this->assign($hook_name.'_data', Hook::listen($hook_name,
            [
                'hook_name'     => $hook_name,
                'is_backend'    => false,
D
devil_gong 已提交
131
                'data'          => $data,
D
devil_gong 已提交
132 133 134 135 136 137 138 139 140
                'params'        => $params,
            ]));

        // 订单确认页面内部顶部钩子
        $hook_name = 'plugins_view_buy_inside_top';
        $this->assign($hook_name.'_data', Hook::listen($hook_name,
            [
                'hook_name'     => $hook_name,
                'is_backend'    => false,
D
devil_gong 已提交
141
                'data'          => $data,
D
devil_gong 已提交
142 143 144 145 146 147 148 149 150
                'params'        => $params,
            ]));

        // 订单确认页面地址底部钩子
        $hook_name = 'plugins_view_buy_address_bottom';
        $this->assign($hook_name.'_data', Hook::listen($hook_name,
            [
                'hook_name'     => $hook_name,
                'is_backend'    => false,
D
devil_gong 已提交
151
                'data'          => $data,
D
devil_gong 已提交
152 153 154 155 156 157 158 159 160
                'params'        => $params,
            ]));

        // 订单确认页面支付方式底部钩子
        $hook_name = 'plugins_view_buy_payment_bottom';
        $this->assign($hook_name.'_data', Hook::listen($hook_name,
            [
                'hook_name'     => $hook_name,
                'is_backend'    => false,
D
devil_gong 已提交
161
                'data'          => $data,
D
devil_gong 已提交
162 163 164 165 166 167 168 169 170
                'params'        => $params,
            ]));

        // 订单确认页面商品底部钩子
        $hook_name = 'plugins_view_buy_goods_bottom';
        $this->assign($hook_name.'_data', Hook::listen($hook_name,
            [
                'hook_name'     => $hook_name,
                'is_backend'    => false,
D
devil_gong 已提交
171
                'data'          => $data,
D
devil_gong 已提交
172 173 174 175 176 177 178 179 180
                'params'        => $params,
            ]));

        // 订单确认页面用户留言底部钩子
        $hook_name = 'plugins_view_buy_user_note_bottom';
        $this->assign($hook_name.'_data', Hook::listen($hook_name,
            [
                'hook_name'     => $hook_name,
                'is_backend'    => false,
D
devil_gong 已提交
181
                'data'          => $data,
D
devil_gong 已提交
182 183 184 185 186 187 188 189 190
                'params'        => $params,
            ]));

        // 订单确认页面订单确认信息顶部钩子
        $hook_name = 'plugins_view_buy_base_confirm_top';
        $this->assign($hook_name.'_data', Hook::listen($hook_name,
            [
                'hook_name'     => $hook_name,
                'is_backend'    => false,
D
devil_gong 已提交
191
                'data'          => $data,
D
devil_gong 已提交
192 193 194 195 196 197 198 199 200
                'params'        => $params,
            ]));

        // 订单确认页面提交订单表单内部钩子
        $hook_name = 'plugins_view_buy_form_inside';
        $this->assign($hook_name.'_data', Hook::listen($hook_name,
            [
                'hook_name'     => $hook_name,
                'is_backend'    => false,
D
devil_gong 已提交
201
                'data'          => $data,
D
devil_gong 已提交
202 203 204 205 206 207 208 209 210
                'params'        => $params,
            ]));

        // 订单确认页面内部底部钩子
        $hook_name = 'plugins_view_buy_inside_bottom';
        $this->assign($hook_name.'_data', Hook::listen($hook_name,
            [
                'hook_name'     => $hook_name,
                'is_backend'    => false,
D
devil_gong 已提交
211
                'data'          => $data,
D
devil_gong 已提交
212 213 214 215 216 217 218 219 220
                'params'        => $params,
            ]));

        // 订单确认页面底部钩子
        $hook_name = 'plugins_view_buy_bottom';
        $this->assign($hook_name.'_data', Hook::listen($hook_name,
            [
                'hook_name'     => $hook_name,
                'is_backend'    => false,
D
devil_gong 已提交
221
                'data'          => $data,
D
devil_gong 已提交
222 223 224 225
                'params'        => $params,
            ]));
    }

D
v1.2.0  
devil_gong 已提交
226 227 228 229 230 231 232 233 234 235 236 237 238 239
    /**
     * 订单添加
     * @author   Devil
     * @blog    http://gong.gg/
     * @version 1.0.0
     * @date    2018-09-25
     * @desc    description
     */
    public function Add()
    {
        if(input('post.'))
        {
            $params = $_POST;
            $params['user'] = $this->user;
D
devil_gong 已提交
240
            return BuyService::OrderInsert($params);
D
v1.2.0  
devil_gong 已提交
241 242 243 244 245 246 247
        } else {
            $this->assign('msg', '非法访问');
            return $this->fetch('public/tips_error');
        }
    }
}
?>