Notify.php 4.1 KB
<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2019/11/27
 * Time: 15:59
 */

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;
use app\nsms\sendAPI;

class Notify extends Api
{
    protected $noNeedLogin = ['picOrderNotify'];

    //图片支付订单结果通知(无需调用)
    public function picOrderNotify(){
        $config = config('verify.wx_pay');
        $app = Factory::payment($config);
        $response = $app->handlePaidNotify(function($message, $fail){
            //return_code 表示通信状态
            if ($message['return_code'] === 'SUCCESS') {
                if ($message['result_code'] === 'SUCCESS') {
                    //支付成功,更新订单状态
                    $toporder['status'] = 2;
                    $toporder['paytime'] = time();

                    $data = Db::name('order')->where('id',$message['out_trade_no'])->find();
                    $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 = "【仁甲看见】";
                    if(!empty($pic_id)){
                        foreach ($pic_id as $key => $v){
                            $pic = Db::name('pic')->field('id,buy_num')->where('id',$v)->find();
                            Db::name('pic')->where('id',$pic['id'])->update(['buy_num'=>$pic['buy_num']+1]);
                        }
                        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],";
                        }
                    }
                    if(!empty($video_id)){
                        foreach ($video_id as &$val){
                            if($val['attr'] == 1){
                                $val['attr'] = '2k';
                            }elseif ($val['attr'] == 2){
                                $val['attr'] = '4k';
                            }else{
                                $val['attr'] = '8k';
                            }
                        }
                        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]";
                            }
                        }
                    }
                    //发送短信
                    if(!empty($mobile)){
                        $result = $this->sms($mobile,$str);
                    }
                }else{
                    //支付失败
                    $toporder['status'] = 1;
                }
            }else{
                return $fail('通信失败,请稍后再通知我');
            }
            Db::name('order')->where('num',$message['out_trade_no'])->update($toporder);
            return true; // 返回处理完成
        });
        $response->send();
    }
}