| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 | <?phpnamespace app\api\controller;use app\common\controller\Api;use think\Db;use think\Log;use addons\epay\library\Service;/** * 支付回调 */class Notify extends Api{    protected $noNeedLogin = ['*'];    protected $noNeedRight = ['*'];    /**     * 支付回调     */    public function notify() {        $paytype = $this->request->param('paytype');        $pay = Service::checkNotify($paytype);//        Log::record("=======================", 'info');//        Log::record("pay:", 'info');//        Log::record($pay, 'info');//        Log::record("=======================", 'info');        if (!$pay) {            echo '签名错误';            return;        }        $data = $pay->verify();        $time = time();        try {            $payamount = $paytype == 'alipay' ? $data['total_amount'] : $data['total_fee'] / 100;            $out_trade_no = $data['out_trade_no'];            Db::startTrans();            try{                $orderModel = new \app\common\model\RecharOrder();                $userModel = new \app\common\model\User();                $orderInfo = $orderModel->where(["order_no"=>$out_trade_no])->find();                $userInfo = $userModel->where(["id"=>$orderInfo["user_id"]])->find();                $res1 = false;                $res2 = false;                $res3 = false;                if($orderInfo['status'] == 0) {                    // 修改订单状态                    $res1 = $orderModel->update(["status"=>1,"updatetime"=>$time],["order_no"=>$out_trade_no]);                    // 充值后                    switch($orderInfo['purpose']) {                        case 1:                            // 修改用户为已缴纳认证费                            $userInfo->recharge_auth = 1;                            $res2 = $userInfo->save();                            $res3 = true;                            break;                        case 2:                            // 添加有眼缘记录--单次付费                            $data = [];                            $data['user_id'] = $userInfo->id;                            $data['fate_user_id'] = $orderInfo->fate_user_id;                            if(!\app\common\model\UserFate::where($data)->find()) {                                $data['createtime'] = $time;                                $res2 = \app\common\model\UserFate::insert($data);                            } else {                                $res2 = true;                            }                            // 返利                            $preuser_id = $userInfo->pre_user_id;                            if($userInfo->vip_duetime < $time) {                                $memo = '用户充值获得收益!';                                $profit = $payamount * config('site.userProfitRate') * 0.01;                            } else {                                $memo = '会员充值获得收益!';                                $profit = $payamount * config('site.vipProfitRate') * 0.01;                            }                            if($profit>=0.01 && $preuser_id > 0) {                                $res3 = \app\common\model\User::profit($profit,$preuser_id,$memo);                            } else {                                $res3 = true;                            }                            break;                        case 3:                            // 获取vip配置信息                            $vip_config_id = $orderInfo['vip_config_id'];                            $vipConfigInfo = \app\admin\model\vip\Config::where(['id'=>$vip_config_id])->find();                            // 计算vip到期时间                            if($userInfo->vip_duetime < $time) {                                $duetime = strtotime ( '+'.intval($vipConfigInfo['time']).' month' );                            } else {                                $duetime = strtotime ( '+'.intval($vipConfigInfo['time']).' month',$userInfo->vip_duetime);                            }                            // 修改用户为vip                            if($userInfo->vip_duetime <= time()) {                                $userInfo->view_count = $vipConfigInfo->give_times; // 今日剩余次数                                $userInfo->view_date = date('Y-m-d'); // 次数最后更新日期                            }                            $userInfo->vip_duetime = $duetime;                            $res2 = $userInfo->save();                            // 添加查看次数                            $data = [];                            $data['user_id'] = $userInfo->id;                            $data['end_date'] = date("Y-m-d",$duetime);                            $data['times'] = $vipConfigInfo->give_times;                            $data['createtime'] = time();                            $res3 = \app\common\model\GiveFateLog::insert($data);                            break;                    }                }                if($res1 && $res2 !== false && $res3) {                    Db::commit();                }            }catch (ValidateException $e) {                Db::rollback();                $this->error($e->getMessage());            } catch (PDOException $e) {                Db::rollback();                $this->error($e->getMessage());            } catch (Exception $e) {                Db::rollback();                $this->error($e->getMessage());            }            //你可以在此编写订单逻辑        } catch (Exception $e) {        }        echo $pay->success();    }}
 |