微信扫码网站自动登录的实现方法
微信扫码网站自动登录的原是还是比较简单的,只要各位知道相互的原理就可以实现了,下面我们来看两个例子,我相信各位看了这两个例子肯定知道怎么来做了。
magento 微信扫码网站自动登录
案例仿照了微信联合登陆的做法,微信联合登陆介绍:
https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&lang=zh_CN
查看授权后接口调用(UnionID),不难发现填写回调地址,用户确认登陆pc端即可跳转
获取UnionID方法
<?php public function wcallbackAction() { $code = $_GET['code']; $state = $_GET['state']; $setting = include CONFIG_PATH . 'setting.php'; $appid = $setting['weixin']['appid']; $appsecret = $setting['weixin']['appsecret']; if (empty($code)) $this->showMessage('授权失败'); try { $token_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $appid . '&secret=' . $appsecret . '&code=' . $code . '&grant_type=authorization_code'; $token = json_decode($this->https_request($token_url)); } catch(Exception $e) { print_r($e); } if (isset($token->errcode)) { echo '<h1>错误:</h1>' . $token->errcode; echo '<br/><h2>错误信息:</h2>' . $token->errmsg; 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($this->https_request($access_token_url)); if (isset($access_token->errcode)) { echo '<h1>错误:</h1>' . $access_token->errcode; echo '<br/><h2>错误信息:</h2>' . $access_token->errmsg; 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($this->https_request($user_info_url)); if (isset($user_info->errcode)) { echo '<h1>错误:</h1>' . $user_info->errcode; echo '<br/><h2>错误信息:</h2>' . $user_info->errmsg; exit; } //打印用户信息 // echo '<pre>';
// print_r($user_info);
// echo '</pre>';
//获取unionid
$uid = $user_info->unionid;
}
//用户操作处理 分为再次登录和第一次登陆
$sql = "select h_user_id from dtb_user_binded as t1 left join dtb_user_weixin as t2 on t1.u_id=t2.id where t1.u_type='" . User::$arrUtype['weixin_num_t'] . "' and t2.openid='$user_info->unionid'";
$h_user_id = Core_Db::getOne($sql);
if (!empty($h_user_id)) { //该weixin号再次登录
} { //该weixin号第一次登录
}
php微信扫码pc端自动登陆注册用的接口scope是snsapi_userinfo, 微信登陆一个是网页授权登陆,另一个是微信联合登陆网页授权登陆:http: //mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html
微信联合登陆:https: //open.weixin.qq.com/cgi-bin/frame?t=home/web_tmpl&lang=zh_CN
一:首先把微信链接带个标识生成二维码比如链接为https: //open.weixin.qq.com/connect/oauth2/authorize?appid=’.$appid.’&redirect_uri=’.$url.’&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect’ 我们可以在state上做文章,因为state你传入什么微信那边返回什么
可以作为服务器与微信段的一个标识
public function creatqrAction() {
if ($_GET['app']) {
$wtoken = $_COOKIE['wtoken'];
$postdata = $_SESSION['w_state'];
if ($wtoken) {
$postdata = $wtoken;
} < spanstyle = "color: #3366ff;" > include CONFIG_PATH . 'phpqrcode/' . 'phpqrcode.php'; < / span > $sh = $this - >
shar1();
$value = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx138697ef383a9167&redirect_uri=http://www.xxx.net/login/wcallback&response_type=code&scope=snsapi_userinfo&state=" . $postdata . "&connect_redirect=1#wechat_redirect";
$errorCorrectionLevel = "L";
$matrixPointSize = "5";
QRcode::png($value, false, $errorCorrectionLevel, $matrixPointSize);
}
}
此时生成了二维码state是标识,phpqrcode可以在文章末尾下载, 这样我们设置了回调地址http: //www.xxx.net/login/wcallback
就可以在wcallback方法里面处理数据插入用户生成session,跳转登陆,pc端可以设置几秒钟ajax请求服务器,一旦获取到了state, 即实现调整,微信浏览器里处理完后可以关闭窗口, 微信js可实现document . addEventListener('WeixinJSBridgeReady', function onBridgeReady() {
WeixinJSBridge . call('closeWindow');
}
, false);
也可以授权登陆成功后跳转到微信服务号关注页面
header("Location: weixin://profile/gh_a5e1959f9a4e");
wcallback方法做处理登陆
$code = $_GET['code']; $state = $_GET['state']; $setting = include CONFIG_PATH . 'setting.php'; $appid = $setting['weixin']['appid']; $appsecret = $setting['weixin']['appsecret']; if (empty($code)) $this->showMessage('授权失败'); try { $token_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $appid . '&secret=' . $appsecret . '&code=' . $code . '&grant_type=authorization_code'; $token = json_decode($this->https_request($token_url)); } catch(Exception $e) { print_r($e); } if (isset($token->errcode)) { echo '<h1>错误:</h1>' . $token->errcode; echo '<br/><h2>错误信息:</h2>' . $token->errmsg; 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($this->https_request($access_token_url)); if (isset($access_token->errcode)) { echo '<h1>错误:</h1>' . $access_token->errcode; echo '<br/><h2>错误信息:</h2>' . $access_token->errmsg; 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($this->https_request($user_info_url)); if (isset($user_info->errcode)) { echo '<h1>错误:</h1>' . $user_info->errcode; echo '<br/><h2>错误信息:</h2>' . $user_info->errmsg; exit; } //打印用户信息 // echo '<pre>'; // print_r($user_info); // echo '</pre>';
文章网址:http://www.phprm.com/code/86078.html
随意转载^^但请附上教程地址。