文档章节

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

o
 osc_gu9d45li
发布于 2019/04/09 13:14
字数 1191
阅读 9
收藏 0

精选30+云产品,助力企业轻松上云!>>>

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

经过努力和尝试,终于功夫不负有心人啊,赶紧记录一下,我用的是thinkphp编写的。作者:悦~ 博客园地址:https://www.cnblogs.com/nuanai/

第一步:就是二维码的生成  作者:悦~   网址:https://www.cnblogs.com/nuanai/

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);

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

下面就是怎么实现生成带有参数的二维码    作者:悦~   网址:https://www.cnblogs.com/nuanai/

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";

 

下面是写跳转后的操作    作者:悦~   网址:https://www.cnblogs.com/nuanai/

(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; //传值的参数

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

 作者:悦~   网址:https://www.cnblogs.com/nuanai/

  

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
第三方登录之WX登录从入门到填坑

目录 1. 前言 1.1准备条件 1.2服务器token验证 1.3设置网页授权 2. 电脑端微信扫码登录 2.1登陆前的准备 2.2电脑端登录交互步骤 2.3获取登录用的code 2.4获取Access Token以及获取用户OpenI...

六道木
04/15
61
0
php微信开放平台--第三方网页微信扫码登录(OAuth2.0)

第一、OAuth2.0   OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。...

osc_gz5w458v
2018/11/10
24
0
微信公众号开发(二)--扫码绑定微信账号

简书地址:https://www.jianshu.com/p/b2884a226247 当业务系统产生消息需要通过微信推送给指定的用户时,首页需要将业务系统类的用户和微信账号建立一个关系。这里采用的是微信网页授权接口...

osc_t6kfzq66
2018/06/24
6
0
第三方登录:微信扫码登录(OAuth2.0)

1、OAuth2.0   OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。 ...

osc_34byaiqc
2018/12/10
46
0
微信开放平台开发——网页微信扫码登录(OAuth2.0)

、OAuth2.0   OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。  ...

osc_rhdix0z9
2019/02/27
1
0

没有更多内容

加载失败,请刷新页面

加载更多

Hacker News 简讯 2020-07-11

更新时间: 2020-07-11 01:01 Disabling Google 2FA Doesn't Need 2FA - (infoq.com) 禁用google2fa不需要2FA 得分:98 | 评论:33 Rackspace S-1 - (sec.gov) 机架空间S-1 得分:59 | 评论:20 S......

FalconChen
今天
132
0
是否有可能从另一个git存储库中挑选一个提交? - Is it possible to cherry-pick a commit from another git repository?

问题: I'm working with a git repository that needs a commit from another git repository that knows nothing of the first. 我正在使用一个git存储库,需要从另一个不知道第一个存储库......

技术盛宴
昨天
29
0
【LeetCode】53 盛最多水的容器

题目 解题思路 双指针法: https://leetcode-cn.com/problems/container-with-most-water/solution/sheng-zui-duo-shui-de-rong-qi-by-leetcode-solution/ 代码 public class Solution { ......

JaneRoad
昨天
20
0
阿里云OSS配置CDN加速

首先购买CDN流量包 然后添加域名 添加好后 然后将域名OSS.xxxx.com 解析到 生成的CDN域名上 这样就完成了

可达鸭眉头一皱
昨天
16
0
js 整数与小数正则替换片段

说明 /(\d+)/g 整数 /(\d+\.\d+)rem/g 小数 /(\d+\.\d+|\d+)rem/g 其中 | 或 条件 例子 全局查找带 rem 单位的,替换成 px 单位 let text = text.replace(/(\d+\.\d+|\d+)rem/g, function(s......

DrChenXX
昨天
17
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部