广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >phpcms如何实现微信登陆
  • 909
分享到

phpcms如何实现微信登陆

phpcms 2023-03-09 17:03:16 909人浏览 八月长安
摘要

本篇内容介绍了“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

<?php
if(!empty( $_GET['code']) && !empty( $_GET['state'])){
    $code = $_GET['code'];
    $state = $_GET['state'];
    $url = "http://www.xxxxxx.cn/index.php?m=member&c=index&a=wechat&code=$code&state=$state";
    header('location:'.$url);
    exit;
}
$appid = 'wx5a3878682fa32bd5';
$url = "https://open.weixin.qq.com/connect/qrconnect?appid=$appid&redirect_uri=http://www.xxxxxx.cn/wechat.php&response_type=code&scope=snsapi_login&state=1&connect_redirect=1#wechat_redirect";
header('location:'.$url);
?>

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

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

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

<?php
public function wechat() {
        $this->_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('<br/><h3>错误信息:</h3>'.$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('<br/><h3>错误信息:</h3>'.$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( '<br/><h3>错误信息:</h3>'.$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如何实现微信登陆”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: phpcms如何实现微信登陆

本文链接: https://www.lsjlt.com/news/199084.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • phpcms如何实现微信登陆
    本篇内容介绍了“phpcms如何实现微信登陆”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2023-03-09
    phpcms
  • 小程序微信登陆实现流程
    1. 微信登录流程 微信登录官方介绍:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.htm...
    99+
    2023-09-05
    小程序 微信 java 微信小程序登录
  • Java怎么实现微信授权登陆
    Java怎么实现微信授权登陆?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。通过微信接口获取code微信获取code接口: https://open.weixin...
    99+
    2023-06-15
  • Java微信授权登陆的实现示例
    前提: 微信公众平台:注册微信认证的公众号也就是服务号 ,拥有跟高级权限的微信接口。(注册服务号需要一些企业信息,需自己或者公司解决) 注: 2018年12月起 订阅号不能认证升级为...
    99+
    2022-11-12
  • phpcms V9实现qq登陆oauth2.0的方法
    phpcmsV9使用的QQ登陆依然是OAuth1.0,但现在腾讯已经不审核使用OAuth1.0的网站了。这对于使用pc的站长来讲是一个无比巨大的坑。经过对phpcms论坛的一位同学做的插件进行修改,现在完美实现QQ登陆,...
    99+
    2022-06-12
    phpcms qq登陆 oauth2.0
  • 微信小程序如何实现登陆注册滑块验证
    这篇文章主要介绍“微信小程序如何实现登陆注册滑块验证”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“微信小程序如何实现登陆注册滑块验证”文章能帮助大家解决问题。具体效果如下一、创建自定义组件MoveV...
    99+
    2023-06-30
  • phpcms V9实现QQ登陆OAuth2.0提供下载
    实现步骤: ①打开\phpcms\modules\member\index.php文件,把下面的代码找个地方塞进去(可以直接在pc默认的QQ登陆下面)。 复制代码代码如下://QQ登陆oAuth2.0 ublic fun...
    99+
    2022-06-12
    phpcms V9 QQ登陆
  • 微信小程序如何自动登陆PHP
    这篇文章将为大家详细讲解有关微信小程序如何自动登陆PHP,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。微信小程序 自动登陆PHP源码实例app.js  ...
    99+
    2022-10-19
  • 微信小程序实现登陆注册滑块验证
    目录一、创建自定义组件MoveVerify二、在index页面使用本文实例为大家分享了微信小程序实现登陆注册滑块验证的具体代码,供大家参考,具体内容如下 一、创建自定义组件Mov...
    99+
    2022-11-13
  • uniapp如何实现微信登录
    实现微信登录可以使用 uni.login() 方法,首先需要在微信开放平台注册小程序并获取 appid。 然后在 uni-app 项目中使用 uni.login() 方法获取 code,再通过 code 换取 openid 和 sessio...
    99+
    2023-08-16
    微信 uni-app 小程序
  • java微信扫描公众号二维码实现登陆功能
    本文实例为大家分享了java微信扫描公众号二维码实现登陆的具体代码,供大家参考,具体内容如下前提条件: 微信公众平台为服务号, 2.服务号实现了账号绑定功能,即将open_id 与业务系统中的用户名有对应关系具体实现原理: 用户访问业务系统...
    99+
    2023-05-31
    java 二维码
  • 微信小程序如何开发用户授权登陆
    这篇文章主要介绍了微信小程序如何开发用户授权登陆,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。准备:微信开发者工具下载地址:https://...
    99+
    2022-10-19
  • 微信小程序如何实现登录
    这篇文章主要为大家展示了“微信小程序如何实现登录”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“微信小程序如何实现登录”这篇文章吧。微信小程序 实现登录最近一段时...
    99+
    2022-10-19
  • 扫微信小程序码实现网站登陆的示例分析
    这篇文章主要介绍扫微信小程序码实现网站登陆的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!使用扫小程序码登陆网站思路核心流程关键流程建立场景sceneid和websocket...
    99+
    2022-10-19
  • php怎么实现微信登录
    本文操作环境:windows10系统、php 7、thinkpad t480电脑。使用php实现微信登录其实并不难,可以简单地分为三步进行,如下所示:第一步:用户同意授权,获取code//微信登录 public function wxlo...
    99+
    2019-09-04
    php 微信
  • Android 实现微信登录详解
    前言  分享到微信朋友圈的功能早已经有了,但微信登录推出并不久,文档写的也并不是很清楚,这里记录分享一下。  正文  一、准备  &nb...
    99+
    2022-06-06
    Android
  • Java实现微信扫码登录
    微信扫码登录 1. 授权流程说明第一步:请求 code第二步:通过 code 获取 access_token第三步:通过 access_token 调用接口 2. 授权流程代码3...
    99+
    2023-09-01
    微信 java
  • 微信小程序如何实现登录页面
    这篇文章主要讲解了“微信小程序如何实现登录页面”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“微信小程序如何实现登录页面”吧!1. 在首页中加入一个弹窗作为登录窗口,效果如下图:(1)inde...
    99+
    2023-06-30
  • 微信小程序如何实现登录界面
    这篇文章主要介绍“微信小程序如何实现登录界面”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“微信小程序如何实现登录界面”文章能帮助大家解决问题。注:这里使用的是原生微信小程序使用wxss和wxmlin...
    99+
    2023-06-30
  • 微信小程序如何实现授权登录
    这篇文章给大家分享的是有关微信小程序如何实现授权登录的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、前言由于微信官方修改了 getUserInfo 接口,所以现在无法实现一进入...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作