| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268 |
- <?php
- /**
- * @copyright Copyright (c) 2017 https://www.sapixx.com All rights reserved.
- * @license Licensed (http://www.apache.org/licenses/LICENSE-2.0).
- * @author pillar<ltmn@qq.com>
- * 会员管理中心
- */
- namespace app\system\controller\passport;
- use app\common\facade\Alisms;
- use app\common\event\Passport;
- use app\common\model\SystemApis;
- use app\common\model\SystemMember;
- use app\common\model\SystemMemberMiniapp;
- use app\common\model\SystemMemberCloud;
- use Yurun\Util\HttpRequest;
- class Login extends Common{
-
- /**
- * 会员首页
- */
- public function index(){
- if(request()->isPost()){
- $data = [
- '__token__' => $this->request->param('__token__/s'),
- 'captcha' => $this->request->param('captcha/s'),
- 'login_id' => $this->request->param('login_id/s'),
- 'login_password' => $this->request->param('login_password/s'),
- ];
- $validate = $this->validate($data,'Member.login');
- if(true !== $validate){
- return json(['code'=>0,'message'=>$validate]);
- }
- $result = SystemMember::login($data);
- if($result){
- Passport::clearMiniapp();
- Passport::setlogout();
- //判断是不是子管理员
- $condition['is_lock'] = 0;
- if($result->bind_member_miniapp_id && $result->parent_id){
- $condition['id'] = $result->bind_member_miniapp_id;
- $condition['member_id'] = $result->parent_id;
- }else{
- $condition['member_id'] = $result->id;
- }
- $miniapp = SystemMemberMiniapp::where($condition)->order('id desc')->find();
- if(!empty($miniapp)){
- $param = [
- 'member_id' => $result->parent_id,
- 'miniapp_id' => $miniapp->miniapp_id,
- 'member_miniapp_id' => $miniapp->id,
- ];
- Passport::setMiniapp($param);
- }
- Passport::setLogin($result);
- return json(['code'=>200,'message'=>'登录成功','url' => url('system/passport.Index/index')]);
- }else{
- return json(['code'=>0,'message'=>'密码错误或账户已被锁定']);
- }
- }else{
- $wechataccount = SystemApis::Config('wechataccount');
- $view['wechataccount'] = empty($wechataccount) || $wechataccount['qrcode_login'] == 0 ? 0 : 1;
- return view('passport/login/index')->assign($view);
- }
- }
- /**
- * 腾讯云市场登录
- * @return void
- */
- public function cloud(){
- $code = $this->request->param('code');
- $signature = $this->request->param('signature');
- $config = SystemApis::config('wechatcloud');
- if(empty($config) || empty($this->web)){
- return $this->error('腾讯云授权配置错误,请联系客服.');
- }
- if(md5($code.$config['encry_key']) != $signature){
- return redirect('https://www.qcloud.com/open/authorize?scope=login&app_id='.$config['app_id'].'&redirect_url=https://'.$this->web->url.'/system/passport/cloud.html');
- }
- $http = new HttpRequest;
- $strsign = [
- 'SecretId' => $config['secret_id'],
- 'Action' => 'GetUserAccessToken',
- 'SignatureMethod' => 'HmacSHA1',
- 'Nonce' => getcode(5),
- 'Timestamp' => time(),
- 'userAuthCode' => $code,
- 'Region' =>'ap-beijing'
- ];
- ksort($strsign);
- $str = [];
- foreach ($strsign as $key=>$value) {
- if (isset($value) && !empty($value)) {
- $str[] = $key."=".trim($value);
- }
- }
- $paramstring = "GETopen.api.qcloud.com/v2/index.php?".join("&", $str);
- $signStr = base64_encode(hash_hmac('sha1', $paramstring, $config['secret_key'], true));
- $strsign['Signature'] = $signStr;
- $response = $http->get('https://open.api.qcloud.com/v2/index.php',$strsign);
- $json = json_decode($response->body());
- if($json->code != 0){
- return redirect('https://www.qcloud.com/open/authorize?scope=login&app_id='.$config['app_id'].'&redirect_url=https://'.$this->web->url.'/system/passport/cloud.html');
- }
- Passport::clearMiniapp();
- Passport::setlogout();
- $userinfo = [];
- $userCloud = SystemMemberCloud::where(['openId' => $json->data->userOpenId])->find();
- if(!empty($userCloud)){
- $userinfo = SystemMember::where(['id' => $userCloud->member_id])->find();
- }
- if(empty($userCloud) && empty($userinfo)){
- $data['username'] = '腾讯云'.getcode(5);
- $data['password'] = password_hash(md5($json->data->userOpenId),PASSWORD_DEFAULT);
- $data['safe_password'] = password_hash(md5('123456'),PASSWORD_DEFAULT);
- $data['login_time'] = time();
- $data['login_ip'] = request()->ip();
- $data['update_time'] = time();
- $data['create_time'] = time();
- $userinfo = SystemMember::create($data);
- if($userinfo){
- SystemMemberCloud::create(['member_id'=>$userinfo->id,'openId'=>$json->data->userOpenId,'unionId'=>$json->data->userUnionId,'create_time'=> time()]);
- }
- }else{
- $condition['is_lock'] = 0;
- $condition['member_id'] = $userinfo->id;
- $miniapp = SystemMemberMiniapp::where($condition)->order('id desc')->find();
- if(!empty($miniapp)){
- $param = [
- 'member_id' => $userinfo->parent_id,
- 'miniapp_id' => $miniapp->miniapp_id,
- 'member_miniapp_id' => $miniapp->id,
- ];
- Passport::setMiniapp($param);
- }
- }
- Passport::setLogin($userinfo);
- return redirect(url('system/passport.Index/index'));
- }
- /**
- * 会员注册
- */
- public function reg(){
- if(request()->isPost()){
- $data = [
- 'captcha' => $this->request->param('captcha/s'),
- 'phone_id' => $this->request->param('phone_id/s'),
- 'login_password' => $this->request->param('login_password/s'),
- 'sms_code' => $this->request->param('sms_code/s'),
- 'username' => $this->request->param('username/s'),
- ];
- $validate = $this->validate($data,'Member.reg');
- if(true !== $validate){
- return json(['code'=>0,'message'=>$validate]);
- }
- $result = SystemMember::reg($data);
- if($result['code'] == 200){
- $userinfo = SystemMember::where(['id' => $result['data']['id']])->find();
- Passport::clearMiniapp();
- Passport::setlogout();
- Passport::setLogin($userinfo);
- return json(['code'=>200,'message'=>'注册成功','url' => url('system/passport.Index/index')]);
- }else{
- return json($result);
- }
- }else{
- return view('passport/login/reg');
- }
- }
- /**
- * 忘记密码
- */
- public function getPassword(){
- if(request()->isPost()){
- $data = [
- 'captcha' => $this->request->param('captcha/s'),
- 'phone_id' => $this->request->param('phone_id/s'),
- 'login_password' => $this->request->param('login_password/s'),
- 'sms_code' => $this->request->param('sms_code/s'),
- ];
- $validate = $this->validate($data,'Member.getpasspord');
- if(true !== $validate){
- return json(['code'=>0,'message'=>$validate]);
- }
- //判断验证码
- if(!Alisms::isSms($data['phone_id'],$data['sms_code'])){
- return json(['code'=>0,'message'=>"验证码错误"]);
- }
- //验证码通过
- $result = SystemMember::getPasspord($data);
- if($result){
- Passport::clearMiniapp();
- Passport::setlogout();
- return json(['code'=>200,'message'=>'密码重置成功','url' => url('system/passport.Login/index')]);
- }else{
- return json(['code'=>0,'message'=>'密码重置失败']);
- }
- }else{
- return view('passport/login/getpassword');
- }
- }
- /**
- * 会员退出
- */
- public function logout(){
- Passport::setlogout();
- Passport::clearMiniapp();
- $this->redirect('system/passport.Login/index');
- }
- /**
- * 获取注册验证码
- */
- public function getRegSms(){
- if(request()->isPost()){
- $data = [
- 'phone_id' => $this->request->param('phone/s')
- ];
- $validate = $this->validate($data,'Sms.getsms');
- if(true !== $validate){
- return json(['code'=>0,'message'=>$validate]);
- }
- $user = SystemMember::where(['phone_id' => $data['phone_id']])->find();
- if(isset($user)) {
- return json(['code'=>0,'message' => "手机已被注册"]);
- }
- $sms = Alisms::putSms($data['phone_id']);
- return json($sms);
- }else{
- return $this->error("404 NOT FOUND");
- }
- }
- /**
- * 获取登录/找回密码等验证码
- */
- public function getLoginSms(){
- if(request()->isPost()){
- $data = [
- 'phone_id' => $this->request->param('phone/s')
- ];
- $validate = $this->validate($data,'Sms.getsms');
- if(true !== $validate){
- return json(['code'=>0,'message'=>$validate]);
- }
- //判断是否登录
- $getuser = Passport::getUser();
- if($getuser){
- if($data['phone_id'] != $getuser['phone_id']){
- return json(['code'=>0,'message'=>"请确认手机号输入正确"]);
- }
- }
- $user = SystemMember::where(['phone_id' => $data['phone_id']])->find();
- if(empty($user)) {
- return json(['code'=>0,'message'=>"用户不存在"]);
- }
- $sms = Alisms::putSms($data['phone_id']);
- return json($sms);
- }else{
- return $this->error("404 NOT FOUND");
- }
- }
- }
|