当前位置:首页 > PHP教程 > php高级应用 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2021-11-16 10:31:37 浏览: 评论:0 

刚开始接触微信的时候一头雾水,领导想要一个扫码获取微信用户信息的功能,接下来通过本文给大家分享微信公众号实现扫码获取微信用户信息(网页授权),需要的朋友可以参考下。

刚开始接触微信的时候一头雾水,领导想要一个扫码获取微信用户信息的功能,而且是扫的别人的二维码,我是一阵忙活啊。

经过努力和尝试,终于功夫不负有心人啊,赶紧记录一下,我用的是thinkphp编写的。

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

1.首先要确定第一个二维码,因为既然是扫码,肯定是要第一个二维码的,也就是第一人才可以。我将第一个二维码的唯一值(id)设置成零,然后开始我的编写

2.既然是二维码,我用了phpqrcode二维码生成插件,二维码的生成可以在本地编写,查看效果后再上传服务器。

(1)从网上下载下phpqrcode插件包,将它放到thinkphp的文件里,路径如下:ThinkPHP\Library\Vendor ,截图如下:

微信公众号获取微信用户信息

(2)二维码的生成,在调用显示二维码的控制器的方法中调用这个插件包,然后设置下扫描后跳转的URL就好了,代码如下:

  1. $url ="http://www.phpfensi.com"
  2. $level=3; 
  3. $size=4; 
  4. Vendor('phpqrcode.phpqrcode'); //引入插件 
  5. $errorCorrectionLevel = intval($level) ;//容错级别 
  6. $matrixPointSize = intval($size);//生成图片大小 
  7. //生成二维码图片 
  8. $object = new \QRcode();  
  9. $path = "Public/ER/1.png"//本地文件存储路径 
  10. $object->png($url$path$errorCorrectionLevel$matrixPointSize, 2); 

这只是实现生成二维码并且可以进入二维码指定的网址,真正要实现的目的是扫带有参数的二维码,获取微信用户的信息。

下面就是怎么实现生成带有参数的二维码。

3.(1)要用到微信的网页授权,就要用到公众号的几个参数:1是AppID 2是AppSecret  这是公众号申请成功后分配下来的

(2)利用这两个参数,然后再配合获取access_token的值就可以了

代码如下(扫描后跳转到getUserInfo方法,并且把唯一键值传过去):

  1. $tid = 0; //传值的参数 
  2. $level=3; 
  3. $size=4; 
  4. Vendor('phpqrcode.phpqrcode'); 
  5. $errorCorrectionLevel = intval($level) ;//容错级别 
  6. $matrixPointSize = intval($size);//生成图片大小 
  7. //生成二维码图片 
  8. $object = new \QRcode(); 
  9. $path = "Public/ER/" . $tid . ".png"//本地文件存储路径 
  10. $object->png($url$path$errorCorrectionLevel$matrixPointSize, 2); 
  11. $appid='******'//公众号唯一标识 
  12. $redirect_uri = urlencode ( 'http://www.****.net/index.php/Admin/Sindex/getUserInfo?id='.$tid ); //这个是设置参数和授权后重定向的回调链接地址 
  13. //snsapi_userinfo弹出授权页面,可通过openid拿到昵称、性别、所在地 snsapi_base ,不弹出授权页面,直接跳转,只能获取用户openid  
  14. $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或者其他的东西,用到下面的方法,可以快速截取到需要的东西

  1. function getJson($url){ 
  2.  $ch = curl_init(); 
  3.  curl_setopt($ch, CURLOPT_URL, $url); 
  4.  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);  
  5.  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);  
  6.  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
  7.  $output = curl_exec($ch); 
  8.  curl_close($ch); 
  9.  return json_decode($output, true); 

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

  1. public function getUserInfo() 
  2.  $appid = "*****"//公众号唯一标识 
  3.  $secret = "*****"//应用秘钥 
  4.  //$code是回调的时候地址上带的 只需要get方式接收就可以了 
  5.  $code = $_GET["code"];  
  6.  //获取传过来的值 
  7.  $htjid = $_GET["id"]; 
  8.  //第一步:取得openid 
  9.  $oauth2Url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$secret&code=$code&grant_type=authorization_code"
  10.  $oauth2 = $this->getJson($oauth2Url); 
  11.  //第二步:根据全局access_token和openid查询用户信息  
  12.  $access_token = $oauth2["access_token"];  
  13.  $openid = $oauth2['openid'];  
  14.  $get_user_info_url = "https://api.weixin.qq.com/sns/userinfo?access_token=$access_token&openid=$openid&lang=zh_CN"
  15.  $userinfo = $this->getJson($get_user_info_url); 
  16.  //写入数据库微信用户 
  17.  M()->startTrans();//开启事务 
  18.  $n = M("zp_user"); //写入的表 
  19.  $openid = $data['openid'] = $userinfo['openid']; //微信用户openid 
  20.  $data['sex'] = $userinfo['sex']; //性别  
  21.  $data['headimgurl'] = $userinfo['headimgurl']; //头像 
  22.  $data['province'] = $userinfo['province']; //地区sheng 
  23.  $data['city'] = $userinfo['city']; //地区shi 
  24.  $data['subscribe_time'] = time(); //时间 
  25.  $data['qr_scene'] = $htjid//传过的值 
  26.  $data['nickname'] = $userinfo['nickname']; //昵称 
  27.  $z = $n->lock(true)->add($data); 
  28.  if(!$z
  29.  { 
  30.  M()->rollback();//回滚 
  31.  $this->error('添加错误!'); 
  32.  }else
  33.  M()->commit();//事务提交 
  34.  } 

到此,就可以实现扫描二维码获取用户信息了,并且将用户信息写入数据库。

这是第一个二维码,生成后,就可以将id的参数值换成前面传过来的值,也就是扫码的值 $tid = 0; //传值的参数。

如果想要自己的二维码页面好看的话,比如想要把自己的微信昵称和二维码合成一张图片的话,也是可以实现的,这就要用到图片的合成了,下次再说吧。

Tags: 微信公众号获取微信用户信息

分享到: