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


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新手上路(四)
Oct 09 PHP
PHP生成静态页面详解
Dec 05 PHP
PHP写的加密函数,支持私人密钥(详细介绍)
Jun 09 PHP
关于PHPDocument 代码注释规范的总结
Jun 25 PHP
codeigniter自带数据库类使用方法说明
Mar 25 PHP
PHP include任意文件或URL介绍
Apr 29 PHP
分享一段php获取linux服务器状态的代码
May 27 PHP
PHP使用递归生成文章树
Apr 21 PHP
yii数据库的查询方法
Dec 28 PHP
php ci 获取表单中多个同名input元素值的代码
Mar 25 PHP
php结合mysql与mysqli扩展处理事务的方法
Jun 29 PHP
详谈php中 strtr 和 str_replace 的效率问题
May 14 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
php基础知识:函数基础知识
2006/12/13 PHP
phplist及phpmailer(组合使用)通过gmail发送邮件的配置方法
2016/03/30 PHP
php下载文件,添加响应头的简单实例
2016/09/22 PHP
PHP 进度条函数的简单实例
2017/09/19 PHP
利用php获得flv视频长度的实例代码
2017/10/26 PHP
FCK调用方法..
2006/12/21 Javascript
JS 在指定数组中随机取出N个不重复的数据
2014/06/10 Javascript
js实现可得到不同颜色值的颜色选择器实例
2015/02/28 Javascript
运行Node.js的IIS扩展iisnode安装配置笔记
2015/03/02 Javascript
jQuery获取URL请求参数的方法
2015/07/18 Javascript
JavaScript+CSS实现的可折叠二级菜单实例
2016/02/29 Javascript
js 基础篇必看(点击事件轮播图的简单实现)
2016/08/20 Javascript
详解NODEJS基于FFMPEG视频推流测试
2017/11/17 NodeJs
Vue组件全局注册实现警告框的实例详解
2018/06/11 Javascript
深入了解响应式React Native Echarts组件
2019/05/29 Javascript
JS中比较两个Object数组是否相等方法实例
2019/11/11 Javascript
Eclipse + Python 的安装与配置流程
2013/03/05 Python
Python的Flask框架与数据库连接的教程
2015/04/20 Python
如何处理Python3.4 使用pymssql 乱码问题
2016/01/08 Python
Python学习思维导图(必看篇)
2017/06/26 Python
python实现TF-IDF算法解析
2018/01/02 Python
python实现爬山算法的思路详解
2019/04/09 Python
让你Python到很爽的加速递归函数的装饰器
2019/05/26 Python
python3.6中@property装饰器的使用方法示例
2019/08/17 Python
Python实现Restful API的例子
2019/08/31 Python
详解python中各种文件打开模式
2020/01/19 Python
django3.02模板中的超链接配置实例代码
2020/02/04 Python
python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法
2020/02/26 Python
Keras 加载已经训练好的模型进行预测操作
2020/06/17 Python
九年级物理教学反思
2014/01/29 职场文书
运动会方阵解说词
2014/02/12 职场文书
国际贸易毕业生求职信范文
2014/02/21 职场文书
关于感谢信的范文
2015/01/23 职场文书
指导老师鉴定意见
2015/06/05 职场文书
毕业生求职自荐信(2016最新版)
2016/01/28 职场文书
JS数组方法some、every和find的使用详情
2021/10/05 Javascript