如果进行第三方网站开发接入微信公众号,需要拿到用户的基本信息,此时就需要调用微信接口进行第三方授权拿到微信用户的基本信息。
一、微信公众号配置
二、微信菜单配置(或URL访问)(拉取用户授权页面)
三、获取授权后拿到的code,通过code换取网页授权access_token(调用微信接口)
四、获取微信用户基本信息(调用微信接口)
注意:微信公众平台可能会更新接口URL,具体URL与官方文档一致。
一、微信公众号配置
(正式公众号) “开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息”的配置选项中,修改授权回调域名。
(测试公众号)“网页服务 - 网页账号(网页授权获取用户基本信息)”进行修改回调域名。
配置以后此域名下面的页面都将可以访问
二、微信菜单配置(或URL访问)(拉取用户授权页面)
确保微信公众账号拥有授权作用域(scope参数)的权限的前提下,引导公众号关注者打开如下页面
(该URL接口参数顺序不可改变):
https://open.weixin.qq/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/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/sns/userinfo", userParams );
//转化为json对象
JSONObject wxUser = JSONObject.parseObject(user);
以上即“微信网页授权,获取微信用户信息”具体步骤,如有问题,欢迎留言!
更多推荐
微信网页授权,获取微信用户信息
发布评论