### [phpcms怎么实现微信登陆](https://www.prosaas.cn/article/432)
**Published:** 2023-03-09T01:33:08
**Author:** 5201314
**Excerpt:** phpcms实现微信登录的方法:1、在根目录新建“wechat.php”;2、在“\phpcms\module…
> phpcms实现微信登录的方法:1、在根目录新建“wechat.php”;2、在“\\phpcms\\modules\\member\\index.php”下增加“public function wechat() {...}”;3、在“foreground.class.php”文件中通过wechat函数判断用户是否登录即可。

本教程操作环境:Windows10系统、phpcms v9版,DELL G3电脑
**phpcms怎么实现微信登陆?**
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/oauth2/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/oauth2/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 函数

PHP中文网,大量的免费PHPCMS教程,欢迎在线学习!
以上就是phpcms怎么实现微信登陆的详细内容,更多请关注知企PROSAAS其它相关文章!
**Tags:** class, function, http, php, PHPCMS, public, register
**Categories:** PHPCMS
---