|
@@ -104,7 +104,7 @@ class User extends Api
|
|
$extend = [
|
|
$extend = [
|
|
'intro_uid' => $intro_uid,
|
|
'intro_uid' => $intro_uid,
|
|
];
|
|
];
|
|
- $ret = $this->auth->register($mobile, Random::alnum(), '', $mobile, $extend);
|
|
|
|
|
|
+ $ret = $this->auth->mobile_register($mobile, Random::alnum(), '', $mobile, $extend);
|
|
}
|
|
}
|
|
if ($ret) {
|
|
if ($ret) {
|
|
Sms::flush($mobile, 'mobilelogin');
|
|
Sms::flush($mobile, 'mobilelogin');
|
|
@@ -134,13 +134,12 @@ class User extends Api
|
|
{
|
|
{
|
|
$username = $this->request->post('username');
|
|
$username = $this->request->post('username');
|
|
$password = $this->request->post('password');
|
|
$password = $this->request->post('password');
|
|
- $email = $this->request->post('email');
|
|
|
|
- $mobile = $this->request->post('mobile');
|
|
|
|
- $code = $this->request->post('code');
|
|
|
|
|
|
+// $mobile = $this->request->post('mobile');
|
|
|
|
+ $introcode = $this->request->post('introcode','');
|
|
if (!$username || !$password) {
|
|
if (!$username || !$password) {
|
|
$this->error(__('Invalid parameters'));
|
|
$this->error(__('Invalid parameters'));
|
|
}
|
|
}
|
|
- if ($email && !Validate::is($email, "email")) {
|
|
|
|
|
|
+ /* if ($email && !Validate::is($email, "email")) {
|
|
$this->error(__('Email is incorrect'));
|
|
$this->error(__('Email is incorrect'));
|
|
}
|
|
}
|
|
if ($mobile && !Validate::regex($mobile, "^1\d{10}$")) {
|
|
if ($mobile && !Validate::regex($mobile, "^1\d{10}$")) {
|
|
@@ -149,8 +148,22 @@ class User extends Api
|
|
$ret = Sms::check($mobile, $code, 'register');
|
|
$ret = Sms::check($mobile, $code, 'register');
|
|
if (!$ret) {
|
|
if (!$ret) {
|
|
$this->error(__('Captcha is incorrect'));
|
|
$this->error(__('Captcha is incorrect'));
|
|
|
|
+ }*/
|
|
|
|
+
|
|
|
|
+ //
|
|
|
|
+ $intro_uid = 0;
|
|
|
|
+ if(!empty($introcode)){
|
|
|
|
+ $intro_uid = Db::name('user')->where('introcode',$introcode)->value('id');
|
|
|
|
+ if(empty($intro_uid)){
|
|
|
|
+ $this->error('请填写正确的邀请码或者不填');
|
|
|
|
+ }
|
|
}
|
|
}
|
|
- $ret = $this->auth->register($username, $password, $email, $mobile, []);
|
|
|
|
|
|
+ // 用户信息不存在时使用
|
|
|
|
+ $extend = [
|
|
|
|
+ 'intro_uid' => $intro_uid,
|
|
|
|
+ ];
|
|
|
|
+
|
|
|
|
+ $ret = $this->auth->register($username, $password, '', '', $extend);
|
|
if ($ret) {
|
|
if ($ret) {
|
|
$data = ['userinfo' => $this->auth->getUserinfo()];
|
|
$data = ['userinfo' => $this->auth->getUserinfo()];
|
|
$this->success(__('Sign up successful'), $data);
|
|
$this->success(__('Sign up successful'), $data);
|
|
@@ -193,40 +206,6 @@ class User extends Api
|
|
$this->success();
|
|
$this->success();
|
|
}
|
|
}
|
|
|
|
|
|
- /**
|
|
|
|
- * 修改邮箱
|
|
|
|
- *
|
|
|
|
- * @ApiMethod (POST)
|
|
|
|
- * @param string $email 邮箱
|
|
|
|
- * @param string $captcha 验证码
|
|
|
|
- */
|
|
|
|
- public function changeemail()
|
|
|
|
- {
|
|
|
|
- $user = $this->auth->getUser();
|
|
|
|
- $email = $this->request->post('email');
|
|
|
|
- $captcha = $this->request->post('captcha');
|
|
|
|
- if (!$email || !$captcha) {
|
|
|
|
- $this->error(__('Invalid parameters'));
|
|
|
|
- }
|
|
|
|
- if (!Validate::is($email, "email")) {
|
|
|
|
- $this->error(__('Email is incorrect'));
|
|
|
|
- }
|
|
|
|
- if (\app\common\model\User::where('email', $email)->where('id', '<>', $user->id)->find()) {
|
|
|
|
- $this->error(__('Email already exists'));
|
|
|
|
- }
|
|
|
|
- $result = Ems::check($email, $captcha, 'changeemail');
|
|
|
|
- if (!$result) {
|
|
|
|
- $this->error(__('Captcha is incorrect'));
|
|
|
|
- }
|
|
|
|
- $verification = $user->verification;
|
|
|
|
- $verification->email = 1;
|
|
|
|
- $user->verification = $verification;
|
|
|
|
- $user->email = $email;
|
|
|
|
- $user->save();
|
|
|
|
-
|
|
|
|
- Ems::flush($email, 'changeemail');
|
|
|
|
- $this->success();
|
|
|
|
- }
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
* 修改手机号
|
|
* 修改手机号
|
|
@@ -263,37 +242,6 @@ class User extends Api
|
|
$this->success();
|
|
$this->success();
|
|
}
|
|
}
|
|
|
|
|
|
- /**
|
|
|
|
- * 第三方登录
|
|
|
|
- *
|
|
|
|
- * @ApiMethod (POST)
|
|
|
|
- * @param string $platform 平台名称
|
|
|
|
- * @param string $code Code码
|
|
|
|
- */
|
|
|
|
- public function third()
|
|
|
|
- {
|
|
|
|
- $url = url('user/index');
|
|
|
|
- $platform = $this->request->post("platform");
|
|
|
|
- $code = $this->request->post("code");
|
|
|
|
- $config = get_addon_config('third');
|
|
|
|
- if (!$config || !isset($config[$platform])) {
|
|
|
|
- $this->error(__('Invalid parameters'));
|
|
|
|
- }
|
|
|
|
- $app = new \addons\third\library\Application($config);
|
|
|
|
- //通过code换access_token和绑定会员
|
|
|
|
- $result = $app->{$platform}->getUserInfo(['code' => $code]);
|
|
|
|
- if ($result) {
|
|
|
|
- $loginret = \addons\third\library\Service::connect($platform, $result);
|
|
|
|
- if ($loginret) {
|
|
|
|
- $data = [
|
|
|
|
- 'userinfo' => $this->auth->getUserinfo(),
|
|
|
|
- 'thirdinfo' => $result
|
|
|
|
- ];
|
|
|
|
- $this->success(__('Logged in successful'), $data);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- $this->error(__('Operation failed'), $url);
|
|
|
|
- }
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
* 重置密码
|
|
* 重置密码
|
|
@@ -354,149 +302,4 @@ class User extends Api
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- /**
|
|
|
|
- * 获取用户openid
|
|
|
|
- */
|
|
|
|
- public function getUserOpenid() {
|
|
|
|
- // code值
|
|
|
|
- $code = $this->request->param('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);
|
|
|
|
- }
|
|
|
|
- // 获取的结果存入数据库
|
|
|
|
- $find = Db::name('user_sessionkey')->where(['openid'=>$openidInfo['openid']])->find();
|
|
|
|
- if($find) {
|
|
|
|
- $update = [];
|
|
|
|
- $update['sessionkey'] = $openidInfo['session_key'];
|
|
|
|
- $update['createtime'] = time();
|
|
|
|
- $res = Db::name('user_sessionkey')->where(['openid'=>$openidInfo['openid']])->update($update);
|
|
|
|
- } else {
|
|
|
|
- $insert = [];
|
|
|
|
- $insert['sessionkey'] = $openidInfo['session_key'];
|
|
|
|
- $insert['openid'] = $openidInfo['openid'];
|
|
|
|
- $insert['unionid'] = isset($openidInfo['unionid']) ? $openidInfo['unionid'] : '';
|
|
|
|
- $insert['createtime'] = time();
|
|
|
|
- $res = Db::name('user_sessionkey')->insertGetId($insert);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if($res !== false) {
|
|
|
|
- $this->success('获取成功',$openidInfo);
|
|
|
|
- } else {
|
|
|
|
- $this->error('获取失败');
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * 微信小程序登录
|
|
|
|
- */
|
|
|
|
- public function wxMiniProgramLogin() {
|
|
|
|
- $openid = $this->request->request('openid');// openid值
|
|
|
|
- $encryptedData = $this->request->request('encryptedData');// 加密数据
|
|
|
|
- $iv = $this->request->request('iv');// 加密算法
|
|
|
|
- $signature = $this->request->request('signature');// 签名验证
|
|
|
|
- $rawData = $this->request->request('rawData');// 签名验证
|
|
|
|
- $logintype = 2;// 登录方式:1=手机号,2=微信授权openid
|
|
|
|
-
|
|
|
|
- if (!$openid || !$encryptedData || !$iv) {
|
|
|
|
- $this->error(__('Invalid parameters'));
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // 获取openid和sessionkey
|
|
|
|
- $config = config('wxMiniProgram');
|
|
|
|
- $openidInfo = Db::name('user_sessionkey')->where(['openid'=>$openid])->find();
|
|
|
|
- $openid = $openidInfo['openid'];
|
|
|
|
- $session_key = $openidInfo['sessionkey'];
|
|
|
|
-
|
|
|
|
-// // 数据签名校验
|
|
|
|
-// $signature2 = sha1($rawData . $session_key);
|
|
|
|
-// if ($signature != $signature2) {
|
|
|
|
-// $this->error(__('数据签名验证失败'));
|
|
|
|
-// }
|
|
|
|
-
|
|
|
|
- // 根据加密数据和加密算法获取用户信息
|
|
|
|
- $pc = new WXBizDataCrypt($config['appid'], $session_key);
|
|
|
|
- $data = '';
|
|
|
|
- $errCode = $pc->decryptData(urldecode($encryptedData), $iv, $data);
|
|
|
|
- if ($errCode != 0) {
|
|
|
|
- $this->error('解密失败',['code'=>$errCode]);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- $data = json_decode($data,true);
|
|
|
|
- // 用户登录逻辑 === 开始
|
|
|
|
- if($logintype == 1) { // 手机号登录
|
|
|
|
- /*$userInfo = Db::name('user')->where(["mobile"=>$data["purePhoneNumber"]])->find();
|
|
|
|
- // 用户信息不存在时使用
|
|
|
|
- $extend = ["mobile"=>$data["purePhoneNumber"]];*/
|
|
|
|
- } else { // 微信授权openid登录
|
|
|
|
- $userInfo = Db::name('user')->where(['mini_openid'=>$openid])->find();
|
|
|
|
- // 用户信息不存在时使用
|
|
|
|
- $extend = [
|
|
|
|
- 'mini_openid' => $openid,
|
|
|
|
- 'nickname' => $data['nickName'],
|
|
|
|
- 'avatar' => $data['avatarUrl'],
|
|
|
|
- //'gender' => $data['gender']==1 ? 1 : 0,
|
|
|
|
- 'mini_sessionkey'=> $session_key,
|
|
|
|
- 'unionid' => $openidInfo['unionid'],
|
|
|
|
- //'mobile' => $data['purePhoneNumber'],
|
|
|
|
- ];
|
|
|
|
- }
|
|
|
|
- // 判断用户是否已经存在
|
|
|
|
- if($userInfo) { // 登录
|
|
|
|
- Db::name('user')->where('id',$userInfo['id'])->update(['logintime'=>time()]);
|
|
|
|
- $res = $this->auth->direct($userInfo['id']);
|
|
|
|
- } else { // 注册
|
|
|
|
- // 先随机一个用户名,随后再变更为u+数字id
|
|
|
|
- $username = '';
|
|
|
|
- $password = '';
|
|
|
|
-
|
|
|
|
- /*Db::startTrans();
|
|
|
|
- try {*/
|
|
|
|
- // 默认注册一个会员
|
|
|
|
- $result = $this->auth->register($username, $password, '','', $extend);
|
|
|
|
- if (!$result) {
|
|
|
|
- $this->error("注册失败!");
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /* Db::commit();
|
|
|
|
- } catch (PDOException $e) {
|
|
|
|
- Db::rollback();
|
|
|
|
- $this->auth->logout();
|
|
|
|
- return false;
|
|
|
|
- }*/
|
|
|
|
-
|
|
|
|
- // 写入登录Cookies和Token
|
|
|
|
- $res = $this->auth->direct($this->auth->id);
|
|
|
|
- }
|
|
|
|
- $userInfo = $this->userInfo('return');
|
|
|
|
- if($res) {
|
|
|
|
- $this->success("登录成功!",$userInfo);
|
|
|
|
- } else {
|
|
|
|
- $this->error("登录失败!");
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * 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);
|
|
|
|
- }
|
|
|
|
}
|
|
}
|