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人民币金额数字转中文大写的函数代码
Feb 27 PHP
php获取数组长度的方法(有实例)
Oct 27 PHP
PHP中绘制图像的一些函数总结
Nov 19 PHP
PHP开发Apache服务器配置
Jul 15 PHP
深入理解PHP内核(二)之SAPI探究
Nov 10 PHP
PHP缓冲区用法总结
Feb 14 PHP
php远程下载类分享
Apr 13 PHP
PHP中trait使用方法详细介绍
May 21 PHP
PHP使用JpGraph绘制折线图操作示例【附源码下载】
Oct 18 PHP
laravel 实现根据字段不同值做不同查询
Oct 23 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
Dec 20 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
PHP实现的功能是显示8条基色色带
2006/10/09 PHP
zend optimizer在wamp的基础上安装图文教程
2013/10/26 PHP
php中字符查找函数strpos、strrchr与strpbrk用法
2014/11/18 PHP
WordPress中设置Post Type自定义文章类型的实例教程
2016/05/10 PHP
Laravel框架实现多个视图共享相同数据的方法详解
2019/07/09 PHP
chrome原生方法之数组
2011/11/30 Javascript
关于jquery性能最佳实践的讨论,与求教
2012/03/30 Javascript
JavaScript自执行闭包的小例子
2013/06/29 Javascript
JavaScript中连接操作Oracle数据库实例
2015/04/02 Javascript
jQuery对象的链式操作用法分析
2016/05/10 Javascript
用jQuery.ajaxSetup实现对请求和响应数据的过滤
2016/12/20 Javascript
Angular使用ng-messages与PHP进行表单数据验证
2016/12/28 Javascript
bootstrap下拉菜单使用方法解析
2017/01/13 Javascript
详解前端构建工具gulpjs的使用介绍及技巧
2017/01/19 Javascript
Vue过滤器的用法和自定义过滤器使用
2017/02/08 Javascript
详解tween.js的使用教程
2017/09/14 Javascript
JavaScript实现获取select下拉框中第一个值的方法
2018/02/06 Javascript
JavaScript累加、迭代、穷举、递归等常用算法实例小结
2018/05/08 Javascript
详解如何在Vue里建立长按指令
2018/08/20 Javascript
在vue中获取微信支付code及code被占用问题的解决方法
2019/04/16 Javascript
关于在LayUI中使用AJAX提交巨坑记录
2019/10/25 Javascript
vue前端和Django后端如何查询一定时间段内的数据
2021/02/28 Vue.js
详解python单例模式与metaclass
2016/01/15 Python
基于打开pycharm有带图片md文件卡死问题的解决
2020/04/24 Python
Keras 数据增强ImageDataGenerator多输入多输出实例
2020/07/03 Python
探究 canvas 绘图中撤销(undo)功能的实现方式详解
2018/05/17 HTML / CSS
土耳其时尚购物网站:Morhipo
2017/09/04 全球购物
班主任寄语大全
2014/04/04 职场文书
市场调研项目授权委托书范本
2014/10/04 职场文书
2014年连锁店圣诞节活动方案
2014/12/09 职场文书
给老婆的保证书怎么写
2015/05/08 职场文书
2015年大学教师工作总结
2015/05/20 职场文书
发票退票证明
2015/06/24 职场文书
高三物理教学反思
2016/02/20 职场文书
海贼王十大逆天果实 魂魂果实上榜,岩浆果实攻击力最强
2022/03/18 日漫
nginx访问报403错误的几种情况详解
2022/07/23 Servers