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
用ODBC的分页显示
Oct 09 PHP
fleaphp常用方法分页之Pager使用方法
Apr 23 PHP
简单的方法让你的后台登录更加安全(php中加session验证)
Aug 22 PHP
PHP中变量引用与变量销毁机制分析
Nov 15 PHP
php调用KyotoTycoon简单实例
Apr 02 PHP
从性能方面考虑PHP下载远程文件的3种方法
Dec 29 PHP
使用PHP如何实现高效安全的ftp服务器(二)
Dec 30 PHP
php实现三级级联下拉框
Apr 17 PHP
PHP使用glob方法遍历文件夹下所有文件的实例
Oct 17 PHP
php快速导入大量数据的实例方法
Sep 23 PHP
在 Laravel 中动态隐藏 API 字段的方法
Oct 25 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语法(4)
2006/10/09 PHP
PHP脚本数据库功能详解(中)
2006/10/09 PHP
php实现的遍历文件夹下所有文件,编辑删除
2010/01/05 PHP
如何使用PHP获取指定日期所在月的开始日期与结束日期
2013/08/01 PHP
PHP使用http_build_query()构造URL字符串的方法
2016/04/02 PHP
YII2自动登录Cookie总是失效的解决方法
2017/06/28 PHP
javascript里模拟sleep(两种实现方式)
2013/01/25 Javascript
Egret引擎开发指南之视觉编程
2014/09/03 Javascript
JQuery包裹DOM节点的方法
2015/06/11 Javascript
jQuery ajax时间差导致的变量赋值问题分析
2016/01/22 Javascript
JS实现滑动门效果的方法详解
2016/12/19 Javascript
浅谈Node异步编程的机制
2017/10/18 Javascript
全面介绍vue 全家桶和项目实例
2017/12/27 Javascript
又拍云 Node.js 实现文件上传、删除功能
2018/10/28 Javascript
浅谈如何优雅处理JavaScript异步错误
2019/11/12 Javascript
javascript 原型与原型链的理解及应用实例分析
2020/02/10 Javascript
koa-passport实现本地验证的方法示例
2020/02/20 Javascript
js如何验证密码强度
2020/03/18 Javascript
[03:19]2016国际邀请赛中国区预选赛第四日TOP10镜头集锦
2016/07/01 DOTA
python中尾递归用法实例详解
2015/04/28 Python
Python输出PowerPoint(ppt)文件中全部文字信息的方法
2015/04/28 Python
Python基本语法经典教程
2016/03/11 Python
使用Python爬了4400条淘宝商品数据,竟发现了这些“潜规则”
2018/03/23 Python
python之Flask实现简单登录功能的示例代码
2018/12/24 Python
python实现字符串加密成纯数字
2019/03/19 Python
Django框架设置cookies与获取cookies操作详解
2019/05/27 Python
TensorFlow学习之分布式的TensorFlow运行环境
2020/02/05 Python
Opencv 图片的OCR识别的实战示例
2021/03/02 Python
Html5页面二次分享的实现
2018/07/30 HTML / CSS
澳大利亚头发和美容产品购物网站:OZ Hair & Beauty
2020/03/27 全球购物
音乐专业自荐信
2014/02/07 职场文书
食品质量与安全专业毕业生求职信
2014/08/11 职场文书
农民工预备党员思想汇报
2014/09/14 职场文书
2014年民主评议党员工作总结
2014/12/02 职场文书
画展邀请函
2015/01/31 职场文书
2015年小学开学寄语
2015/02/27 职场文书