error(__('User center already closed')); } } /** * 手机验证码登录 * * @ApiMethod (POST) * @param string $mobile 手机号 * @param string $captcha 验证码 */ public function mobilelogin() { $mobile = $this->request->post('mobile'); $captcha = $this->request->post('captcha'); if (!$mobile || !$captcha) { $this->error(__('Invalid parameters')); } if (!Validate::regex($mobile, "^1\d{10}$")) { $this->error(__('Mobile is incorrect')); } if (!Sms::check($mobile, $captcha, 'mobilelogin')) { $this->error(__('Captcha is incorrect')); } $user = \app\common\model\User::getByMobile($mobile); if ($user) { if ($user->status != 1) { $this->error(__('Account is locked')); } //如果已经有账号则直接登录 $ret = $this->auth->direct($user->id); } else { $ret = $this->auth->register($mobile, Random::alnum(), '', $mobile, []); } if ($ret) { Sms::flush($mobile, 'mobilelogin'); $data = ['userinfo' => $this->auth->getUserinfo()]; $this->success(__('Logged in successful'), $data); } else { $this->error($this->auth->getError()); } } /** * 修改手机号 * * @ApiMethod (POST) * @param string $mobile 手机号 * @param string $captcha 验证码 */ public function changemobile() { $user = $this->auth->getUser(); $mobile = $this->request->post('mobile'); $captcha = $this->request->post('captcha'); if (!$mobile || !$captcha) { $this->error(__('Invalid parameters')); } if (!Validate::regex($mobile, "^1\d{10}$")) { $this->error(__('Mobile is incorrect')); } if (\app\common\model\User::where('mobile', $mobile)->where('id', '<>', $user->id)->find()) { $this->error(__('Mobile already exists')); } $result = Sms::check($mobile, $captcha, 'changemobile'); if (!$result) { $this->error(__('Captcha is incorrect')); } $user->mobile = $mobile; $user->save(); Sms::flush($mobile, 'changemobile'); $this->success(); } /** * 微信小程序登录+注册 * code得到注册手机号,此手机号登录+注册 */ public function wxmini_regmobile_login(){ $code = input('code'); if (!$code) { $this->error(__('Invalid parameters')); } $config = config('wxMiniProgram'); $wechat = new Wechat($config['appid'],$config['secret']); $getuserphonenumber = $wechat->getuserphonenumber($code); if(!isset($getuserphonenumber['phone_info']['purePhoneNumber'])){ $this->error('授权获取手机号失败'); } $mobile = $getuserphonenumber['phone_info']['purePhoneNumber']; $userInfo = Db::name('user')->where('mobile',$mobile)->find(); // 判断用户是否已经存在 if($userInfo) { // 登录 if ($userInfo['status'] != 1) { $this->error(__('Account is locked')); } //如果已经有账号则直接登录 $res = $this->auth->direct($userInfo['id']); } else { $res = $this->auth->register('', '', '',$mobile, []); } if($res) { $this->success("登录成功!",$this->auth->getUserinfo()); } else { $this->error($this->auth->getError()); } } //////////////////////上面的没用到///////////////////// /** * 退出登录 * @ApiMethod (POST) */ public function logout() { if (!$this->request->isPost()) { $this->error(__('Invalid parameters')); } $this->auth->logout(); $this->success(__('Logout successful')); } /** * 修改会员个人信息 * * @ApiMethod (POST) * @param string $avatar 头像地址 * @param string $username 用户名 * @param string $nickname 昵称 * @param string $bio 个人简介 */ public function profile() { $avatar = input('avatar', '', 'trim,strip_tags,htmlspecialchars'); $mobile = input('mobile', ''); $nickname = input('nickname', ''); //修改用户 $data = []; if(!empty($avatar)) { $data['avatar'] = $avatar; } if(!empty($mobile)) { if (\app\common\model\User::where('mobile', $mobile)->where('id', '<>', $this->auth->id)->find()) { $this->error('手机号已被占用'); } $data['mobile'] = $mobile; } //未通过实名认证的才能改昵称 if(!empty($nickname) && $this->auth->idcard_status != 1) { $data['nickname'] = $nickname; $data['nickname_time'] = time(); } if(!empty($data)){ $update_rs = Db::name('user')->where('id',$this->auth->id)->update($data); if($update_rs === false){ $this->error('修改资料失败'); } } $this->success(); } /** * 微信小程序登录+注册 * code得到openid */ public function wxmini_openid_login() { $code = input('code'); if (!$code) { $this->error(__('Invalid parameters')); } $config = config('wxMiniProgram'); $getopenid = 'https://api.weixin.qq.com/sns/jscode2session?appid='.$config['appid'].'&secret='.$config['secret'].'&js_code='.$code.'&grant_type=authorization_code'; $openidInfo = $this->getJson($getopenid); if(!isset($openidInfo['openid'])) { $this->error('用户openid获取失败',$openidInfo); } $openid = $openidInfo['openid']; if (!$openid) { $this->error('用户openid获取失败'); } //用户信息 $userInfo = Db::name('user')->where(['mini_openid'=>$openid])->find(); if($userInfo) { if ($userInfo['status'] == 0) { $this->error('账号已被禁用'); } if ($userInfo['status'] == -1) { $this->error('账号已被注销'); } //如果已经有账号则直接登录 $res = $this->auth->direct($userInfo['id']); } else { $res = $this->auth->openid_register($openid); } if($res) { $this->success("登录成功!",$this->auth->getUserinfo()); } else { $this->error($this->auth->getError()); } } /** * json 请求 * @param $url * @return mixed */ private function getJson($url){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($ch); curl_close($ch); return json_decode($output, true); } //用户详细资料 public function getuserinfo(){ $info = $this->auth->getUserinfo(); $this->success(__('success'),$info); } }