<?php namespace app\mobile\controller; use think\Validate; use think\Db; use app\common\controller\Api; use app\mobile\model\SecretSpec; use app\mobile\model\SecretOrder; use app\mobile\model\Company; use app\mobile\model\CompanyUser; use addons\epay\library\Service; /** * 密卷接口 */ class Secret extends Api { protected $noNeedLogin = ['index','info']; protected $noNeedRight = ['*']; public function _initialize() { parent::_initialize(); $this->model = model('app\mobile\model\Secret'); } /** * @ApiTitle (首页) * @ApiSummary (首页) * @ApiMethod (POST) * * @ApiReturn({ "code": 1, "msg": "成功", "time": "1599201246", "data": [{ "id": 1, //密卷名称 "title": "测试密卷", //密卷标题 "do_num": 20, //做过人数 "current_price": "10.00", //现价 "original_price": "10000.00" //原价 }] }) */ public function index() { $list = SecretModel::order('createtime desc')->select(); foreach ($list as $v) { $v->visible(['id','title','do_num','current_price','original_price']); } $this->success('成功',$list); } /** * @ApiTitle (详情) * @ApiSummary (详情) * @ApiMethod (POST) * * @ApiParams (name="secret_id", type="int", required=true, description="密卷ID") * * @ApiReturn({ "code": 1, "msg": "成功", "time": "1599803465", "data": { "id": 1, //密卷ID "title": "测试密卷", //密卷标题 "current_price": "10.00", // 当前价格 "original_price": "10000.00", //原价 "description": "测试密卷", //密卷介绍 "do_num": 20 //做过人数 } }) */ public function info() { $secret_id = $this->request->param('secret_id'); empty($secret_id) && $this->error('缺少必要参数'); $info = SecretModel::get($secret_id); empty($info) && $this->error('密卷信息不存在'); $info = $info->visible(['id','title','current_price','original_price','do_num','description']); $this->success('成功',$info); } /** * @ApiTitle (选择规格) * @ApiSummary (选择规格) * @ApiMethod (POST) * * @ApiParams (name="secret_id", type="int", required=true, description="密卷ID") * * @ApiReturn({ "code": 1, "msg": "成功", "time": "1599739316", "data": [{ "id": 1, //规格ID "secret_id": 1, //密卷ID "name": "基础版", //密卷名称 "current_price": "500.00", //当前价格 "original_price": "1000.00", //原价 "people_num": 20, //限制人数 "is_top": "0", //是否顶配:0=否,1=是 "createtime": null, "updatetime": null, "is_pay": 1 //是否可以购买:0=否,1=是 }] }) */ public function spec() { $company = Company::get(['user_id'=>$this->auth->id]); $secret_id = $this->request->param('secret_id'); empty($secret_id) && $this->error('缺少必要参数'); $info = SecretModel::get($secret_id); empty($info) && $this->error('密卷信息不存在'); $list = SecretSpec::where('secret_id',$secret_id)->select(); foreach ($list as &$v) { // 是否可购买 $people_num = CompanyUser::where('company_id',$company['id']) ->where('status','1') ->count(); if($v['is_top'] == '1'){ $v['is_pay'] = 1; }else{ $v['is_pay'] = $v['people_num'] < $people_num ? 0 : 1; } // 显示价格 $order = SecretOrder::where('company_id',$company['id']) ->where('secret_id',$secret_id) ->where('pay_status','1') ->order('people_num desc') ->find(); $v['current_price'] = !empty($order) ? $v['current_price']-$order['total_price'] : $v['current_price']; } $this->success('成功',$list); } /** * @ApiTitle (购买预览) * @ApiSummary (购买预览) * @ApiMethod (POST) * * @ApiParams (name="secret_id", type="int", required=true, description="密卷ID") * @ApiParams (name="spec_id", type="int", required=true, description="密卷规格ID") * @ApiParams (name="score_switch", type="int", description="积分开关:0=关,1=开") * * @ApiReturn({ "code": 1, "msg": "成功", "time": "1599046220", "data": { "id": 1, //试卷ID "title": "测试试卷", //试卷标题 "year": 2015, //年费(单位:年) "time": 100, //答题时间(单位:分) "pass_score": 80, //合格分数 "description": "这个还行", //试卷描述 "do_num": 10, //回答人数 "full_score": 100 //试卷分数(单位:分) } }) */ public function payView() { $param = $this->request->param(); if(!$order = $this->model->payView($this->auth->getUser(),$param)){ $this->error($this->model->getError(),null,$this->model->getCode()); } $this->success(__('成功'),$order); } /** * @ApiTitle (购买) * @ApiSummary (购买) * @ApiMethod (POST) * * @ApiParams (name="secret_id", type="int", required=true, description="密卷ID") * @ApiParams (name="spec_id", type="int", required=true, description="密卷规格ID") * @ApiParams (name="score_switch", type="int", description="积分开关:0=关,1=开") * @ApiParams (name="pay_type", type="string", required=true, description="支付方式:wechat=微信,alipay=支付宝") * * @ApiReturn({ "code": 1, "msg": "成功", "time": "1599046220", "data": { "id": 1, //试卷ID "title": "测试试卷", //试卷标题 "year": 2015, //年费(单位:年) "time": 100, //答题时间(单位:分) "pass_score": 80, //合格分数 "description": "这个还行", //试卷描述 "do_num": 10, //回答人数 "full_score": 100 //试卷分数(单位:分) } }) */ public function pay() { $param = $this->request->param(); if(!$order = $this->model->payView($this->auth->getUser(),$param)){ $this->error($this->model->getError(),null,$this->model->getCode()); } if (!$param['pay_type'] || !in_array($param['pay_type'], ['alipay', 'wechat'])) { $this->error("请选择支付方式"); } // 创建订单 $model = new SecretOrder; $model->add($this->auth->getUser(), $order, $param['pay_type']); //回调链接 $notifyurl = $this->request->root(true) . '/mobile/secret/notifyx/paytype/' . $param['pay_type']; $payment = Service::submitOrder($model['pay_price'], $model['order_sn'], $param['pay_type'], '密卷', $notifyurl, null, 'app'); $this->success('成功',$payment); } /** * 支付成功 */ public function notifyx() { $paytype = $this->request->param('paytype'); $pay = \addons\epay\library\Service::checkNotify($paytype); if (!$pay) { echo '签名错误'; return; } $data = $pay->verify(); try { $payamount = $paytype == 'alipay' ? $data['total_amount'] : $data['total_fee'] / 100; $out_trade_no = $data['out_trade_no']; // 处理订单逻辑 $order = SecretOrder::get(['order_sn'=>$out_trade_no,'pay_price'=>$payamount,'pay_type'=>$paytype]); if($order && $order['pay_status'] != '1'){ $order->save(['pay_status'=>'1','pay_time'=>time()]); } } catch (Exception $e) { } echo $pay->success(); } }