您现在的位置是:首页 > cms教程 > phpcms教程phpcms教程

phpcms实现微信登录的方法

安蕾2025-05-16phpcms教程已有人查阅

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

phpcms怎么实现微信登陆?phpcms实现微信登陆(无需注册,直接存入)
思路:回调参数,直接register (代码不够规范,自己整理)
在根目录新建wechat.php
访问:http:// .xxxxxx.cn/wechat.php
注意回调地址phpcms实现微信登陆(无需注册,直接存入)
wechat.php
<?php if(!empty( $_GET['code']) && !empty( $_GET['state'])){
$code = $_GET['code'];
$state = $_GET['state'];
$url = "http:// .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:// .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']) &amp;&amp; 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/oauth2/access_token?appid='.$appid.'&amp;secret='.$appsecret.'&amp;code='.$code.'&amp;grant_type=authorization_code';
$token = json_decode(file_get_contents($token_url));
if (isset($token->errcode)) {
showmessage(L('<br><h2>错误信息:</h2>'.$token->errmsg), HTTP_REFERER);
exit;
}
$access_token_url = 'https://api.weixin.qq.com/sns/oauth2/refresh_token?appid='.$appid.'&amp;grant_type=refresh_token&amp;refresh_token='.$token->refresh_token;
//转成对象
$access_token = json_decode(file_get_contents($access_token_url));
if (isset($access_token->errcode)) {
showmessage(L('<br><h2>错误信息:</h2>'.$access_token->errmsg), HTTP_REFERER);
exit;
}
$user_info_url = 'https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token->access_token.'&amp;openid='.$access_token->openid.'&amp;lang=zh_CN';
//转成对象
$user_info = json_decode(file_get_contents($user_info_url));
if (isset($user_info->errcode)) {
showmessage(L( '<br><h2>错误信息:</h2>'.$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']) &amp;&amp; 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 &amp;&amp; $rtime['times'] 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'] = 0 &amp;&amp; !in_array($r['groupid'], array('1', '7', '8')) &amp;&amp; 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']) &amp;&amp; !empty($_POST['forward']) ? urldecode($_POST['forward']) : 'index.php?m=member&amp;c=index';
$url = "http://www.ebingou.cn/set_cookie_ .php?nickname=".$_COOKIE['vuGYB__nickname']."&amp;username=".$_COOKIE['vuGYB__username']."&amp;userid=".$_COOKIE['vuGYB__userid']."&amp;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']) &amp;&amp; !empty($_POST['forward']) ? urldecode($_POST['forward']) : 'index.php?m=member&amp;c=index';
//https 与 http 传递用户名   跨域跳转cooike
$url = "http://www.ebingou.cn/set_cookie_ .php?nickname=".$_COOKIE['vuGYB__nickname']."&amp;username=".$_COOKIE['vuGYB__username']."&amp;userid=".$_COOKIE['vuGYB__userid']."&amp;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 函数

本文标签:

很赞哦! ()

相关源码

  • 帝国cms淘宝客京东联盟网站整站源码下载本模板基于帝国CMS内核深度开发,为淘宝客行业量身定制。随着腾讯微信与淘宝生态的互联互通,淘宝客链接现可在微信、QQ等平台直接分享,为推广带来更多便利。模板特别优化了店铺推广功能,有效避免商品下架导致的链接失效问题,同时支持京东联盟等多平台商品推广。查看源码
  • 自适应APP应用程序介绍推广落地页pbootcms网站源码下载移动应用开发商设计的营销型落地页模板,基于PbootCMS内核深度开发采用前沿响应式架构,无缝适配手机端操作习惯与PC端展示需求。查看源码
  • 响应式电脑维修办公用品维护pbootcms网站模板模板介绍(自适应手机版)响应式电脑修理公司pbootcms网站模板-蓝色HTML5电脑修理维修店网站源码下载PbootCMS内核开发的营销型网站模板,该模查看源码
  • (自适应)幽默笑话脑筋急转弯搞笑趣图博客pbootcms模板下载本模板基于PbootCMS系统开发,专为幽默笑话、搞笑趣图类网站设计。采用轻松活泼的布局风格,突出娱乐内容分享特色,适合各类笑话、段子、搞笑图片等内容展示。查看源码
  • 帝国CMS游戏应用APP推广下载站模板免费下载本模板为移动应用推广、手机游戏推广行业设计,集成H5游戏平台与APP下载功能,支持PC端与移动端自适应访问。专注于为应用开发商、游戏发行商提供专业的线上推广展示平台。查看源码
  • (PC+WAP)蓝色弹簧针厂家探针充电连接器设备网站源码下载基于PbootCMS开发的响应式模板,为弹簧针、探针连接器等电子元器件企业设计。模板采用工业蓝主色调,突出产品技术特性,支持多维度展示连接器产品的规格参数与应用场景,帮助制造企业建立专业线上展示平台。查看源码
分享笔记 (共有 篇笔记)
验证码:

本栏推荐