Browse Source

用户接口

lizhen_gitee 7 months ago
parent
commit
2e57833655

+ 157 - 50
application/api/controller/User.php

@@ -5,29 +5,183 @@ namespace app\api\controller;
 use app\common\controller\Api;
 use app\common\library\Ems;
 use app\common\library\Sms;
+use app\common\library\Wechat;
 use fast\Random;
 use think\Config;
 use think\Validate;
+use think\Db;
 
 /**
  * 会员接口
  */
 class User extends Api
 {
-    protected $noNeedLogin = ['login', 'mobilelogin', 'register', 'resetpwd', 'changeemail', 'changemobile', 'third'];
+    protected $noNeedLogin = [''];
     protected $noNeedRight = '*';
 
     public function _initialize()
     {
         parent::_initialize();
+    }
+
+    //用户详细资料
+    public function getuserinfo(){
+        $info = $this->auth->getUserinfo();
 
-        if (!Config::get('fastadmin.usercenter')) {
-            $this->error(__('User center already closed'));
+        $this->success(__('success'),$info);
+    }
+
+    /**
+     * 退出登录
+     * @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()
+    {
+        $user = $this->auth->getUser();
+        $username = $this->request->post('username');
+        $nickname = $this->request->post('nickname');
+        $bio = $this->request->post('bio');
+        $avatar = $this->request->post('avatar', '', 'trim,strip_tags,htmlspecialchars');
+        if ($username) {
+            $exists = \app\common\model\User::where('username', $username)->where('id', '<>', $this->auth->id)->find();
+            if ($exists) {
+                $this->error(__('Username already exists'));
+            }
+            $user->username = $username;
+        }
+        if ($nickname) {
+            $exists = \app\common\model\User::where('nickname', $nickname)->where('id', '<>', $this->auth->id)->find();
+            if ($exists) {
+                $this->error(__('Nickname already exists'));
+            }
+            $user->nickname = $nickname;
+        }
+        $user->bio = $bio;
+        $user->avatar = $avatar;
+        $user->save();
+        $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());
+        }
+
+    }
+
+    /**
+     * 微信小程序登录+注册
+     * 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());
+        }
+    }
+
+    /**
+     * 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 index()
@@ -136,54 +290,7 @@ class User extends Api
         }
     }
 
-    /**
-     * 退出登录
-     * @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()
-    {
-        $user = $this->auth->getUser();
-        $username = $this->request->post('username');
-        $nickname = $this->request->post('nickname');
-        $bio = $this->request->post('bio');
-        $avatar = $this->request->post('avatar', '', 'trim,strip_tags,htmlspecialchars');
-        if ($username) {
-            $exists = \app\common\model\User::where('username', $username)->where('id', '<>', $this->auth->id)->find();
-            if ($exists) {
-                $this->error(__('Username already exists'));
-            }
-            $user->username = $username;
-        }
-        if ($nickname) {
-            $exists = \app\common\model\User::where('nickname', $nickname)->where('id', '<>', $this->auth->id)->find();
-            if ($exists) {
-                $this->error(__('Nickname already exists'));
-            }
-            $user->nickname = $nickname;
-        }
-        $user->bio = $bio;
-        $user->avatar = $avatar;
-        $user->save();
-        $this->success();
-    }
 
     /**
      * 修改邮箱

+ 6 - 22
application/common/library/Auth.php

@@ -134,19 +134,8 @@ class Auth
     public function register($username, $password, $email = '', $mobile = '', $extend = [])
     {
         // 检测用户名、昵称、邮箱、手机号是否存在
-        if (User::getByUsername($username)) {
-            $this->setError('Username already exist');
-            return false;
-        }
-        if (User::getByNickname($username)) {
-            $this->setError('Nickname already exist');
-            return false;
-        }
-        if ($email && User::getByEmail($email)) {
-            $this->setError('Email already exist');
-            return false;
-        }
-        if ($mobile && User::getByMobile($mobile)) {
+
+        if (User::getByMobile($mobile)) {
             $this->setError('Mobile already exist');
             return false;
         }
@@ -155,17 +144,11 @@ class Auth
         $time = time();
 
         $data = [
-            'username' => $username,
-            'password' => $password,
-            'email'    => $email,
             'mobile'   => $mobile,
-            'level'    => 1,
-            'score'    => 0,
-            'avatar'   => '',
+            'avatar'   => config('default_avatar'),
+            'nickname'  => $this->get_rand_nick_name(),
         ];
         $params = array_merge($data, [
-            'nickname'  => preg_match("/^1[3-9]{1}\d{9}$/", $username) ? substr_replace($username, '****', 3, 4) : $username,
-            'salt'      => Random::alnum(),
             'jointime'  => $time,
             'joinip'    => $ip,
             'logintime' => $time,
@@ -173,7 +156,6 @@ class Auth
             'prevtime'  => $time,
             'status'    => 1
         ]);
-        $params['password'] = $this->getEncryptPassword($password, $params['salt']);
         $params = array_merge($params, $extend);
 
         //账号注册时需要开启事务,避免出现垃圾数据
@@ -182,6 +164,8 @@ class Auth
             $user = User::create($params, true);
 
             $this->_user = User::get($user->id);
+            $this->_user->username = 'u' . (10000 + $user->id);
+            $this->_user->save();
 
             //设置Token
             $this->_token = Random::uuid();

+ 22 - 6
application/common/library/Wechat.php

@@ -17,11 +17,10 @@ class Wechat
 
     private $scope = 'snsapi_userinfo';
 
-    public function __construct()
+    public function __construct($app_id, $app_secret)
     {
-        $wxConfig = config('wechat_app_login');
-        $this->app_id = $wxConfig['appid'];
-        $this->app_secret = $wxConfig['secret'];
+        $this->app_id = $app_id;
+        $this->app_secret = $app_secret;
     }
 
     /**
@@ -120,7 +119,24 @@ class Wechat
         return [];
     }
 
-   /* public function getPublicAccessToken(){
+    //获取微信注册手机号
+    public function getuserphonenumber($code = ''){
+        $access_token = $this->getPublicAccessToken();
+
+        $params = [
+            'code' => $code,
+        ];
+
+        $ret = Http::sendRequest('https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token='.$access_token, json_encode($params), 'POST');
+
+        if ($ret['ret']) {
+            $ar = json_decode($ret['msg'], true);
+            return $ar;
+        }
+        return [];
+    }
+
+    public function getPublicAccessToken(){
         $ret = Http::sendRequest('https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$this->app_id.'&secret='.$this->app_secret);
 
         if ($ret['ret']) {
@@ -128,7 +144,7 @@ class Wechat
 
             return $ar['access_token'];
         }
-    }*/
+    }
 
     //{"errcode":0,"errmsg":"ok","msgid":2054095443608862720}
     /*public function send($ac,$openid,$first,$keyword1,$keyword2,$keyword3,$remark,$color){