如何在微信公众号中实现一个扫码获取微信用户信息功能

2021-02-06 17:03:45 194 0
tangjin

如何在微信公众号中实现一个扫码获取微信用户信息功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

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

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/oauth3/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或者其他的东西,用到下面的方法,可以快速截取到需要的东西

functiongetJson($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);
returnjson_decode($output,true);
}

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

publicfunctiongetUserInfo()
{
$appid="*****";//公众号唯一标识
$secret="*****";//应用秘钥
//$code是回调的时候地址上带的只需要get方式接收就可以了
$code=$_GET["code"];
//获取传过来的值
$htjid=$_GET["id"];
//第一步:取得openid
$oauth3Url="https://api.weixin.qq.com/sns/oauth3/access_token?appid=$appid&secret=$secret&code=$code&grant_type=authorization_code";
$oauth3=$this->getJson($oauth3Url);
//第二步:根据全局access_token和openid查询用户信息
$access_token=$oauth3["access_token"];
$openid=$oauth3['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();//事务提交
}
}

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注恰卡编程网行业资讯频道,感谢您对恰卡编程网的支持。

收藏
分享
海报
0 条评论
194
上一篇:使用php怎么实现一个防刷机制 下一篇:利用PHP怎么获取远程http文件的md5值

本站已关闭游客评论,请登录或者注册后再评论吧~

忘记密码?

图形验证码