| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 | 
							- <?php
 
- namespace 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, 'status' => 0]);
 
-                     // 充值后
 
-                     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;
 
-                         case 4:
 
-                             // 获取钻石配置信息
 
-                             $vip_config_id = $orderInfo['vip_config_id'];
 
-                             $vipConfigInfo = Db::name('diamond')->where(['id'=>$vip_config_id])->find();
 
-                             //修改用户钻石余额
 
-                             $diamond = $userInfo['diamond'] + $vipConfigInfo['number'];
 
-                             $res2 = Db::name('user')->where(['id' => $userInfo['id'], 'diamond' => $userInfo['diamond']])->setField('diamond', $diamond);
 
-                             // 添加钻石明细
 
-                             $diamond_log = Db::name('user_diamond_log')->where(['user_id' => $userInfo['id']])->order('id', 'desc')->find();
 
-                             if (!$diamond_log && $userInfo['diamond'] > 0) {
 
-                                 $res3 = false;
 
-                                 break;
 
-                             }
 
-                             if ($diamond_log && $diamond_log['after'] != $userInfo['diamond']) {
 
-                                 $res3 = false;
 
-                                 break;
 
-                             }
 
-                             $data = [];
 
-                             $data['user_id'] = $userInfo['id'];
 
-                             $data['diamond'] = $vipConfigInfo['number'];
 
-                             $data['before'] = $userInfo['diamond'];
 
-                             $data['after'] = $diamond;
 
-                             $data['memo'] = '充值';
 
-                             $data['createtime'] = time();
 
-                             $res3 = Db::name('user_diamond_log')->insertGetId($data);
 
-                             break;
 
-                     }
 
-                 }
 
-                 if($res1 && $res2 !== false && $res3) {
 
-                     Db::commit();
 
-                 } else {
 
-                     Db::rollback();
 
-                 }
 
-             }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();
 
-     }
 
- }
 
 
  |