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


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 相关文章推荐
discuz论坛 用户登录 后台程序代码
Nov 27 PHP
PHP 开发环境配置(Zend Server安装)
Apr 28 PHP
php中get_headers函数的作用及用法的详细介绍
Apr 27 PHP
php不用正则验证真假身份证
Nov 06 PHP
php类声明和php类使用方法示例分享
Mar 29 PHP
php数组查找函数in_array()、array_search()、array_key_exists()使用实例
Apr 29 PHP
PHP 面向对象程序设计(oop)学习笔记(一) - 抽象类、对象接口、instanceof 和契约式编程
Jun 12 PHP
Yii 快速,安全,专业的PHP框架
Sep 03 PHP
php使用curl简单抓取远程url的方法
Mar 13 PHP
php将HTML表格每行每列转为数组实现采集表格数据的方法
Apr 03 PHP
原生PHP实现导出csv格式Excel文件的方法示例【附源码下载】
Mar 07 PHP
Laravel向公共模板赋值方法总结
Jun 25 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/02 国漫
php可应用于面包屑导航的递归寻找家谱树实现方法
2015/02/02 PHP
动态加载图片路径 保持JavaScript控件的相对独立性
2010/09/06 Javascript
你必须知道的Javascript知识点之"单线程事件驱动"的使用
2013/04/23 Javascript
jQuery实现密保互斥问题解决方案
2013/08/16 Javascript
JS实现点击链接取消跳转效果的方法
2014/01/24 Javascript
node.js中的fs.writeFile方法使用说明
2014/12/14 Javascript
jQuery qrcode生成二维码的方法
2016/04/03 Javascript
JS中sort函数排序用法实例分析
2016/06/16 Javascript
利用Node.js制作爬取大众点评的爬虫
2016/09/22 Javascript
折叠菜单及选择器的运用
2017/02/03 Javascript
利用Ionic2 + angular4实现一个地区选择组件
2017/07/27 Javascript
AngularJs 终极购物车(实例讲解)
2017/11/08 Javascript
angular5 httpclient的示例实战
2018/03/12 Javascript
关于在vue 中使用百度ueEditor编辑器的方法实例代码
2018/09/14 Javascript
原生JS与CSS实现软件卸载对话框功能
2019/12/05 Javascript
javascript中innerHTML 获取或替换html内容的实现代码
2020/03/17 Javascript
el-form 多层级表单的实现示例
2020/09/10 Javascript
[02:57]2014DOTA2国际邀请赛 选手辛苦解说更辛苦
2014/07/10 DOTA
在Python中使用zlib模块进行数据压缩的教程
2015/06/26 Python
在Django中创建URLconf相关的通用视图的方法
2015/07/20 Python
python django中8000端口被占用的解决
2019/12/17 Python
通信工程专业个人找工作求职信范文
2013/09/21 职场文书
客服文员岗位职责
2013/11/29 职场文书
创业计划书中包含的9个方面
2013/12/26 职场文书
平安建设实施方案
2014/03/19 职场文书
优秀学生党员先进事迹材料
2014/05/29 职场文书
社区志愿者活动总结
2014/06/26 职场文书
公务员考察材料
2014/12/23 职场文书
优秀少先队辅导员事迹材料
2014/12/24 职场文书
爱晚亭导游词
2015/02/09 职场文书
文案策划岗位职责
2015/02/11 职场文书
同学毕业留言寄语
2015/02/27 职场文书
投资入股协议书
2016/03/22 职场文书
导游词之镇江焦山
2019/11/21 职场文书
pytest配置文件pytest.ini的详细使用
2021/04/17 Python