审查视图

application/api/controller/Pay.php 31.7 KB
郭盛 authored
1 2 3 4 5 6 7 8 9 10 11 12 13 14
<?php

namespace app\api\controller;

use app\common\controller\Api;
use EasyWeChat\Factory;
use function GuzzleHttp\Promise\inspect;
use think\Db;
use app\admin\model\User;
use think\Log;
use fast\Http;
use think\Validate;
use Exception;
use function EasyWeChat\Kernel\Support\generate_sign;
郭盛 authored
15
use app\nsms\nsms;
郭盛 authored
16 17 18 19 20
/**
 * 支付接口
 */
class Pay extends Api
{
郭盛 authored
21
    protected $noNeedLogin = ['test','payOrderNotify','vippayOrderNotify','picOrderNotify','videoOrderNotify','sms','send_sms'];
郭盛 authored
22
    protected $noNeedRight = ['*'];
郭盛 authored
23 24 25 26 27 28 29 30 31
    protected $uid = '';//token存贮uid
    protected $order_status = [];//订单状态
    public function _initialize()
    {
        parent::_initialize();
        $this->uid = $this->auth->getUserId();
    }

    /**
32
     * @ApiTitle    (充值支付)
郭盛 authored
33 34 35 36 37
     * @ApiSummary  (充值支付)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/pay/pay)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     *
38
     * @ApiParams   (name="order_id", type="inter", required=true, description="订单id")
郭盛 authored
39 40 41
     *
     */
    public function pay(){
42
        $rule = config('verify.path');
郭盛 authored
43
        if($this->request->isPost()){
44 45
            $order_id = $this->request->post('order_id');
            $openid = $this->getopenid();
郭盛 authored
46 47 48
            if(empty($openid)){
                $this->error(['code'=>2,'msg'=>'openid不能为空']);
            }
49 50 51 52
            $data = Db::name('toporder')->where('id',$order_id)->find();
            if($data){
                if($data['status'] == 2){
                    $this->error('该订单已支付过了');
郭盛 authored
53 54 55 56 57 58 59 60
                }else{
                    //创建支付对象
                    $config = config('verify.wx_pay');
                    $app = Factory::payment($config);
                    $result = $app->order->unify([
                        'body' => '山东航拍',
                        'out_trade_no' => $data['num'],//支付订单号
                        'total_fee' => $data['money']*100,//单位分
郭盛 authored
61
                        'notify_url' => 'https://areial.w.broing.cn/api/pay/payOrderNotify', // 支付结果通知网址,如果不设置则会使用配置里的默认地址
郭盛 authored
62
                        'trade_type' => 'JSAPI', // 请对应换成你的支付方式对应的值类型
郭盛 authored
63
                        'openid' => $openid['openid'],
郭盛 authored
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
                    ]);
                    if($result['return_code'] === 'SUCCESS' && $result['result_code'] === 'SUCCESS'){
                        $params = [
                            'appId'     => $config['app_id'],
                            'timeStamp' => time(),
                            'nonceStr'  => $result['nonce_str'], // 统一下单返回的随机字符串
                            'package'   => 'prepay_id='.$result['prepay_id'], // 统一下单Id
                            'signType'  => 'MD5', // 签名方法
                        ];
                        // 注意这里用的是商户平台的Key进行二次签名
                        $params['paySign'] = generate_sign($params, $config['key']);
                        $this->success('成功',$params);
                    }
                    $this->error($result['err_code_des']);
                }
            }else{
                $this->error('无效的订单');
            }
        }else{
            $this->error('请求方式错误');
        }
    }

    /**
郭盛 authored
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
     * @ApiTitle    (开通会员支付)
     * @ApiSummary  (开通会员支付)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/pay/vippay)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     *
     * @ApiParams   (name="order_id", type="inter", required=true, description="订单id")
     *
     */
    public function vippay(){
        $rule = config('verify.path');
        if($this->request->isPost()){
            $order_id = $this->request->post('order_id');
            $openid = $this->getopenid();
            if(empty($openid)){
                $this->error(['code'=>2,'msg'=>'openid不能为空']);
            }
            $data = Db::name('viporder')->where('id',$order_id)->find();
            if($data){
                if($data['status'] == 2){
                    $this->error('该订单已支付过了');
                }else{
郭盛 authored
110 111 112
                    if($data['user_id'] == 12){
                        $data['total'] = 0.01;
                    }
郭盛 authored
113 114 115 116 117 118
                    //创建支付对象
                    $config = config('verify.wx_pay');
                    $app = Factory::payment($config);
                    $result = $app->order->unify([
                        'body' => '山东航拍',
                        'out_trade_no' => $data['num'],//支付订单号
郭盛 authored
119
                        'total_fee' => $data['total']*100,//单位分
郭盛 authored
120
                        'notify_url' => 'https://areial.w.broing.cn/api/pay/vippayOrderNotify', // 支付结果通知网址,如果不设置则会使用配置里的默认地址
郭盛 authored
121
                        'trade_type' => 'JSAPI', // 请对应换成你的支付方式对应的值类型
郭盛 authored
122
                        'openid' => $openid['openid'],
郭盛 authored
123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
                    ]);
                    if($result['return_code'] === 'SUCCESS' && $result['result_code'] === 'SUCCESS'){
                        $params = [
                            'appId'     => $config['app_id'],
                            'timeStamp' => time(),
                            'nonceStr'  => $result['nonce_str'], // 统一下单返回的随机字符串
                            'package'   => 'prepay_id='.$result['prepay_id'], // 统一下单Id
                            'signType'  => 'MD5', // 签名方法
                        ];
                        // 注意这里用的是商户平台的Key进行二次签名
                        $params['paySign'] = generate_sign($params, $config['key']);
                        $this->success('成功',$params);
                    }
                    $this->error($result['err_code_des']);
                }
            }else{
                $this->error('无效的订单');
            }
        }else{
            $this->error('请求方式错误');
        }
    }

    /**
郭盛 authored
147 148
     * @ApiTitle    (购买支付)
     * @ApiSummary  (购买支付)
郭盛 authored
149 150 151 152 153
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/pay/picpay)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     *
     * @ApiParams   (name="order_id", type="inter", required=true, description="订单id")
郭盛 authored
154
     * @ApiParams   (name="type", type="inter", required=true, description="支付方式 1 为余额支付 2为微信支付")
郭盛 authored
155 156 157 158 159 160
     *
     */
    public function picpay(){
        $rule = config('verify.path');
        if($this->request->isPost()){
            $order_id = $this->request->post('order_id');
郭盛 authored
161
            $type = $this->request->post('type');
郭盛 authored
162
            //判断付费类型
郭盛 authored
163 164 165
            if(empty($type)){
                $this->error(['code'=>2,'msg'=>'缺少必要参数']);
            }
郭盛 authored
166
            $openid = $this->getopenid();
郭盛 authored
167
            //判断openid
郭盛 authored
168 169 170 171
            if(empty($openid)){
                $this->error(['code'=>2,'msg'=>'openid不能为空']);
            }
            $data = Db::name('order')->where('id',$order_id)->find();
郭盛 authored
172
            $pic_id = [];
郭盛 authored
173
            if(!empty($data['pic_id'])){
郭盛 authored
174 175
                $pic_id = explode(',',$data['pic_id']);
            }
郭盛 authored
176
            $video_id = unserialize($data['video_id']);
郭盛 authored
177
            //查询用户表 取出手机号
郭盛 authored
178 179
            $user = Db::name('user')->where('id',$data['user_id'])->find();
            $mobile = $user['mobile'];
郭盛 authored
180
            $str = "【仁甲看见SHOP】,感谢您购买仁甲看见SHOP素材。";
郭盛 authored
181
郭盛 authored
182 183 184 185 186
            if($type == 1){
                if($data){
                    if($data['status'] == 2){
                        $this->error('该订单已支付过了');
                    }else{
郭盛 authored
187
                        //判断总价是否正确
郭盛 authored
188
                        if($data['total'] > $user['money']){
郭盛 authored
189 190
                            $this->error(['code'=>2,'msg'=>'余额不足,请充值后重试']);
                        }
郭盛 authored
191
                        $money = $user['money'] - $data['total'];
郭盛 authored
192
                        $uid = $this->uid;
郭盛 authored
193 194
                        $login = Db::name('user')
                            ->where('id',$uid)
郭盛 authored
195
                            ->field('id,is_vip')
郭盛 authored
196
                            ->find();
郭盛 authored
197 198 199
                        // 启动事务
                        Db::startTrans();
                        try{
郭盛 authored
200
                            if(!empty($pic_id)){
郭盛 authored
201 202
                                //将购买次数加1
                                foreach ($pic_id as $key => $v){
郭盛 authored
203
                                    //非会员
郭盛 authored
204
                                    if($login['is_vip'] == 0){
郭盛 authored
205 206
                                        $pic = Db::name('pic')->field('id,price,buy_num,money')->where('id',$v)->find();
                                        Db::name('pic')->where('id',$pic['id'])->update(['buy_num'=>$pic['buy_num']+1,'money'=>$pic['money']+$pic['price']]);
郭盛 authored
207 208
                                    }else{
                                        //是会员
郭盛 authored
209
                                        $pic = Db::name('pic')->field('id,price,buy_num,money')->where('id',$v)->find();
郭盛 authored
210
                                        $total_money = $pic['money'] + ($pic['price']*0.75);
郭盛 authored
211
                                        Db::name('pic')->where('id',$pic['id'])->update(['buy_num'=>$pic['buy_num']+1,'money'=>$total_money]);
郭盛 authored
212
                                    }
郭盛 authored
213
                                }
郭盛 authored
214 215 216 217 218
                                //拼接发送短信的内容
                                foreach ($pic_id as $key => $v){
                                    $pic = Db::name('pic')->field('id,title,url,code')->where('id',$v)->find();
                                    $str .= "图片标题:$pic[title],云盘地址:$pic[url],提取码:$pic[code],";
                                }
郭盛 authored
219 220
                            }
                            if(!empty($video_id)){
郭盛 authored
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
                                //判断是否为会员
                                if($login['is_vip'] == 0){
                                    //不是会员的情况
                                    //将购买次数加1
                                    foreach ($video_id as $key => $val){
                                        $video = Db::name('video')->field('id,buy_num,price,four_price,eight_price,money')->where('id',$val['id'])->find();
                                        if($val['attr'] == 1){
                                            $video_money = $video['money'] + $video['price'];
                                        }elseif ($val['attr'] == 2){
                                            $video_money = $video['money'] + $video['four_price'];
                                        }else{
                                            $video_money = $video['money'] + $video['eight_price'];
                                        }
                                        Db::name('video')->where('id',$video['id'])->update(['buy_num'=>$video['buy_num']+1,'money'=>$video_money]);
                                    }
                                }else{
                                    //是会员的情况
                                    //将购买次数加1
                                    foreach ($video_id as $key => $val){
                                        $video = Db::name('video')->field('id,buy_num,price,four_price,eight_price,money')->where('id',$val['id'])->find();
                                        if($val['attr'] == 1){
                                            $video_money = $video['money'] + ($video['price']*0.75);
                                        }elseif ($val['attr'] == 2){
                                            $video_money = $video['money'] + ($video['four_price']*0.75);
                                        }else{
                                            $video_money = $video['money'] + ($video['eight_price']*0.75);
                                        }
                                        Db::name('video')->where('id',$video['id'])->update(['buy_num'=>$video['buy_num']+1,'money'=>$video_money]);
                                    }
郭盛 authored
250
                                }
郭盛 authored
251
郭盛 authored
252
                                //判断视频的属性
郭盛 authored
253 254 255 256 257 258 259 260 261
                                foreach ($video_id as &$val){
                                    if($val['attr'] == 1){
                                        $val['attr'] = '2k';
                                    }elseif ($val['attr'] == 2){
                                        $val['attr'] = '4k';
                                    }else{
                                        $val['attr'] = '8k';
                                    }
                                }
郭盛 authored
262
                                //拼接发送短信的内容
郭盛 authored
263 264 265 266 267 268 269 270 271 272 273 274 275
                                foreach ($video_id as $k=>$v){
                                    if($v['attr'] == '4k'){
                                        $video = Db::name('video')->field('id,title,four_url,four_code')->where('id',$v['id'])->find();
                                        $str .= "视频标题:$video[title],云盘地址:$video[four_url],提取码:$video[four_code]";
                                    }elseif ($v['attr'] == '2k'){
                                        $video = Db::name('video')->field('id,title,two_url,two_code')->where('id',$v['id'])->find();
                                        $str .= "视频标题:$video[title],云盘地址:$video[two_url],提取码:$video[two_code]";
                                    }elseif ($v['attr'] == '8k'){
                                        $video = Db::name('video')->field('id,title,eight_url,eight_code')->where('id',$v['id'])->find();
                                        $str .= "视频标题:$video[title],云盘地址:$video[eight_url],提取码:$video[eight_code]";
                                    }
                                }
                            }
郭盛 authored
276
                            //发送短信
郭盛 authored
277 278 279
                            if(!empty($mobile)){
                                $result = $this->sms($mobile,$str);
                            }
郭盛 authored
280 281 282 283 284 285 286 287 288 289 290
                            $arr = Db::name('user')->where('id',$data['user_id'])->update(['money'=>$money]);
                            $res = Db::name('order')->where('id',$order_id)->update(['status'=>2,'paytime'=>time()]);
                            if($res && $arr){
                                true;
                            }
                            // 提交事务
                            Db::commit();
                        } catch (\Exception $e) {
                            dump($e->getMessage());
                            // 回滚事务
                            Db::rollback();
郭盛 authored
291
                            $this->error('购买失败');
郭盛 authored
292
                        }
郭盛 authored
293
                        $this->success('SUCCESS','支付成功');
294
                    }
郭盛 authored
295 296
                }else{
                    $this->error('无效的订单');
郭盛 authored
297
                }
298
            }else{
郭盛 authored
299 300 301 302 303 304 305 306 307 308 309
                if($data){
                    if($data['status'] == 2){
                        $this->error('该订单已支付过了');
                    }else{
                        //创建支付对象
                        $config = config('verify.wx_pay');
                        $app = Factory::payment($config);
                        $result = $app->order->unify([
                            'body' => '山东航拍',
                            'out_trade_no' => $data['num'],//支付订单号
                            'total_fee' => $data['total']*100,//单位分
郭盛 authored
310
                            'notify_url' => 'https://areial.w.broing.cn/api/pay/picOrderNotify', // 支付结果通知网址,如果不设置则会使用配置里的默认地址
郭盛 authored
311
                            'trade_type' => 'JSAPI', // 请对应换成你的支付方式对应的值类型
郭盛 authored
312
                            'openid' => $openid['openid'],
郭盛 authored
313 314 315 316 317 318 319 320 321 322 323 324 325 326
                        ]);
                        if($result['return_code'] === 'SUCCESS' && $result['result_code'] === 'SUCCESS'){
                            $params = [
                                'appId'     => $config['app_id'],
                                'timeStamp' => time(),
                                'nonceStr'  => $result['nonce_str'], // 统一下单返回的随机字符串
                                'package'   => 'prepay_id='.$result['prepay_id'], // 统一下单Id
                                'signType'  => 'MD5', // 签名方法
                            ];
                            // 注意这里用的是商户平台的Key进行二次签名
                            $params['paySign'] = generate_sign($params, $config['key']);
                            $this->success('成功',$params);
                        }
                        $this->error($result['err_code_des']);
郭盛 authored
327
郭盛 authored
328 329 330 331
                    }
                }else{
                    $this->error('无效的订单');
                }
郭盛 authored
332 333 334 335 336 337
            }
        }else{
            $this->error('请求方式错误');
        }
    }
郭盛 authored
338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355

    /**
     * @ApiTitle    (预约拍摄)
     * @ApiSummary  (预约拍摄)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/pay/appointment)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     *
     * @ApiParams   (name="phone", type="inter", required=true, description="手机号")
     *
     */
    public function appointment()
    {
        $u_id = $this->uid;
        $phone = $this->request->param('phone');
        if(empty($phone)){
            $this->error('缺少必要参数');
        }
郭盛 authored
356 357
        $mobile = 13780608990;
        $content = "【仁甲看见SHOP】提醒您,您有新预约客户,客户电话为:$phone ,请您及时回复!";
郭盛 authored
358 359
        //发送短信
        $result = $this->sms($mobile,$content);
郭盛 authored
360 361 362 363 364
        if($result == 1){
            $this->success('success','成功');
        }else{
            $this->error('失败');
        }
郭盛 authored
365 366
    }
郭盛 authored
367 368 369 370 371
    //发送短信
    public function sms($mobile,$content){
        $note = array(
            'content' 	=> $content,//短信内容
            'mobile' 	=> $mobile,//手机号码
郭盛 authored
372
            'productid' => '676767',//模板id
郭盛 authored
373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389
            'xh'		=> ''//小号
        );
        $result = $this->send_sms($note);
        return $result;
    }
    function send_sms($data){
        //todo 短信账号密码
//        require_once EXTEND_PATH . 'nsms/nsms.php';
        $url 		= "http://www.ztsms.cn/sendNSms.do";
        $username 	= 'hangpai';
        $password 	= 'Cxz307312';
        $sendAPI = new nsms($url, $username, $password);
        $sendAPI->data = $data;/*初始化数据包*/
        $return = $sendAPI->sendSMS('POST');
        return $return;
    }
390
    //支付订单结果通知(无需调用)
郭盛 authored
391 392 393 394
    public function payOrderNotify(){
        $config = config('verify.wx_pay');
        $app = Factory::payment($config);
        $response = $app->handlePaidNotify(function($message, $fail){
郭盛 authored
395
            Log::write(date('Y-m-d H:i:s').json_encode($message,JSON_UNESCAPED_UNICODE),'notice');
396 397 398
            $data = Db::name('toporder')
                ->where('num',$message['out_trade_no'])
                ->find();
郭盛 authored
399 400 401
            //return_code 表示通信状态
            if ($message['return_code'] === 'SUCCESS') {
                if ($message['result_code'] === 'SUCCESS') {
郭盛 authored
402 403
                    if($data['status'] == 1) {
                        //支付成功,更新订单状态
郭盛 authored
404
                        $toporder['id'] = $data['id'];
郭盛 authored
405 406 407 408 409 410
                        $toporder['status'] = 2;
                        $toporder['paytime'] = time();
                        $money = $data['money'];
                        // 启动事务
                        Db::startTrans();
                        try {
郭盛 authored
411
                            Db::name('toporder')->update($toporder);
郭盛 authored
412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433
                            //判断用户充值金额是否大于等于8000
                            if ($data['money'] >= 8000) {
                                //大于等于的情况
                                $arr = Db::name('user')->where('id', $data['user_id'])->find();
                                //判断用户是否已经是会员了
                                if ($arr['is_vip'] == 1) {
                                    //已经是会员
                                    $list['money'] = $arr['money'] + $money;
                                    Db::name('user')->where('id', $data['user_id'])->update(['money' => $list['money']]);
                                    // 提交事务
                                    Db::commit();
                                } else {
                                    //不是会员
                                    $list['money'] = $arr['money'] + $money;
                                    $list['is_vip'] = 1;
                                    Db::name('user')->where('id', $data['user_id'])->update($list);
                                    // 提交事务
                                    Db::commit();
                                }
                            } else {
                                //小于8000的情况
                                $arr = Db::name('user')->where('id', $data['user_id'])->find();
郭盛 authored
434
                                $list['money'] = $arr['money'] + $money;
郭盛 authored
435
                                Db::name('user')->where('id', $data['user_id'])->update(['money' => $list['money']]);
郭盛 authored
436 437 438
                                // 提交事务
                                Db::commit();
                            }
郭盛 authored
439 440 441
                        } catch (\Exception $e) {
                            // 回滚事务
                            Db::rollback();
郭盛 authored
442
                            return false;
郭盛 authored
443 444 445
                        }
                    }
                }else{
郭盛 authored
446
                    $toporder['status'] = 1;
郭盛 authored
447
                    //支付失败
郭盛 authored
448
                    Db::name('toporder')->where('num',$message['out_trade_no'])->update($toporder);
郭盛 authored
449
                    return false;
郭盛 authored
450 451 452 453
                }
            }else{
                return $fail('通信失败,请稍后再通知我');
            }
郭盛 authored
454
            return true;
郭盛 authored
455 456 457 458 459 460 461 462 463
        });
        $response->send();
    }

    //支付开通会员结果通知(无需调用)
    public function vippayOrderNotify(){
        $config = config('verify.wx_pay');
        $app = Factory::payment($config);
        $response = $app->handlePaidNotify(function($message, $fail){
郭盛 authored
464
            Log::write(date('Y-m-d H:i:s').json_encode($message,JSON_UNESCAPED_UNICODE),'notice');
郭盛 authored
465 466 467 468 469 470
            $data = Db::name('viporder')
                ->where('num',$message['out_trade_no'])
                ->find();
            //return_code 表示通信状态
            if ($message['return_code'] === 'SUCCESS') {
                if ($message['result_code'] === 'SUCCESS') {
郭盛 authored
471 472
                    if($data['status'] == 1){
                        //支付成功,更新订单状态
郭盛 authored
473 474 475
                        $viporder['status'] = 2;
                        $viporder['paytime'] = time();
                        $money = $data['total'];
郭盛 authored
476 477 478
                        // 启动事务
                        Db::startTrans();
                        try{
郭盛 authored
479
                            Db::name('viporder')->where('id',$data['id'])->update($viporder);
郭盛 authored
480
                            //判断用户充值金额是否大于等于8000
郭盛 authored
481
                            if($data['total']>=8000){
郭盛 authored
482 483 484 485 486 487 488 489 490 491 492 493 494 495 496
                                //大于等于的情况
                                $arr = Db::name('user')->where('id',$data['user_id'])->find();
                                //不是会员
                                $list['money'] = $arr['money'] + $money;
                                $list['is_vip'] = 1;
                                 Db::name('user')->where('id',$data['user_id'])->update($list);
                                // 提交事务
                                Db::commit();
                            }else{
                                //小于8000的情况
                                $arr = Db::name('user')->where('id',$data['user_id'])->find();
                                $list['money'] = $arr['money'] + $money;
                                Db::name('user')->where('id',$data['user_id'])->update(['money'=>$list['money']]);
                                // 提交事务
                                Db::commit();
郭盛 authored
497
                            }
郭盛 authored
498 499 500
                        } catch (\Exception $e) {
                            // 回滚事务
                            Db::rollback();
郭盛 authored
501
                            return false;
502 503 504
                        }
                    }
                }else{
郭盛 authored
505
                    //支付失败
郭盛 authored
506
                    Db::name('viporder')->where('num',$message['out_trade_no'])->update(['status'=>1]);
郭盛 authored
507
                    return false;
郭盛 authored
508
                }
509
            }else{
郭盛 authored
510 511
                return $fail('通信失败,请稍后再通知我');
            }
郭盛 authored
512
            return true;
郭盛 authored
513 514 515
        });
        $response->send();
    }
郭盛 authored
516
    
郭盛 authored
517 518 519 520
    //图片支付订单结果通知(无需调用)
    public function picOrderNotify(){
        $config = config('verify.wx_pay');
        $app = Factory::payment($config);
郭盛 authored
521
郭盛 authored
522
        $response = $app->handlePaidNotify(function($message, $fail){
郭盛 authored
523 524 525 526 527 528 529 530 531 532 533 534 535

            //找到该订单信息
            $data = Db::name('order')->where('num',$message['out_trade_no'])->find();
            $pic_id = [];
            if(!empty($data['pic_id'])){
                $pic_id = explode(',',$data['pic_id']);
            }
            $video_id = unserialize($data['video_id']);
            //查询该用户信息以及是否为会员身份
            $user = Db::name('user')->where('id',$data['user_id'])->find();
            $mobile = $user['mobile'];
            $str = "【仁甲看见SHOP】,感谢您购买仁甲看见SHOP素材。";
郭盛 authored
536 537 538
            //return_code 表示通信状态
            if ($message['return_code'] === 'SUCCESS') {
                if ($message['result_code'] === 'SUCCESS') {
郭盛 authored
539 540
                    //图片
                    if(!empty($pic_id)){
郭盛 authored
541 542 543
                        //将购买次数加1
                        foreach ($pic_id as $key => $v){
                            //非会员
郭盛 authored
544
                            if($user['is_vip'] == 0){
郭盛 authored
545
                                $pic = Db::name('pic')->field('id,price,buy_num,money')->where('id',$v)->find();
郭盛 authored
546
                                Db::name('pic')->where('id',$pic['id'])->update(['buy_num'=>$pic['buy_num']+1,'money'=>$pic['money']+$pic['price']]);
547
                            }else{
郭盛 authored
548
                                //是会员
郭盛 authored
549
                                $pic = Db::name('pic')->field('id,price,buy_num,money')->where('id',$v)->find();
郭盛 authored
550 551
                                $total_money = $pic['money'] + ($pic['price']*0.75);
                                Db::name('pic')->where('id',$pic['id'])->update(['buy_num'=>$pic['buy_num']+1,'money'=>$total_money]);
552
                            }
郭盛 authored
553
                        }
郭盛 authored
554 555 556 557 558
                        //拼接发送短信的内容
                        foreach ($pic_id as $key => $v){
                            $pic = Db::name('pic')->field('id,title,url,code')->where('id',$v)->find();
                            $str .= "图片标题:$pic[title],云盘地址:$pic[url],提取码:$pic[code],";
                        }
郭盛 authored
559
                    }
郭盛 authored
560 561
                    //视频
                    if(!empty($video_id)){
郭盛 authored
562
                        //判断是否为会员
郭盛 authored
563
                        if($user['is_vip'] == 0){
郭盛 authored
564 565 566 567
                            //不是会员的情况
                            //将购买次数加1
                            foreach ($video_id as $key => $val){
                                $video = Db::name('video')->field('id,buy_num,price,four_price,eight_price,money')->where('id',$val['id'])->find();
郭盛 authored
568
                                if($val['attr'] == 1){
郭盛 authored
569
                                    $video_money = $video['money'] + $video['price'];
郭盛 authored
570
                                }elseif ($val['attr'] == 2){
郭盛 authored
571
                                    $video_money = $video['money'] + $video['four_price'];
郭盛 authored
572
                                }else{
郭盛 authored
573
                                    $video_money = $video['money'] + $video['eight_price'];
郭盛 authored
574
                                }
郭盛 authored
575
                                Db::name('video')->where('id',$video['id'])->update(['buy_num'=>$video['buy_num']+1,'money'=>$video_money]);
郭盛 authored
576
                            }
郭盛 authored
577 578 579 580 581 582 583 584 585 586 587
                        }else{
                            //是会员的情况
                            //将购买次数加1
                            foreach ($video_id as $key => $val){
                                $video = Db::name('video')->field('id,buy_num,price,four_price,eight_price,money')->where('id',$val['id'])->find();
                                if($val['attr'] == 1){
                                    $video_money = $video['money'] + ($video['price']*0.75);
                                }elseif ($val['attr'] == 2){
                                    $video_money = $video['money'] + ($video['four_price']*0.75);
                                }else{
                                    $video_money = $video['money'] + ($video['eight_price']*0.75);
郭盛 authored
588
                                }
郭盛 authored
589
                                Db::name('video')->where('id',$video['id'])->update(['buy_num'=>$video['buy_num']+1,'money'=>$video_money]);
郭盛 authored
590 591
                            }
                        }
郭盛 authored
592 593 594 595 596 597 598 599 600 601

                        //判断视频的属性
                        foreach ($video_id as &$val){
                            if($val['attr'] == 1){
                                $val['attr'] = '2k';
                            }elseif ($val['attr'] == 2){
                                $val['attr'] = '4k';
                            }else{
                                $val['attr'] = '8k';
                            }
郭盛 authored
602
                        }
郭盛 authored
603 604 605 606 607 608 609 610 611 612 613 614
                        //拼接发送短信的内容
                        foreach ($video_id as $k=>$v){
                            if($v['attr'] == '4k'){
                                $video = Db::name('video')->field('id,title,four_url,four_code')->where('id',$v['id'])->find();
                                $str .= "视频标题:$video[title],云盘地址:$video[four_url],提取码:$video[four_code]";
                            }elseif ($v['attr'] == '2k'){
                                $video = Db::name('video')->field('id,title,two_url,two_code')->where('id',$v['id'])->find();
                                $str .= "视频标题:$video[title],云盘地址:$video[two_url],提取码:$video[two_code]";
                            }elseif ($v['attr'] == '8k'){
                                $video = Db::name('video')->field('id,title,eight_url,eight_code')->where('id',$v['id'])->find();
                                $str .= "视频标题:$video[title],云盘地址:$video[eight_url],提取码:$video[eight_code]";
                            }
郭盛 authored
615
                        }
郭盛 authored
616
                    }
郭盛 authored
617 618 619 620 621
                    //发送短信
                    if(!empty($mobile)){
                        $result = $this->sms($mobile,$str);
                    }
                    //支付成功,更新订单状态
郭盛 authored
622
                    $toporder['status'] = 2;
郭盛 authored
623
                    $toporder['paytime'] = time();
郭盛 authored
624 625 626 627
                }else{
                    //支付失败
                    $toporder['status'] = 1;
                }
郭盛 authored
628
                Db::name('order')->where('num',$message['out_trade_no'])->update($toporder);
郭盛 authored
629 630 631
            }else{
                return $fail('通信失败,请稍后再通知我');
            }
郭盛 authored
632
            return true;
郭盛 authored
633 634 635 636 637 638 639 640 641 642 643 644 645 646 647
        });
        $response->send();
    }

    //获取用户openid
    public function getopenid()
    {
        $user_id = $this->uid;
        $openid = Db::name('user')
            ->where('id',$user_id)
            ->field('openid')
            ->find();

        return $openid;
    }
郭盛 authored
648
}