CartController.class.php
14.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
<?php
/**
* Created by PhpStorm.
* User: 29925
* Date: 2018/5/1
* Time: 17:59
*/
namespace User\Controller;
use Common\Controller\MemberbaseController;
class CartController extends MemberbaseController {
protected $cart_model;
protected $user_address_model;
protected $goods_model;
protected $goods_brand_model;
protected $product_model;
protected $order_model;
protected $order_detail_model;
function _initialize() {
parent::_initialize();
$this->cart_model = D("Common/Cart");
$this->user_address_model = D("Common/UserAddress");
$this->goods_model = D("Common/Goods");
$this->goods_brand_model = D("Common/GoodsBrand");
$this->product_model = D("Common/Product");
$this->order_model = D("Common/Order");
$this->order_detail_model = D("Common/OrderDetail");
}
/**
* 用户购物车列表
*/
public function index() {
$cartList = $this->cart_model->getList($this->userid);
$count_amount = 0;
foreach($cartList as $k=>$v) {
$cartList[$k]['amount'] = $v['goods_price']*$v['num'];
$count_amount += $cartList[$k]['amount'];
}
$this->assign('cartList',$cartList);
$this->assign('count_amount', $count_amount);
$this->display();
}
/**
* 修改购物车商品数量
* @param id 商品id
* @param sort 类型(增加/减少)
*/
public function changeNum() {
if(IS_AJAX) {
$user_id = sp_get_current_userid();
$id = I('post.id',0,'intval');
$sort = I('post.sort');
$num = I('post.num',0,'intval');
if($sort == 'reduce') {
$num = -1;
}
// 判断传参是否正常
if(!$num) {
$this->ajaxReturn(array('status'=>false,'msg'=>'请输入正确的商品数量'));
}
if($sort != 'plus' && $sort != 'reduce' && $sort != 'change') {
$this->ajaxReturn(array('status'=>false,'msg'=>'参数错误'));
}
// 判断购物车及商品数据
$info = $this->cart_model->getOneByUser($user_id,$id);
if(!$info) {
$this->ajaxReturn(array('status'=>false,'msg'=>'购物车不存在该商品'));
}
if($sort == 'plus' || $sort == 'reduce') {
if(($info['num']+$num)>$info['goods_num']) {
$this->ajaxReturn(array('status'=>false,'msg'=>'商品库存不足'));
}
$info['num'] += $num;
}
if($sort == 'change') {
if(($num)>$info['goods_num']) {
$this->ajaxReturn(array('status'=>false,'msg'=>'商品库存不足'));
}
$info['num'] = $num;
}
// 更新购物车数据(价格及数量)
$this->cart_model->where(array('user_id'=>$user_id,'goods_id'=>$id))->save(array('num'=>$info['num'],'price'=>$info['goods_price']));
$info['amount'] = $info['num'] * $info['goods_price'];
$info['sort'] = $sort;
$this->ajaxReturn(array('status'=>true,'msg'=>'修改成功','data'=>$info));
} else {
$this->error('非法操作');
}
}
/**
* 删除购物车商品
* @param ids 要删除的商品
*/
public function del() {
if(IS_AJAX) {
$user_id = sp_get_current_userid();
$ids = I('post.ids');
if(!$ids) {
$this->ajaxReturn(array('status'=>false,'msg'=>'请选择要删除的商品'));
}
$result = $this->cart_model->where(array('goods_id'=>array('in',$ids),'user_id'=>$user_id))->delete();
if(!$result) {
$this->ajaxReturn(array('status'=>false,'msg'=>'删除失败'));
}
$this->ajaxReturn(array('status'=>true,'msg'=>'删除成功'));
} else {
$this->error('非法操作');
}
}
/**
* 去付款
* @param ids 去付款的商品
*/
public function topay() {
if(IS_AJAX) {
$user_id = sp_get_current_userid();
$ids = I('post.ids');
$redirect_url = U('User/Cart/confirm',array('ids'=>implode(',',$ids)));
if(!$ids) {
$this->ajaxReturn(array('status'=>false,'msg'=>'请选择要购买的商品'));
}
$this->ajaxReturn(array('status'=>true,'msg'=>'购买成功','data'=>$redirect_url,'ids'=>$ids));
} else {
$this->error('非法操作');
}
}
/**
* 确认订单页面
*/
public function confirm() {
if(IS_GET) {
if(C('MOBILE_TPL_ENABLED') && sp_is_mobile()) {
require_once VENDOR_PATH."jssdk/jssdk.php";
$jssdk = new \JSSDK(C('WX_APPID'), C('WX_APPSECRET'));
$signPackage = $jssdk->getSignPackage();
$this->assign('signPackage',$signPackage);
}
if(I('get.id',0,'intval') && I('get.num',0,'intval')) {
$id = I('get.id');
$num = I('get.num');
// 判断购物车及商品数据
$goods_num = $this->goods_model->getInfoNum($id);
if($num>$goods_num) {
$this->error('商品库存不足');
}
$cartList[] = $this->goods_model->getInfo($id);
$count_amount = 0;
foreach($cartList as $k=>$v) {
$cartList[$k]['amount'] = $v['goods_price']*$num;
$cartList[$k]['num'] = $num;
$cartList[$k]['goods_id'] = $v['id'];
$count_amount += $cartList[$k]['amount'];
}
$this->assign('sort',1);
$this->assign('num',$num);
$this->assign('cartList',$cartList);
$this->assign('count_amount', $count_amount);
}elseif(I('get.ids')) {
$ids = explode(',',I('get.ids'));
$cartList = $this->cart_model->getListConfirmByUser($this->userid,$ids);
if(!$ids || !$cartList) {
$this->error('未选择购买商品或订单已生成');
}
$count_amount = 0;
foreach($cartList as $k=>$v) {
$cartList[$k]['amount'] = $v['goods_price']*$v['num'];
$count_amount += $cartList[$k]['amount'];
}
$this->assign('sort',2);
$this->assign('cartList',$cartList);
$this->assign('count_amount', $count_amount);
} else {
$this->error('参数错误');
}
$addressList = $this->user_address_model->getList($this->userid);
$this->assign('addressList',$addressList);
$default_addressid = $this->user_model->defaultAddressid($this->userid);
$this->assign('default_addressid',$default_addressid);
$this->display();
} else {
$this->error('非法操作');
}
}
/**
* 确认订单
* @param address_id 收货地址信息
* @param ids 购买的商品id
*/
public function createOrder() {
if(IS_AJAX) {
$user_id = $info['user_id'] = sp_get_current_userid();
$address_id = I('post.address_id',0,'intval');
$addressInfo = $this->user_address_model->getInfo($address_id);
$sort = I('post.sort');
$ids = I('post.ids');
if(!$ids) {
$this->ajaxReturn(array('status'=>false,'msg'=>'参数错误'));
}
if($sort == 1) {
$num = I('post.num');
$goods = $this->goods_model->getInfo($ids[0]);
$goods['goods_id'] = $goods['id'];
$goods['num'] = $num;
$list[0] = $goods;
}
if($sort == 2) {
$list = $this->cart_model->getListConfirmByUser($user_id,$ids);
}
if(!$list) {
$this->ajaxReturn(array('status'=>false,'msg'=>'商品获取失败,请重新购买'));
}
$count_amount = 0;
foreach($list as $k=>$v) {
$count_amount += $v['num'] * $v['goods_price'];
}
// 生成订单
M('Order')->startTrans();
$order_model = D('Common/Order');
$order_detail_model = D('Common/OrderDetail');
$info['province'] = $addressInfo['province'];
$info['city'] = $addressInfo['city'];
$info['region'] = $addressInfo['region'];
$info['address'] = $addressInfo['address'];
$info['realname'] = $addressInfo['realname'];
$info['mobile'] = $addressInfo['mobile'];
$info['order_sn'] = $detail['order_sn'] = sp_get_order_sn();
$info['status'] = 1;
$info['sheet'] = 'Goods';
$info['price_count'] = $count_amount;
$info['ctime'] = time();
if(!$order_model->create($info)) {
M('Order')->rollback();
$this->ajaxReturn(array('status'=>false,'msg'=>$order_model->getError()));
}
$order_id = $order_model->add($info);
if(!$order_id) {
M('Order')->rollback();
$this->ajaxReturn(array('status'=>false,'msg'=>'添加订单失败'));
}
foreach($list as $k=>$v) {
$detail['goods_id'] = $v['goods_id'];
$detail['goods_name'] = $v['goods_name'];
$detail['goods_price'] = $v['goods_price'];
$detail['price'] = $v['price'];
$detail['num'] = $v['num'];
$detail['amount'] = $v['num'] * $v['goods_price'];
$detail['ctime'] = time();
if(!$order_detail_model->create($detail)) {
M('Order')->rollback();
$this->ajaxReturn(array('status'=>false,'msg'=>$order_detail_model->getError()));
}
if(!$order_detail_model->add($detail)) {
M('Order')->rollback();
$this->ajaxReturn(array('status'=>false,'msg'=>'添加订单失败'));
}
}
if($sort == 2) {
$result = $this->cart_model->where(array('goods_id'=>array('in',$ids),'user_id'=>$user_id))->delete();
if(!$result) {
M('Order')->rollback();
$this->ajaxReturn(array('status'=>false,'msg'=>'删除购物车商品失败'));
}
}
M('Order')->commit();
$redirect_url = U('User/Cart/pay',array('id'=>$order_id));
if(C('MOBILE_TPL_ENABLED') && sp_is_mobile()) {
$redirect_url = $this->getPayParam($info);
}
$this->ajaxReturn(array('status'=>true,'msg'=>'添加订单成功','data'=>$redirect_url));
} else {
$this->error('非法操作');
}
}
// 手机端jsapi支付回调
public function notify(){
$notify = new \WxPayNotify();
$notify->Handle(false); //最后为WxPayApi类下replyNotify方法 echo $xml
$xml = $GLOBALS['HTTP_RAW_POST_DATA']; //微信的回调数据
$base = new \WxPayResults(); //实例化数据对象结果类
$data = $base->FromXml($xml); //将xml转为array
F('return_xml',$data);
if($base->CheckSign() == true){
// if ($data["return_code"] == "FAIL") {
// $in['status'] = 4;
// M('order')->where(array('order_sn'=>$data['out_trade_no']))->save($in);
// }else{
// $in['status'] = 2;
// $in['paytime'] = time();
// $score['score'] = $data['total_fee'];
// $in['transaction_id'] = $data['transaction_id'];
// $order=M('order')->field('type,score,status,price,user_id')->where(array('order_sn'=>$data['out_trade_no']))->find();
// if($order['status'] == 1){
// if(M('order')->where(array('order_sn'=>$data['out_trade_no']))->save($in)){
// M('users')->where(array('id'=>$order['user_id']))->setInc('score', $order['price']);
// }
// }
// }
}
}
/**
* 支付页面
* @param id 订单ID
*/
public function pay() {
if(IS_GET) {
$id = I('get.id',0,'intval');
$orderInfo = $this->order_model->getInfo($id);
if(!$orderInfo) {
$this->error('订单不存在');
}
if($orderInfo['status']>1) {
$this->error('订单已支付或已取消');
}
$order_goods_list = $orderInfo['goods_list'] = $this->order_detail_model->getListByOrder($orderInfo['order_sn']);
foreach($order_goods_list as $k=>$v) {
if($v['is_hidden'] == 1) {
$this->error($v['goods_name'].'已下架');
}
if($v['is_del'] == 1) {
$this->error($v['goods_name'].'已删除');
}
if($v['num'] > $v['gnum']) {
$this->error($v['goods_name'].'库存不足');
}
}
$orderInfo['goods_ids'] = $this->order_detail_model->where(array('order_sn'=>$orderInfo['order_sn']))->getField('goods_id',true);
$return = $this->wxpay($orderInfo,'订单支付');
$this->assign('qrcode',base64_encode($return['code_url']));
$this->assign('alipay_url',U('Portal/Alipay/alipay',array('order_sn'=>$orderInfo['order_sn'],'name'=>'订单支付','price'=>$orderInfo['price_count'])));
$this->assign('orderInfo',$orderInfo);
$this->display();
} else {
$this->error('非法操作');
}
}
/**
* 改变支付方式
* @param type 支付类型
*/
public function changePay() {
if(IS_AJAX) {
$type = I('post.type',0,'intval');
$id = I('post.id',0,'intval');
$orderInfo = $this->order_model->getInfo($id);
if(!$orderInfo) {
$this->ajaxReturn(array('status'=>false,'msg'=>'订单不存在'));
}
$this->order_model->where(array('id'=>$id))->save(array('pay_sort'=>$type));
$this->ajaxReturn(array('status'=>true,'msg'=>'支付方式修改成功'));
} else {
$this->error('非法操作');
}
}
}