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 strtok()函数的优点分析
Mar 02 PHP
在PHP中实现Javascript的escape()函数代码
Aug 08 PHP
浅析SVN常见问题及解决方法
Jun 21 PHP
解析php入库和出库
Jun 25 PHP
浅析PHP的ASCII码转换类
Jul 05 PHP
PHP将字符分解为多个字符串的方法
Nov 22 PHP
php绘图之生成饼状图的方法
Jan 24 PHP
CI框架实现cookie登陆的方法详解
May 18 PHP
php中文字符串截取多种方法汇总
Oct 06 PHP
php获取flash尺寸详细数据的方法
Nov 12 PHP
PHP基础之输出缓冲区基本概念、原理分析
Jun 19 PHP
php设计模式之适配器模式实例分析【星际争霸游戏案例】
Apr 07 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
修改apache配置文件去除thinkphp url中的index.php
2014/01/17 PHP
php提交post数组参数实例分析
2015/12/17 PHP
PHP读书笔记_运算符详解
2016/07/01 PHP
php+ajax简单实现全选删除的方法
2016/12/06 PHP
YII2框架中使用yii.js实现的post请求
2017/04/09 PHP
thinkPHP框架实现的无限回复评论功能示例
2018/06/09 PHP
Jquery Ajax学习实例 向页面发出请求,返回XML格式数据
2010/03/14 Javascript
jQuery中dom元素上绑定的事件详解
2015/04/24 Javascript
JS生成不重复的随机数组的简单实例
2016/07/10 Javascript
AngularJS 中文API参考手册
2016/07/28 Javascript
微信小程序  网络请求API详解
2016/10/25 Javascript
Bootstrap风格的WPF样式
2016/12/07 Javascript
使用jquery的jsonp如何发起跨域请求及其原理详解
2017/08/17 jQuery
JavaScript设计模式之单例模式原理与用法实例分析
2018/07/26 Javascript
bootstrap table实现横向合并与纵向合并
2019/07/18 Javascript
vscode中eslint插件的配置(prettier配置无效)
2019/09/10 Javascript
[00:37]2016完美“圣”典风云人物:rOtk宣传片
2016/12/09 DOTA
Django中使用locals()函数的技巧
2015/07/16 Python
使用pyecharts无法import Bar的解决方案
2020/04/23 Python
基于pip install django失败时的解决方法
2018/06/12 Python
对PyTorch torch.stack的实例讲解
2018/07/30 Python
用Python调用win命令行提高工作效率的实例
2019/08/14 Python
Python datetime 格式化 明天,昨天实例
2020/03/02 Python
Python使用Excel将数据写入多个sheet
2020/05/16 Python
基于python检查矩阵计算结果
2020/05/21 Python
浅谈pytorch 模型 .pt, .pth, .pkl的区别及模型保存方式
2020/05/25 Python
keras.utils.to_categorical和one hot格式解析
2020/07/02 Python
如何让IE9以下版本(ie6/7/8)认识html5元素
2013/04/01 HTML / CSS
HTML5触摸事件演化tap事件介绍
2016/03/25 HTML / CSS
酷瑞网络科技面试题
2012/03/30 面试题
报关专员求职信范文
2014/02/22 职场文书
老人节标语大全
2014/10/08 职场文书
租房协议书范例
2014/10/14 职场文书
加强干部作风建设整改方案
2014/10/24 职场文书
「约定的梦幻岛」作画发布诺曼生日新绘
2022/03/21 日漫
Alexa停服!网站排名将何去何从?目前还没有替代品。
2022/04/15 杂记