实现扫码获取⽤户信息(⽹页授权)
刚开始接触的时候⼀头雾⽔,领导想要⼀个扫码获取⽤户信息的功能,⽽且是扫的别⼈的⼆维码,我是⼀阵忙活啊。
经过努⼒和尝试,终于功夫不负有⼼⼈啊,赶紧记录⼀下,我⽤的是thinkphp编写的。
第⼀步:就是⼆维码的⽣成
1.⾸先要确定第⼀个⼆维码,因为既然是扫码,肯定是要第⼀个⼆维码的,也就是第⼀⼈才可以。我将第⼀个⼆维码的唯⼀值(id)设置成零,然
后开始我的编写
2.既然是⼆维码,我⽤了phpqrcode⼆维码⽣成插件,⼆维码的⽣成可以在本地编写,查看效果后再上传服务器。
(1)从⽹上下载下phpqrcode插件包,将它放到thinkphp的⽂件⾥,路径如下:ThinkPHP\Library\Vendor ,截图如下:
(2)⼆维码的⽣成,在调⽤显⽰⼆维码的控制器的⽅法中调⽤这个插件包,然后设置下扫描后跳转的URL就好了,代码如下:
$url ="www.baidu";
$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 ( 'www.****/index.php/Admin/Sindex/getUserInfo?id='.$tid ); //这个是设置参数和授权后重定向的回调链接地址
//snsapi_userinfo弹出授权页⾯,可通过openid拿到昵称、性别、所在地 snsapi_base ,不弹出授权页⾯,直接跳转,只能获取⽤户openid 
$url ="open.weixin.qq/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 = "api.weixin.qq/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 = "api.weixin.qq/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; //传值的参数
如果想要⾃⼰的⼆维码页⾯好看的话,⽐如想要把⾃⼰的昵称和⼆维码合成⼀张图⽚的话,也是可以实现的,这就要⽤到图⽚的合成了,下次再说吧。
总结
以上所述是⼩编给⼤家介绍的实现扫码获取⽤户信息(⽹页授权),希望对⼤家有所帮助,如果⼤家有任何疑问欢迎给我留⾔,⼩编会及时回复⼤家的!