网站建设资讯

NEWS

网站建设资讯

phpcms如何实现微信登陆

本篇内容介绍了“phpcms如何实现微信登陆”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

创新互联公司专注于青云谱企业网站建设,响应式网站建设,成都商城网站开发。青云谱网站建设公司,为青云谱等地区提供建站服务。全流程按需设计,专业设计,全程项目跟踪,创新互联公司专业和态度为您提供的服务

phpcms实现微信登录的方法:1、在根目录新建“wechat.php”;2、在“\phpcms\modules\member\index.php”下增加“public function wechat() {...}”;3、在“foreground.class.php”文件中通过wechat函数判断用户是否登录即可。

phpcms实现微信登陆(无需注册,直接存入)

思路:回调参数,直接register (代码不够规范,自己整理)

在根目录新建wechat.php

访问: http://www.xxxxxx.cn/wechat.php

注意回调地址

phpcms实现微信登陆(无需注册,直接存入)

wechat.php

\phpcms\modules\member\index.php下增加

注:注册状态输出 $status, 可以返回错误信息 根据错误信息修改参数内容

用户名称和密码做了简单区别处理,根据实际情况修改,邮箱为必须字段,随便放了一个。

_session_start();
        //获取用户siteid
        $siteid = isset($_REQUEST['siteid']) && trim($_REQUEST['siteid']) ? intval($_REQUEST['siteid']) : 1;
        //定义站点id常量
        if (!defined('SITEID')) {
           define('SITEID', $siteid);
        }
        //加载用户模块配置
        //加载用户模块配置
        $member_setting = getcache('member_setting');
        if(!$member_setting['allowregister']) {
            showmessage(L('deny_register'), '/login.html');
        }
        /*----------------------微信获取用户信息------------------------*/
        //换成自己的接口信息
        $code = $_GET['code'];
        $state = $_GET['state'];
        $appid = 'xxxxxxxx';
        $appsecret = 'xxxxxxxx';
        if (empty($code)) $this->error('授权失败');
        $token_url = 'https://api.weixin.qq.com/sns/oauth3/access_token?appid='.$appid.'&secret='.$appsecret.'&code='.$code.'&grant_type=authorization_code';
        $token = json_decode(file_get_contents($token_url));
        if (isset($token->errcode)) {
            showmessage(L('

错误信息:

'.$token->errmsg), HTTP_REFERER);             exit;         }         $access_token_url = 'https://api.weixin.qq.com/sns/oauth3/refresh_token?appid='.$appid.'&grant_type=refresh_token&refresh_token='.$token->refresh_token;         //转成对象         $access_token = json_decode(file_get_contents($access_token_url));         if (isset($access_token->errcode)) {             showmessage(L('

错误信息:

'.$access_token->errmsg), HTTP_REFERER);             exit;         }         $user_info_url = 'https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token->access_token.'&openid='.$access_token->openid.'&lang=zh_CN';         //转成对象         $user_info = json_decode(file_get_contents($user_info_url));         if (isset($user_info->errcode)) {             showmessage(L( '

错误信息:

'.$user_info->errmsg), HTTP_REFERER);             exit;         }         $rs =  json_decode(json_encode($user_info),true);//转换成数组         /*------------------------获取用户信息代码结束-----------------------*/         header("Cache-control: private");         $checkname = trim($rs['nickname'])."_".substr(md5($rs['unionid']),0,5) ;         $this->_init_phpsso();         $cstatus = $this->client->ps_checkname($checkname);         //如果存在用户 用户登陆            if($cstatus == -4 || $cstatus == -1) {             $username = $rs['nickname']."_".substr(md5($rs['unionid']),0,5) ;             $password = substr(md5($rs['unionid']),0,10);             //is_password($_POST['password']) && is_badword($_POST['password'])==false ? trim($_POST['password']) : showmessage(L('password_format_incorrect'), HTTP_REFERER);             $cookietime = intval($_POST['cookietime']);             $synloginstr = ''; //同步登陆js代码             if(pc_base::load_config('system', 'phpsso')) {                 $this->_init_phpsso();                 $status = $this->client->ps_member_login($username, $password);                 $memberinfo = unserialize($status);                 if(isset($memberinfo['uid'])) {                     //查询帐号                     $r = $this->db->get_one(array('phpssouid'=>$memberinfo['uid']));                     if(!$r) {                         //插入会员详细信息,会员不存在 插入会员                         $info = array(                                     'phpssouid'=>$memberinfo['uid'],                                     'username'=>$memberinfo['username'],                                     'password'=>$memberinfo['password'],                                     'encrypt'=>$memberinfo['random'],                                     'email'=>$memberinfo['email'],                                     'regip'=>$memberinfo['regip'],                                     'regdate'=>$memberinfo['regdate'],                                     'lastip'=>$memberinfo['lastip'],                                     'lastdate'=>$memberinfo['lastdate'],                                     'groupid'=>$this->_get_usergroup_bypoint(),    //会员默认组                                     'modelid'=>10,  //普通会员                                     );                         //如果是connect用户                         if(!empty($_SESSION['connectid'])) {                             $userinfo['connectid'] = $_SESSION['connectid'];                         }                         if(!empty($_SESSION['from'])) {                             $userinfo['from'] = $_SESSION['from'];                         }                         unset($_SESSION['connectid'], $_SESSION['from']);                         $this->db->insert($info);                         unset($info);                         $r = $this->db->get_one(array('phpssouid'=>$memberinfo['uid']));                     }                     $password = $r['password'];                     $synloginstr = $this->client->ps_member_synlogin($r['phpssouid']);                 } else {                     if($status == -1) {    //用户不存在                         showmessage(L('user_not_exist'), '/login.html');                     } elseif($status == -2) { //密码错误                         showmessage(L('password_error'), '/login.html');                     } else {                         showmessage(L('login_failure'), '/login.html');                     }                 }             } else {                 //密码错误剩余重试次数                 $this->times_db = pc_base::load_model('times_model');                 $rtime = $this->times_db->get_one(array('username'=>$username));                 if($rtime['times'] > 4) {                     $minute = 60 - floor((SYS_TIME - $rtime['logintime']) / 60);                     showmessage(L('wait_1_hour', array('minute'=>$minute)));                 }                 //查询帐号                 $r = $this->db->get_one(array('username'=>$username));                 if(!$r) showmessage(L('user_not_exist'),'/login.html');                 //验证用户密码                 $password = md5(md5(trim($password)).$r['encrypt']);                 if($r['password'] != $password) {                                     $ip = ip();                     if($rtime && $rtime['times'] < 5) {                         $times = 5 - intval($rtime['times']);                         $this->times_db->update(array('ip'=>$ip, 'times'=>'+=1'), array('username'=>$username));                     } else {                         $this->times_db->insert(array('username'=>$username, 'ip'=>$ip, 'logintime'=>SYS_TIME, 'times'=>1));                         $times = 5;                     }                     showmessage(L('password_error', array('times'=>$times)), '/login.html', 3000);                 }                 $this->times_db->delete(array('username'=>$username));             }             //如果用户被锁定             if($r['islock']) {                 showmessage(L('user_is_lock'));             }             $userid = $r['userid'];             $groupid = $r['groupid'];             $username = $r['username'];             $nickname = empty($r['nickname']) ? $username : $r['nickname'];             $updatearr = array('lastip'=>ip(), 'lastdate'=>SYS_TIME);             //vip过期,更新vip和会员组             if($r['overduedate'] < SYS_TIME) {                 $updatearr['vip'] = 0;             }                    //检查用户积分,更新新用户组,除去邮箱认证、禁止访问、游客组用户、vip用户,如果该用户组不允许自助升级则不进行该操作                     if($r['point'] >= 0 && !in_array($r['groupid'], array('1', '7', '8')) && empty($r[vip])) {                 $grouplist = getcache('grouplist');                 if(!empty($grouplist[$r['groupid']]['allowupgrade'])) {                        $check_groupid = $this->_get_usergroup_bypoint($r['point']);                     if($check_groupid != $r['groupid']) {                         $updatearr['groupid'] = $groupid = $check_groupid;                     }                 }             }             //如果是connect用户             if(!empty($_SESSION['connectid'])) {                 $updatearr['connectid'] = $_SESSION['connectid'];             }             if(!empty($_SESSION['from'])) {                 $updatearr['from'] = $_SESSION['from'];             }             unset($_SESSION['connectid'], $_SESSION['from']);             $this->db->update($updatearr, array('userid'=>$userid));             if(!isset($cookietime)) {                 $get_cookietime = param::get_cookie('cookietime');             }             $_cookietime = $cookietime ? intval($cookietime) : ($get_cookietime ? $get_cookietime : 0);             $cookietime = $_cookietime ? SYS_TIME + $_cookietime : 0;             $phpcms_auth = sys_auth($userid."\t".$password, 'ENCODE', get_auth_key('login'));             param::set_cookie('auth', $phpcms_auth, $cookietime);             param::set_cookie('_userid', $userid, $cookietime);             param::set_cookie('_username', $username, $cookietime);             param::set_cookie('_groupid', $groupid, $cookietime);             param::set_cookie('_nickname', $nickname, $cookietime);             //print_r($_COOKIE);             //exit;             //param::set_cookie('cookietime', $_cookietime, $cookietime);              //https 与 http 传递用户名   跨域跳转cooike             $forward = isset($_POST['forward']) && !empty($_POST['forward']) ? urldecode($_POST['forward']) : 'index.php?m=member&c=index';             $url = "http://www.zhiliaoke.com.cn/set_cookie_www.php?nickname=".$_COOKIE['vuGYB__nickname']."&username=".$_COOKIE['vuGYB__username']."&userid=".$_COOKIE['vuGYB__userid']."&groupid=".$_COOKIE['vuGYB__groupid'];             header("Location: ".$url."");          }          //如果不存在用户注册             $userinfo = array();             $userinfo['encrypt'] = create_randomstr(6);             $userinfo['username'] = $rs['nickname']."_".substr(md5($rs['unionid']),0,5) ;             $userinfo['nickname'] = $rs['nickname']."_".substr(md5($rs['unionid']),0,5) ;             $userinfo['email'] = time().'@yangpeili.com';             $userinfo['password'] = substr(md5($rs['unionid']),0,10);             $userinfo['modelid'] = isset($_POST['modelid']) ? intval($_POST['modelid']) : 10;             $userinfo['regip'] = ip();             $userinfo['point'] = $member_setting['defualtpoint'] ? $member_setting['defualtpoint'] : 0;             $userinfo['amount'] = $member_setting['defualtamount'] ? $member_setting['defualtamount'] : 0;             $userinfo['regdate'] = $userinfo['lastdate'] = SYS_TIME;             $userinfo['siteid'] = $siteid;             $userinfo['connectid'] = isset($_SESSION['connectid']) ? $_SESSION['connectid'] : '';             $userinfo['from'] = isset($_SESSION['from']) ? $_SESSION['from'] : '';             //手机强制验证             //附表信息验证 通过模型获取会员信息             if($member_setting['choosemodel']) {                 require_once CACHE_MODEL_PATH.'member_input.class.php';                 require_once CACHE_MODEL_PATH.'member_update.class.php';                 $member_input = new member_input($userinfo['modelid']);                      $_POST['info'] = array_map('new_html_special_chars',$_POST['info']);                 $user_model_info = $member_input->get($_POST['info']);                                                    }             if(pc_base::load_config('system', 'phpsso')) {                 $this->_init_phpsso();                 $status = $this->client->ps_member_register($userinfo['username'], $userinfo['password'], $userinfo['email'], $userinfo['regip'], $userinfo['encrypt']);                 echo $status;                 if($status > 0) {                     $userinfo['phpssouid'] = $status;                     //传入phpsso为明文密码,加密后存入phpcms_v9                     $password = $userinfo['password'];                     $userinfo['password'] = password($userinfo['password'], $userinfo['encrypt']);                      $userid = $this->db->insert($userinfo, 1);                     if($member_setting['choosemodel']) {   //如果开启选择模型                         $user_model_info['userid'] = $userid;                         //插入会员模型数据                         $this->db->set_model($userinfo['modelid']);                         $this->db->insert($user_model_info);                     }                     if($userid > 0) {                         //执行登陆操作                         if(!$cookietime) $get_cookietime = param::get_cookie('cookietime');                         $_cookietime = $cookietime ? intval($cookietime) : ($get_cookietime ? $get_cookietime : 0);                         $cookietime = $_cookietime ? TIME + $_cookietime : 0;                         if($userinfo['groupid'] == 7) {                             param::set_cookie('_username', $userinfo['username'], $cookietime);                             param::set_cookie('email', $userinfo['email'], $cookietime);                                                    } else {                             $phpcms_auth = sys_auth($userid."\t".$userinfo['password'], 'ENCODE', get_auth_key('login'));                             //$this->db->update(array('groupid'=> "6"), array('userid'=>$userid));                             $sql = "UPDATE `v9_member` SET `groupid`='6' WHERE `userid` = $userid ";//修改用户级别为注册用户                             MySQL_query($sql);                             param::set_cookie('auth', $phpcms_auth, $cookietime);                             param::set_cookie('_userid', $userid, $cookietime);                             param::set_cookie('_username', $userinfo['username'], $cookietime);                             param::set_cookie('_nickname', $userinfo['nickname'], $cookietime);                             param::set_cookie('_groupid', $userinfo['groupid'], $cookietime);                             param::set_cookie('cookietime', $_cookietime, $cookietime);                             $forward = isset($_POST['forward']) && !empty($_POST['forward']) ? urldecode($_POST['forward']) : 'index.php?m=member&c=index';                             //https 与 http 传递用户名   跨域跳转cooike                             $url = "http://www.zhiliaoke.com.cn/set_cookie_www.php?nickname=".$_COOKIE['vuGYB__nickname']."&username=".$_COOKIE['vuGYB__username']."&userid=".$_COOKIE['vuGYB__userid']."&groupid=".$_COOKIE['vuGYB__groupid'];                             header("Location: ".$url."");                          }                     }                 }             } else {                 showmessage(L('enable_register').L('enable_phpsso'), '/login.html');             }             showmessage(L('operation_failure'), HTTP_REFERER);         } ?>

补充最后一步

很重要,也是最简单容易忽视的 !!!

有几个人都卡在这里了!

需要 在phpcms\modules\member\classes\foreground.class.php 文件 21行左右 判断用户是否登陆通过wechat 函数

phpcms如何实现微信登陆

“phpcms如何实现微信登陆”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!


网站栏目:phpcms如何实现微信登陆
转载源于:http://cdweb.net/article/ipseih.html