error("仅在开发环境下查看"); // } } public function createOrder(){ if($this->request->isPost()){ $uid = $this->auth->id; $data = $this->request->post(); // 查询场次信息 $id = $data['id']; //查询系统组局场次信息 $venue = Venue::get($id); if(!$venue) $this->error('无此场次'); if($venue['ing_people'] >= $venue['max_people']) $this->error('该场次已满'); // 查询是否存在订单 $order = OrderModel::where('vid',$id)->where('uid',$uid)->where('status',0)->find(); $pay_price = $venue['pay_price']*$data['pay_people']; if($order){ if($order->status >0) $this->error('该场次已购买'); $return['order_id'] = $order->id; $return['orderno'] = "2".Random::numeric(15); $return["pay_retime"] = $order->pay_retime; $return["pay_price"] = $pay_price; $order->orderno=$return['orderno']; $order->pay_price=$pay_price; $order->people_num=$data['pay_people']; $order->price=$venue['pay_price']; try { if(!$order->save()) throw new Exception("生成订单失败"); } catch (Exception $e) { return $this->error($e->getMessage()); } }else{ try { $GM = new GroupModel; //查询组局信息 $group = $GM->getgroupdetail($venue->gid); $group['venue'] = $venue; // 生成订单 unset($group['theme_content']); $insert['group_info'] = json_encode($group); $insert['group_name'] = $group['title']; $insert['shop_name'] = $group['shop_name']; $insert['uid'] = $this->auth->id; $insert['vid'] = $data['id']; $insert['orderno'] = "2".Random::numeric(15); $insert['gid'] = $venue['gid']; $insert['pay_price'] = $pay_price; $insert['username'] = $this->auth->nickname; $insert['phone'] = $this->auth->mobile; $insert['create'] = time(); $insert['pay_retime'] = $insert['create'] +3600; $insert['vid'] = $data['id']; $insert["people_num"] = $data['pay_people']; $insert["price"] = $venue['pay_price']; $return['orderno'] = $insert['orderno']; $return['pay_retime'] = $insert['pay_retime']; $return['pay_price'] = $pay_price; if(!$return['order_id'] = OrderModel::insertGetId($insert)) throw new Exception("生成订单失败"); } catch (Exception $e) { return $this->error($e->getMessage()); } } return $this->success('订单创建成功',$return); } } public function updateOrder(){ } public function beforePay(){ if($this->request->isPost()){ $min_user = new \app\admin\model\miniprogram\User; $amount = $this->request->post('pay_price'); //订单号 $out_trade_no = $this->request->post('orderno'); $type = 'wechat'; $method = 'miniapp'; $min_user_info = $min_user->getbyUser_id($this->auth->id); $openid = $min_user_info['openid']; if (!$amount || $amount < 0) { $this->error("支付金额必须大于0"); } if (!$out_trade_no) { $this->error("订单号不存在"); } if (!$type || !in_array($type, ['alipay', 'wechat'])) { $this->error("支付类型不能为空"); } if (in_array($method, ['miniapp', 'mp']) && !$openid) { $this->error("openid不能为空"); } //订单标题 $title = '组局订单'.$out_trade_no; //回调链接 $notifyurl = $this->request->root(true) . '/api/order/notifyx/paytype/' . $type; $returnurl = $this->request->root(true) . '/api/order/returnx/paytype/' . $type . '/out_trade_no/' . $out_trade_no; try { // 生成订单 if(!$response = Service::submitOrder($amount, $out_trade_no, $type, $title, $notifyurl, $returnurl, $method, $openid)) throw new Exception("生成订单失败"); } catch (Exception $e) { return $this->error($e->getMessage()); } return $this->success("微信支付预处理成功",$response); } return $this->error("支付信息失败"); } public function notifyx() { \think\Log::record("进来了"); $paytype = $this->request->param('paytype'); $pay = Service::checkNotify($paytype); if (!$pay) { return json(['code' => 'FAIL', 'message' => '失败'], 500, ['Content-Type' => 'application/json']); } \think\Log::record("进来了"); // 获取回调数据,V3和V2的回调接收不同 $data = Service::isVersionV3() ? $pay->callback() : $pay->verify(); Db::startTrans(); try { \think\Log::record("进入try"); //微信支付V3返回和V2不同 if (Service::isVersionV3() && $paytype === 'wechat') { \think\Log::record("判断v几"); $data = $data['resource']['ciphertext']; $data['total_fee'] = $data['amount']['total']; } \think\Log::record($data); //获取支付金额、订单号 $payamount = $paytype == 'alipay' ? $data['total_amount'] : $data['total_fee'] / 100; $out_trade_no = $data['out_trade_no']; \think\Log::record("回调成功,订单号:{$out_trade_no},金额:{$payamount}"); $order = OrderModel::where('orderno',$out_trade_no)->find(); if($order){ $venue = Venue::get($order->vid); // 再最小组局人数和最大组局人数之间时状态改为1 if($venue->ing_people+1>=$venue->min_people && $venue->max_people>=$venue->ing_people+1) $venue->status = 1; //超过最大人数 if($venue->ing_people+1>$venue->max_people) $order->status = -2; $order->status = 1; $order->pay_time = time(); $order->pay_price = $payamount; $order->pay_type = $paytype; $order->save(); $venue->ing_people= $venue->ing_people+$order->people_num; $venue->save(); } Db::commit(); //你可以在此编写订单逻辑 } catch (Exception $e) { Db::rollback(); \think\Log::record("回调逻辑处理错误:" . $e->getMessage(), "error"); } //下面这句必须要执行,且在此之前不能有任何输出 if (Service::isVersionV3()) { return $pay->success()->getBody()->getContents(); } else { return $pay->success()->send(); } } public function returnx() { $paytype = $this->request->param('paytype'); $out_trade_no = $this->request->param('out_trade_no'); $pay = Service::checkReturn($paytype); if (!$pay) { $this->error('签名错误', ''); } //你可以在这里定义你的提示信息,但切记不可在此编写逻辑 $this->success("请返回网站查看支付结果", addon_url("epay/index/index")); } public function confirmOrder(){ if($this->request->isPost()){ $uid = $this->auth->id; $data = $this->request->post(); // 查询场次信息 $id = $data['id']; //查询系统组局场次信息 $venue = Venue::get($id); if(!$venue) $this->error('无此场次'); if($venue['ing_people'] >= $venue['max_people']) $this->error('该场次已满'); // 查询是否存在订单 $order = OrderModel::where('vid',$id)->where('uid',$uid)->find(); if($order && $order->status >0) $this->error('该场次已购买'); $GM = new GroupModel; //查询组局信息 $group = $GM->getgroupdetail($venue->gid); $return['pay_people'] = $data['pay_people']>0?$data['pay_people']:1; $return['part_date'] = $venue['part_date']; $return['price'] = $venue['pay_price']; $return['pay_price'] = $venue['pay_price']*$return['pay_people']; $return['can_join'] = $venue['max_people']-$venue['ing_people']; $return['shop_name'] = $group['shop_name']; $return['title'] = $group['title']; $return['start_time_text'] = $venue['start_time_text']; $return['end_time_text'] = $venue['end_time_text']; $return['pay_price_text'] = $return['pay_people']."人x¥".$return['price']; $return['phone'] = $this->auth->mobile; $return['min_people'] =$venue['min_people']; $return['max_people'] =$venue['max_people']; return $this->success('获取成功',$return); } } public function orderRefunds($refund){ try { if(!Service::refunds($refund)) throw new Exception("退出组局失败"); } catch (Exception $e) { return false; } return true; } }