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


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 相关文章推荐
WINXP下apache+php4+mysql
Nov 25 PHP
php Memcache 中实现消息队列
Nov 24 PHP
PHP中用正则表达式清除字符串的空白
Jan 17 PHP
如何修改和添加Apache的默认站点目录
Jul 05 PHP
php实现图片添加水印功能
Feb 13 PHP
PHP使用GIFEncoder类生成的GIF动态图片验证码
Jul 01 PHP
PHP实现根据设备类型自动跳转相应页面的方法
Jul 24 PHP
php从memcache读取数据再批量写入mysql的方法
Dec 29 PHP
PHP根据session与cookie用户登录状态操作类的代码
May 13 PHP
浅谈php中fopen不能创建中文文件名文件的问题
Feb 06 PHP
php下载远程大文件(获取远程文件大小)的实例
Jun 17 PHP
关于Yii中模型场景的一些简单介绍
Sep 22 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
php5 pdo新改动加载注意事项
2008/09/11 PHP
无法载入 mcrypt 扩展,请检查 PHP 配置终极解决方案
2011/07/18 PHP
PHP转换IP地址到真实地址的方法详解
2013/06/09 PHP
php实现的click captcha点击验证码类实例
2014/09/23 PHP
实例分析PHP将字符串转换成数字的方法
2019/01/27 PHP
JavaScript高级程序设计
2006/12/29 Javascript
js 获取、清空input type="file"的值(示例代码)
2013/12/24 Javascript
JS获取随机数函数可自定义最小值最大值
2014/05/08 Javascript
Ajax局部更新导致JS事件重复触发问题的解决方法
2014/10/14 Javascript
jQuery圆形统计图开发实例
2015/01/04 Javascript
jquery实现界面无刷新加载登陆注册
2016/07/30 Javascript
Bootstrap 轮播(Carousel)插件
2016/12/26 Javascript
微信小程序 scroll-view实现上拉加载与下拉刷新的实例
2017/01/21 Javascript
移动端使用localResizeIMG4压缩图片
2017/04/22 Javascript
解决vue 格式化银行卡(信用卡)每4位一个符号隔断的问题
2018/09/14 Javascript
vue slot与传参实例代码讲解
2019/04/28 Javascript
js尾调用优化的实现
2019/05/23 Javascript
vue使用高德地图点击下钻上浮效果的实现思路
2019/10/12 Javascript
[01:46]DOTA2上海特锦赛小组赛英文解说KotlGuy采访
2016/02/27 DOTA
Python中使用urllib2防止302跳转的代码例子
2014/07/07 Python
探究python中open函数的使用
2016/03/01 Python
python的exec、eval使用分析
2017/12/11 Python
用pandas中的DataFrame时选取行或列的方法
2018/07/11 Python
python把数组中的数字每行打印3个并保存在文档中的方法
2018/07/17 Python
Python实现的序列化和反序列化二叉树算法示例
2019/03/02 Python
python3转换code128条形码的方法
2019/04/17 Python
深入了解如何基于Python读写Kafka
2019/12/31 Python
解决tensorflow由于未初始化变量而导致的错误问题
2020/01/06 Python
关于python的缩进规则的知识点详解
2020/06/22 Python
Pycharm配置autopep8实现流程解析
2020/11/28 Python
美国领先的奢侈手表在线零售商:WatchMaxx
2017/12/17 全球购物
BIBLOO波兰:捷克的一家在线服装店
2018/03/09 全球购物
高中竞选班长演讲稿
2014/04/24 职场文书
2015年出纳年终工作总结
2015/05/14 职场文书
Spring Bean是如何初始化的详解
2022/03/22 Java/Android
vue里使用create, mounted调用方法
2022/04/26 Vue.js