php实现微信扫码自动登陆与注册功能


Posted in PHP onSeptember 22, 2016

本文实例讲述了php实现微信扫码自动登陆与注册功能。分享给大家供大家参考,具体如下:

微信开发已经是现在程序员必须要掌握的一项基本的技术了,其实做过微信开发的都知道微信接口非常的强大做起来也非常的简单,这里我们一起来看一个微信自动登陆注册的例子.

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;
}
include CONFIG_PATH . 'phpqrcode/'.'phpqrcode.php'
$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 (emptyempty($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 '错误:'.$token->errcode;
echo '错误信息:'.$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 '错误:'.$access_token->errcode;
echo '错误信息:'.$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 '错误:'.$user_info->errcode;
echo '错误信息:'.$user_info->errmsg;
exit;
}
//打印用户信息
// echo ''
// print_r($user_info);
// echo ''

phpqrcode类库下载在此不提供各位可以百度搜索下载

magento微信扫码网站自动登录的例子
https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&lang=zh_CN

查看授权后接口调用(UnionID),不难发现填写回调地址,用户确认登陆pc端即可跳转

获取UnionID方法

public function wcallbackAction(){
$code = $_GET['code'];
$state = $_GET['state'];
$setting = include CONFIG_PATH . 'setting.php';
$appid=$setting['weixin']['appid'];
$appsecret=$setting['weixin']['appsecret'];
if (emptyempty($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(!emptyempty($h_user_id)){//该weixin号再次登录
}{//该weixin号第一次登录
}

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
用PHP读注册表
Oct 09 PHP
php获取mysql数据库中的所有表名的代码
Apr 23 PHP
php中使用Imagick实现图像直方图的实现代码
Aug 30 PHP
利用浏览器的Javascript控制台调试PHP程序
Jan 08 PHP
php中curl、fsocket、file_get_content三个函数的使用比较
May 09 PHP
解密ThinkPHP3.1.2版本之独立分组功能应用
Jun 19 PHP
php+MySQL判断update语句是否执行成功的方法
Aug 28 PHP
PHP中防止SQL注入方法详解
Dec 25 PHP
php 使用array函数实现分页
Feb 13 PHP
fckeditor上传文件按日期存放及重命名方法
May 22 PHP
Laravel自定义 封装便捷返回Json数据格式的引用方法
Sep 29 PHP
Laravel统计一段时间间隔的数据方法
Oct 09 PHP
php版微信公众号自定义分享内容实现方法
Sep 22 #PHP
php版微信公众平台接口开发之智能回复开发教程
Sep 22 #PHP
PHP判断用户是否已经登录(跳转到不同页面或者执行不同动作)
Sep 22 #PHP
PHP查看SSL证书信息的方法
Sep 22 #PHP
php版微信自动获取收货地址api用法示例
Sep 22 #PHP
php版微信公众平台回复中文出现乱码问题的解决方法
Sep 22 #PHP
php中foreach结合curl实现多线程的方法分析
Sep 22 #PHP
You might like
10个简化PHP开发的工具
2014/12/25 PHP
网站防止被刷票的一些思路与方法
2015/01/08 PHP
Symfony2开发之控制器用法实例分析
2016/02/05 PHP
2017年最新PHP经典面试题目汇总(上篇)
2017/03/17 PHP
地址栏上的一段语句,改变页面的风格。(教程)
2008/04/02 Javascript
jQuery实现可拖动的浮动层完整代码
2013/05/27 Javascript
jQuery使用hide方法隐藏指定元素class样式用法实例
2015/03/30 Javascript
JS实现DIV容器赋值的方法
2015/12/14 Javascript
深入探究AngularJS框架中Scope对象的超级教程
2016/01/04 Javascript
jQuery form插件的使用之处理server返回的JSON, XML,HTML数据
2016/01/26 Javascript
dedecms页面如何获取会员状态的实例代码
2016/03/15 Javascript
jquery实现自适应banner焦点图
2017/02/16 Javascript
浅谈vue的踩坑路
2017/08/31 Javascript
jquery实现倒计时小应用
2017/09/19 jQuery
浅谈Vue.nextTick 的实现方法
2017/10/25 Javascript
浅谈layui框架自带分页和表格重载的接口解析问题
2019/09/11 Javascript
layui内置模块layim发送图片添加加载动画的方法
2019/09/23 Javascript
JS实现判断移动端PC端功能
2020/02/21 Javascript
React生命周期原理与用法踩坑笔记
2020/04/28 Javascript
[43:18]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.22
2019/09/05 DOTA
python中使用enumerate函数遍历元素实例
2014/06/16 Python
利用python实现数据分析
2017/01/11 Python
Django+Ajax+jQuery实现网页动态更新的实例
2018/05/28 Python
python实现字符串加密成纯数字
2019/03/19 Python
Python序列类型的打包和解包实例
2019/12/21 Python
python将字典内容写入json文件的实例代码
2020/08/12 Python
Python3.9新特性详解
2020/10/10 Python
利用HTML5中的Canvas绘制一张笑脸的教程
2015/05/07 HTML / CSS
英国演唱会订票网站:Ticket Selection
2018/03/27 全球购物
2014婚礼司仪主持词
2014/03/14 职场文书
追悼会主持词
2014/03/20 职场文书
暑期社会实践个人总结
2015/03/06 职场文书
雷锋的故事观后感
2015/06/10 职场文书
2016年“5.12”护士节致辞
2015/07/31 职场文书
2019年工作总结范文
2019/05/21 职场文书
Python自动化实战之接口请求的实现
2022/05/30 Python