error('参数错误'); } $app = Factory::miniProgram(config('app.mini_program')); $data = $app->auth->session($code); if(empty($data['openid'])){ $this->error($data['errmsg']); } $phone = ''; if($iv && $encryptedData) { require_once env('root_path').'/vendor/program/wxBizDataCrypt.php'; $sessionKey = $data['session_key']; $pc = new \WXBizDataCrypt(config('app.mini_program')['app_id'], $sessionKey); $errCode = $pc->decryptData($encryptedData, $iv, $info); if($errCode != 0) $this->error('微信登录失败'); $info = json_decode($info,true); $phone = $info['purePhoneNumber']; } $member = Db::name('store_member')->field('id,phone')->where('openid',$data['openid'])->find(); if(empty($member)){ //判断手机号是否已注册 if($phone){ $member_id = Db::name('store_member')->where('phone','=',$phone)->value('id'); if($member_id) $phone = ''; } $member_data = array( 'openid' => $data['openid'], 'headimg' => $headimg, 'name' => $name, 'pid' =>$pid, 'phone' => $phone, 'integral' => 0, 'growth' => 0, 'create_at'=>date("Y-m-d H:i:s") ); Db::table('store_member')->insert($member_data); $uid = Db::getLastInsID(); // 给推荐人奖励 if($pid){ $check_integral = Db::table('integral_info') ->where('user_id','=',$pid) ->where('create_at','> time',date('Y-m-d 00:00:00')) ->where('type','=',1) ->sum('integral'); if($check_integral < 100) { update_user_integral($pid,10,1,'恭喜亲通过邀请好友注册获得10积分',$uid);// 更新积分 update_user_growth($pid,10,1,'恭喜亲通过邀请好友注册获得10成长值',['register_id'=>$uid]);// 更新成长值&&等级 } } }else{ $uid = $member['id']; } if(empty($uid)) $this->error('数据有误'); $token = self::create_jwt($uid); $this->success('登录成功',$token); } /** * @param name:phone type:int require:1 default:-- desc:手机号 * @param name:password type:string require:1 default:-- desc:密码 * @return name:token type:string default:-- desc:用户登录成功后的token值 */ public function passwordLogin(){ $phone = input('phone'); $password = input('password'); if(empty($password) || empty($phone)){ $this->error('参数错误'); } $member_id = Db::name('store_member')->where('phone',$phone)->where('password',md5($password))->value('id'); if(empty($member_id)){ $this->error('手机号或密码错误'); } $token = self::create_jwt($member_id); $this->success('登录成功',$token); } //token加密 public function create_jwt($uid) { $key = md5(config('app.jwt')); //jwt的签发密钥,验证token的时候需要用到 $time = time(); //签发时间 $expire = $time + config('app.jwt_time'); //过期时间 $token = array( "uid" => $uid, "iss" => "https://zain.com",//签发组织 "aud" => "https://zain.com", //签发作者 "iat" => $time, "nbf" => $time, "exp" => $expire ); $jwt = JWT::encode($token, $key); return $jwt; } }