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


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 相关文章推荐
PHP的开发框架的现状和展望
Mar 16 PHP
PHP定时自动生成静态HTML的实现代码
Jun 20 PHP
一道关于php变量引用的面试题
Aug 08 PHP
thinkphp实现面包屑导航(当前位置)例子分享
May 10 PHP
PHP常量使用的几个需要注意的地方(谨慎使用PHP中的常量)
Sep 12 PHP
PHP调用wsdl文件类型的接口代码分享
Nov 19 PHP
Yii中Model(模型)的创建及使用方法
Dec 28 PHP
php+jQuery+Ajax简单实现页面异步刷新
Aug 08 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
Nov 16 PHP
PHP实现的数组和XML文件相互转换功能示例
Mar 15 PHP
PHP ADODB生成下拉列表框功能示例
May 29 PHP
详解PHP中的8个魔术常量
Jul 06 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
单位速度在实战中的运用
2020/03/04 星际争霸
解析php常用image图像函数集
2013/06/24 PHP
PHP中Http协议post请求参数
2015/11/02 PHP
PHP串行化与反串行化实例分析
2016/12/27 PHP
Yii2 hasOne(), hasMany() 实现三表关联的方法(两种)
2017/02/15 PHP
js event事件的传递与冒泡处理
2009/12/06 Javascript
深入理解JavaScript系列(7) S.O.L.I.D五大原则之开闭原则OCP
2012/01/15 Javascript
jquery animate实现鼠标放上去显示离开隐藏效果
2013/07/21 Javascript
在JavaScript中判断整型的N种方法示例介绍
2014/06/18 Javascript
Node.js中require的工作原理浅析
2014/06/24 Javascript
javascript实现日期格式转换
2014/12/16 Javascript
使用Promise解决多层异步调用的简单学习心得
2016/05/17 Javascript
Bootstrap+jfinal实现省市级联下拉菜单
2016/05/30 Javascript
jQuery表单插件ajaxForm实例详解
2017/01/17 Javascript
利用Jquery实现几款漂亮实用的时间轴(附示例代码)
2017/02/15 Javascript
完美实现js选项卡切换效果(一)
2017/03/08 Javascript
jQuery中each循环的跳出和结束实例
2017/08/16 jQuery
jQuery实现的简单图片轮播效果完整示例
2018/02/08 jQuery
vue.js使用v-if实现显示与隐藏功能示例
2018/07/06 Javascript
微信小程序实现预览图片功能
2020/10/22 Javascript
python3+PyQt5实现自定义窗口部件Counters
2018/04/20 Python
解决python3 Pycharm上连接数据库时报错的问题
2018/12/03 Python
Python函数中不定长参数的写法
2019/02/13 Python
Python使用Opencv实现图像特征检测与匹配的方法
2019/10/30 Python
ubuntu 18.04 安装opencv3.4.5的教程(图解)
2019/11/04 Python
python找出列表中大于某个阈值的数据段示例
2019/11/24 Python
Django限制API访问频率常用方法解析
2020/10/12 Python
python时间time模块处理大全
2020/10/25 Python
使用canvas实现黑客帝国数字雨效果
2020/01/02 HTML / CSS
英国排名第一的LED灯泡网站:LED Bulbs
2019/09/03 全球购物
PHP中如何创建和修改数组
2012/05/02 面试题
《学会待客》教学反思
2014/02/22 职场文书
员工工作表现评语
2014/04/26 职场文书
10的分与合教学反思
2014/04/30 职场文书
2014年大学班长工作总结
2014/11/14 职场文书
Redis+AOP+自定义注解实现限流
2022/06/28 Redis