微信网页授权,获取微信用户信息

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_36785111/article/details/81281645

如果进行第三方网站开发接入微信公众号,需要拿到用户的基本信息,此时就需要调用微信接口进行第三方授权拿到微信用户的基本信息。

一、微信公众号配置

二、微信菜单配置(或URL访问)(拉取用户授权页面)

三、获取授权后拿到的code,通过code换取网页授权access_token(调用微信接口)

四、获取微信用户基本信息(调用微信接口)

注意:微信公众平台可能会更新接口URL,具体URL与官方文档一致。


一、微信公众号配置
(正式公众号) “开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息”的配置选项中,修改授权回调域名。

(测试公众号)“网页服务 - 网页账号(网页授权获取用户基本信息)”进行修改回调域名。
配置以后此域名下面的页面都将可以访问

二、微信菜单配置(或URL访问)(拉取用户授权页面)

确保微信公众账号拥有授权作用域(scope参数)的权限的前提下,引导公众号关注者打开如下页面
(该URL接口参数顺序不可改变):

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

参数说明:
1、APPID:公众号的唯一标识

2、redirect_uri :授权后重定向的回调链接地址, 请使用 urlEncode 对链接进行处理

3、response_type:返回类型,请填写code

4、scope:应用授权作用域
   scope分类:snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid)
          snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。)

5、state:重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节

6、#wechat_redirect:无论直接打开还是做页面302重定向时候,必须带此参数

注意:若用户同意授权,则页面会跳转至 redirect_uri参数对应的url地址,并且url地址携带code以及state参数

 code说明 : code作为换取access_token的票据,
            每次用户授权带上的code将不一样,
            code只能使用一次,5分钟未被使用自动过期。

三、获取授权后拿到的code,通过code换取网页授权access_token

1. 拿到授权code(通过正则表达式截取URL中code的值,即为网页授权后重定向后的URL携带的参数)

//授权过后直接获取即可(即进入第三方的入口函数中调用获取code)
var code = getQueryString(code)
function getQueryString(name) { 
        var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); 
        var r = window.location.search.substr(1).match(reg); 
        if (r != null) return unescape(r[2]); return null; 
    } 

2 获取access_token

由于公众号的secret和获取到的access_token安全级别都非常高,必须只保存在服务器,不允许传给客户端。
后续刷新access_token、通过access_token获取用户信息等步骤,也必须从服务器发起。
/**
 *url:为后台访问接口URL
 */
$.post(url,{'code':code},function(data){
    console.log('回调函数')
    console.log('后台可以返回用户基本信息,通过data拿到后进行第三方页面回填!')
},'json')
/**
 *JAVA 后台access_token获取
 */

//接收code
String code = this.getPara("code");

// 参数拼接(参数顺序没有规定)
Map<String,Object> params = new HashMap<String,Object>();
paramMap.put("appid", "APPID");//公众号唯一标识
paramMap.put("secret", "secret");//公众号秘钥
paramMap.put("code", code);//授权code
paramMap.put("grant_type", "authorization_code");//微信接口固定参数

//调用接口获取access_token(网页授权token)
String token = HttpUtil.get("https://api.weixin.qq.com/sns/oauth2/access_token", params);

//转换为json对象格式(便于读取内容)   
JSONObject wxToken = JSONObject.parseObject(token);
//该微信接口的返回值如下,可以看到我们需要的access_token
access_token    //网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
expires_in      //access_token接口调用凭证超时时间,单位(秒)
refresh_token   //用户刷新access_token
openid          //用户唯一标识,
                //注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenID
scope           //用户授权的作用域,使用逗号(,)分隔

四、获取微信用户基本信息

// 获取用户信息
Map<String,Object> userParams = new HashMap<String,Object>();

//用户针对公众号的唯一标识openid(加密后的微信号)
userParams .put("openid", wxToken.getString("openid"));

//返回国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语
userParams .put("lang", "zh_CN");

//调用接口凭证(上一步获取到的access_token)
userParams .put("access_token", wxToken.getString("access_token"));

//接口调用(该接口返回值可查阅微信公众平台开发文档)
String user = HttpUtil.get(" https://api.weixin.qq.com/sns/userinfo", userParams );

//转化为json对象
JSONObject wxUser = JSONObject.parseObject(user);

以上即“微信网页授权,获取微信用户信息”具体步骤,如有问题,欢迎留言!

展开阅读全文

没有更多推荐了,返回首页