日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

快捷登录PHP,phpcms 微信快捷登陆

發布時間:2025/3/15 php 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 快捷登录PHP,phpcms 微信快捷登陆 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上一篇文章,給大家分享了關于微信授權登陸功能,今天給大家分享一個微信快捷登陸的實際用例。

phpcms接入微信快捷登陸

第一步,在login方法中,判定是否使用微信瀏覽器訪問,如果是,發起授權申請

if ( strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false ) {

$jump_url = urlencode("http://www.phpcms.com/wechat.php");

$url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=XXXXXXXXXXXXX&redirect_uri={$jump_url}&response_type=code&scope=snsapi_userinfo&state=login#wechat_redirect";

header('location:'.$url);

}

第二步,新建一個回調文件,該文件的作用是,喚醒微信授權,當用戶允許授權后,微信會請求到該地址,同時,微信會返回給我們重要的參數:code=CODE&state=STATE。

回調文件的程序:

if(!empty( $_GET['code']) && !empty( $_GET['state'])){

$code = $_GET['code'];

$state = $_GET['state'];

$username = $_GET['username'];

$url = "http://www.phpcms.com/index.php?m=member&c=index&a=wechat&code=$code&state=$state&username=$username";

header('location:'.$url);//用戶同意授權后,跳轉到這個地址,這個地址中,會通過code獲取access_token

exit;

}

$appid = 'XXXXXXXXXXXXXXXXX';

$jump_url = urlencode("http://www.phpcms.com/wechat.php");

$url = "https://open.weixin.qq.com/connect/qrconnect?appid=$appid&redirect_uri={$jump_url}&response_type=code&scope=snsapi_userinfo&state=login#wechat_redirect";

header('location:'.$url); ?>

第二步:通過code,請求以下鏈接獲取access_token:? https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code,獲取access_token,通過 access_token 獲取用戶信息

public function wechat() {//該方法參照了 login 方法

$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'];

$username = $_GET['username'];

$appid = 'XXXXXXXXXXXXXXXXX';

$appsecret = 'XXXXXXXXXXXXXXXX';

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));//獲取access_token

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;

}

$openid = $user_info->openid;

if($state=='bangding'){

$memberinfo = $this->db->get_one(array('username'=>$username));//echo $username;print_r($memberinfo);die;

if(empty($memberinfo)){

showmessage('用戶名不存在', HTTP_REFERER);//'index.php?m=member&c=index&a=login'

//header("location:/index.php?m=member&c=index&from=mobile");

}//print_r($updatearr);die;

$updatearr['openid'] = $openid;

$this->db->update($updatearr, array('userid'=>$memberinfo['userid']));

header("location:index.php?m=member&c=index&a=login");

}

$memberinfo = $this->db->get_one(array('openid'=>$openid));

if(empty($memberinfo)){//沒有綁定,跳轉到綁定頁面

header("Location:index.php?m=member&c=index&a=bangding");

}

$memberinfo['uid'] = $memberinfo['phpssouid'];

if(pc_base::load_config('system', 'phpsso')) {

$this->_init_phpsso();

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'), HTTP_REFERER);//'index.php?m=member&c=index&a=login'

} elseif($status == -2) { //密碼錯誤

showmessage(L('password_error'), HTTP_REFERER);//'index.php?m=member&c=index&a=login'

} else {

showmessage(L('login_failure'), HTTP_REFERER);//'index.php?m=member&c=index&a=login'

}

}

}

$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);

param::set_cookie('cookietime', $_cookietime, $cookietime);

header("location:/index.php?m=member&c=index&from=mobile");

}

function bangding(){

if(isset($_POST['dosubmit'])) {

$username = $_POST['username'];

$jump_url = urlencode("http://steam.phpzheng.com/wechat.php?username={$username}");//注意這個username參數

//再次授權

$url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx4b199c68b1f2dac1&redirect_uri={$jump_url}&response_type=code&scope=snsapi_userinfo&state=bangding#wechat_redirect";

//echo $url;die;

header('location:'.$url);

}

$this->display();

}

注意:修改 /phpcms/modules/member/classes/foreground.class.php 第20行附近

if(ROUTE_M =='member' && ROUTE_C =='index' && in_array(ROUTE_A, array('wechat','banding','login', 'register', 'mini','send_newmail')))

另外,對于新用戶首次登陸,我們需要引導用戶進行綁定,用戶授權后,我們根據用戶的 openid,查詢該 openid 是否存在于數據庫中:

如果存在,我們則取出用戶在我們數據庫中用戶表的信息;

如果不存在,我們則跳轉到綁定頁面,用戶輸入用戶名進行綁定,綁定提交后,如果用戶名存在,則再次自動跳轉到登陸頁面(登陸頁面會再次查詢當前 openid 是否存在數據庫中,因為剛才完成了綁定,所以現在可以取出綁定的用戶名的用戶信息)。

總結

以上是生活随笔為你收集整理的快捷登录PHP,phpcms 微信快捷登陆的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。