微信公众号实现扫码获取微信用户信息(网页授权)


Posted in PHP onApril 09, 2019

 刚开始接触微信的时候一头雾水,领导想要一个扫码获取微信用户信息的功能,而且是扫的别人的二维码,我是一阵忙活啊。

经过努力和尝试,终于功夫不负有心人啊,赶紧记录一下,我用的是thinkphp编写的。

第一步:就是二维码的生成 

1.首先要确定第一个二维码,因为既然是扫码,肯定是要第一个二维码的,也就是第一人才可以。我将第一个二维码的唯一值(id)设置成零,然后开始我的编写

2.既然是二维码,我用了phpqrcode二维码生成插件,二维码的生成可以在本地编写,查看效果后再上传服务器。

(1)从网上下载下phpqrcode插件包,将它放到thinkphp的文件里,路径如下:ThinkPHP\Library\Vendor ,截图如下:

微信公众号实现扫码获取微信用户信息(网页授权)

(2)二维码的生成,在调用显示二维码的控制器的方法中调用这个插件包,然后设置下扫描后跳转的URL就好了,代码如下:

$url ="http://www.baidu.com";
$level=3;
$size=4;
Vendor('phpqrcode.phpqrcode'); //引入插件
$errorCorrectionLevel = intval($level) ;//容错级别
$matrixPointSize = intval($size);//生成图片大小
//生成二维码图片
$object = new \QRcode(); 
$path = "Public/ER/1.png"; //本地文件存储路径
$object->png($url, $path, $errorCorrectionLevel, $matrixPointSize, 2);

这只是实现生成二维码并且可以进入二维码指定的网址,真正要实现的目的是扫带有参数的二维码,获取微信用户的信息

下面就是怎么实现生成带有参数的二维码   

3.(1)要用到微信的网页授权,就要用到公众号的几个参数:1是AppID 2是AppSecret  这是公众号申请成功后分配下来的

(2)利用这两个参数,然后再配合获取access_token的值就可以了

代码如下(扫描后跳转到getUserInfo方法,并且把唯一键值传过去):

$tid = 0; //传值的参数
$level=3;
$size=4;
Vendor('phpqrcode.phpqrcode');
$errorCorrectionLevel = intval($level) ;//容错级别
$matrixPointSize = intval($size);//生成图片大小
//生成二维码图片
$object = new \QRcode();
$path = "Public/ER/" . $tid . ".png"; //本地文件存储路径
$object->png($url, $path, $errorCorrectionLevel, $matrixPointSize, 2);
$appid='******'; //公众号唯一标识
$redirect_uri = urlencode ( 'http://www.****.net/index.php/Admin/Sindex/getUserInfo?id='.$tid ); //这个是设置参数和授权后重定向的回调链接地址
//snsapi_userinfo弹出授权页面,可通过openid拿到昵称、性别、所在地 snsapi_base ,不弹出授权页面,直接跳转,只能获取用户openid 
$url ="https://open.weixin.qq.com/connect/oauth2/authorize?appid=$appid&redirect_uri=$redirect_uri&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect";

 下面是写跳转后的操作  

(1)接收传过来的值

(2)取得openid

(3)根据全局access_token和openid查询用户信息 

(4)将信息写入数据库

获取openid或者其他的东西,用到下面的方法,可以快速截取到需要的东西

function getJson($url){
 $ch = curl_init();
 curl_setopt($ch, CURLOPT_URL, $url);
 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 $output = curl_exec($ch);
 curl_close($ch);
 return json_decode($output, true);
}

 接下来就是将上面的步骤逐一实现,代码如下:

public function getUserInfo()
{
 $appid = "*****"; //公众号唯一标识
 $secret = "*****"; //应用秘钥
 //$code是回调的时候地址上带的 只需要get方式接收就可以了
 $code = $_GET["code"]; 
 //获取传过来的值
 $htjid = $_GET["id"];
 //第一步:取得openid
 $oauth2Url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$secret&code=$code&grant_type=authorization_code";
 $oauth2 = $this->getJson($oauth2Url);
 //第二步:根据全局access_token和openid查询用户信息 
 $access_token = $oauth2["access_token"]; 
 $openid = $oauth2['openid']; 
 $get_user_info_url = "https://api.weixin.qq.com/sns/userinfo?access_token=$access_token&openid=$openid&lang=zh_CN";
 $userinfo = $this->getJson($get_user_info_url);
 //写入数据库微信用户
 M()->startTrans();//开启事务
 $n = M("zp_user"); //写入的表
 $openid = $data['openid'] = $userinfo['openid']; //微信用户openid
 $data['sex'] = $userinfo['sex']; //性别 
 $data['headimgurl'] = $userinfo['headimgurl']; //头像
 $data['province'] = $userinfo['province']; //地区sheng
 $data['city'] = $userinfo['city']; //地区shi
 $data['subscribe_time'] = time(); //时间
 $data['qr_scene'] = $htjid; //传过的值
 $data['nickname'] = $userinfo['nickname']; //昵称
 $z = $n->lock(true)->add($data);
 if(!$z)
 {
 M()->rollback();//回滚
 $this->error('添加错误!');
 }else{
 M()->commit();//事务提交
 }
}

 到此,就可以实现扫描二维码获取用户信息了,并且将用户信息写入数据库

这是第一个二维码,生成后,就可以将id的参数值换成前面传过来的值,也就是扫码的值 $tid = 0; //传值的参数

如果想要自己的二维码页面好看的话,比如想要把自己的微信昵称和二维码合成一张图片的话,也是可以实现的,这就要用到图片的合成了,下次再说吧。

总结

以上所述是小编给大家介绍的微信公众号实现扫码获取微信用户信息(网页授权),希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

PHP 相关文章推荐
用IE远程创建Mysql数据库的简易程序
Oct 09 PHP
用PHP和ACCESS写聊天室(十)
Oct 09 PHP
九个你必须知道而且又很好用的php函数和特点
Aug 08 PHP
php登陆页的密码处理方式分享
Oct 14 PHP
浅析iis7.5安装配置php环境
May 10 PHP
使用PHP uniqid函数生成唯一ID
Nov 18 PHP
PHP实现的蚂蚁爬杆路径算法代码
Dec 03 PHP
CodeIgniter读写分离实现方法详解
Jan 20 PHP
php实现图片上传并利用ImageMagick生成缩略图
Mar 14 PHP
php使用Header函数,PHP_AUTH_PW和PHP_AUTH_USER做用户验证
May 04 PHP
php检查函数必传参数是否存在的实例详解
Aug 28 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
Jun 16 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解
Apr 09 #PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解
Apr 09 #PHP
ThinkPHP框架整合微信支付之JSAPI模式图文详解
Apr 09 #PHP
PHP7引入的"??"和"?:"的区别讲解
Apr 08 #PHP
PHP开发实现快递查询功能详解
Apr 08 #PHP
PHP中number_format()函数的用法讲解
Apr 08 #PHP
微信JSSDK分享功能图文实例详解
Apr 08 #PHP
You might like
给海燕B411配件机起死回生配上件
2021/03/02 无线电
php中的登陆login
2007/01/18 PHP
迅速确定php多维数组的深度的方法
2014/01/07 PHP
smarty高级特性之对象的使用方法
2015/12/25 PHP
PHP将URL转换成短网址的算法分享
2016/09/13 PHP
php+redis实现注册、删除、编辑、分页、登录、关注等功能示例
2017/02/15 PHP
php 中htmlentities导致中文无法查询问题
2018/09/10 PHP
javascript操作cookie_获取与修改代码
2009/05/21 Javascript
ExtJs 表单提交登陆实现代码
2010/08/19 Javascript
Ajax清除浏览器js、css、图片缓存的方法
2015/08/06 Javascript
Bootstrap每天必学之按钮
2015/11/26 Javascript
详解nodejs与javascript中的aes加密
2016/05/22 NodeJs
BootStrap 附加导航组件
2016/07/22 Javascript
jQuery实现淡入淡出的模态框
2017/02/09 Javascript
Angular在一个页面中使用两个ng-app的方法(二)
2017/02/20 Javascript
AngularJs ng-change事件/指令的用法小结
2017/11/01 Javascript
解决vue keep-alive 数据更新的问题
2018/09/21 Javascript
Python转码问题的解决方法
2008/10/07 Python
python登录QQ邮箱发信的实现代码
2013/02/10 Python
python实现的生成随机迷宫算法核心代码分享(含游戏完整代码)
2014/07/11 Python
Python实现删除文件但保留指定文件
2015/06/21 Python
基于python 二维数组及画图的实例详解
2018/04/03 Python
python 读写文件,按行修改文件的方法
2018/07/12 Python
如何利用python发送邮件
2020/09/26 Python
深入理解Python变量的数据类型和存储
2021/02/01 Python
详解python第三方库的安装、PyInstaller库、random库
2021/03/03 Python
css3中新增的样式使用示例附效果图
2014/08/19 HTML / CSS
英国设计的甲板鞋和船鞋:Chatham
2018/12/06 全球购物
新西兰第一的行李箱网站:luggage.co.nz
2019/07/22 全球购物
自我反省检讨书
2014/01/23 职场文书
道德演讲稿
2014/05/21 职场文书
村主任当选感言
2015/08/01 职场文书
CSS Transition通过改变Height实现展开收起元素
2021/08/07 HTML / CSS
Python3.8官网文档之类的基础语法阅读
2021/09/04 Python
java中用float时,数字后面加f,这样是为什么你知道吗
2021/09/04 Java/Android
Win2008系统搭建DHCP服务器
2022/06/25 Servers