如何在微信公众号中实现一个扫码获取微信用户信息功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
第一步:就是二维码的生成
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或者其他的东西,用到下面的方法,可以快速截取到需要的东西
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 $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();//事务提交 } }
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。