java网页授权获取用户基本信息_java实现微信公众号网页授权,获取用户基本信息...

1.网页授权回调

6c1ddd23a4365d5bc75873dbd132910b.png

2.网页授权的两种scope的区别

1)以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的open

2)以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。

3.网页授权流程分为四步

1)引导用户进入授权页面同意授权,获取code

//前端发请请求

created() {

this.axios.get('/wx/get_code?url=' + this.shareUrl).then((res) => {

if (res.code == 0) {

window.lo

scope等于snsapi_userinfo时的授权页面

4c2e0b35e70665cd1e1542eb3dbb606e.png

2)通过code换取网页授权access_token(与基础支持中的access_token不同)

/**

* 2.通过code换取网页授权access_token

*/

@RequestMapping(value = "/get_auth_access_token", method = RequestMethod.GET)

public void getAuthAccessToken(HttpServletRequest request, HttpServletResponse response, String code) throws

3)如果需要,

由于access_token拥有较短的有效期,当access_token超时后,可以使用refresh_token进行刷新,refresh_token有效期为30天,当refresh_token失效之后,需要用户重新授权。

4)通过网页授权access_token和openid获取用户基本信息(支持UnionID机制)

/**

* 2.通过code换取网页授权access_token

*/

@RequestMapping(value = "/get_auth_access_token", method = RequestMethod.GET)

public void getAuthAccessToken(HttpServletRequest request, HttpServletResponse response, String code) throws IOException {

String urlToken = "https://api.weixin.qq.com/sns/oauth2/access_token";

String accessTokenObj = HttpClientUtil.sendGet(urlToken, "appid=" + Constants.APPID + "&secret="

+ Constants.APPSECRET + "&code=" + code + "&grant_type=authorization_code");

JSONObject jsonToken = JSONObject.fromObject(accessTokenObj);

String openId = null;

String accessToken = null;

if (StringUtils.isNotBlank(String.valueOf(jsonToken))) {

openId = jsonToken.getString("openid");

accessToken = jsonToken.getString("access_token");

}

logger.info("openid={},access_token={}", openId, accessToken);

//3.拉取用户信息(需scope为 snsapi_userinfo)

String urlInfo = "https://api.weixin.qq.com/sns/userinfo";

String infoObj = HttpClientUtil.sendGet(urlInfo, "access_token=" + accessToken + "&openid=" + openId + "⟨=zh_CN");

JSONObject jsonUserInfo = JSONObject.fromObject(infoObj);

if (StringUtils.isNotBlank(String.valueOf(jsonUserInfo))) {

String nickName = jsonUserInfo.getString("nickname");

String headImgUrl = jsonUserInfo.getString("headimgurl");

String sex = jsonUserInfo.getString("sex");

response.sendRedirect("http://lyx1314520ll.w3.luyouxia.net/auth?nickName=" + nickName + "&headImgUrl=" + headImgUrl + "&sex=" + sex);

}

}

unionid 只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。

公众号通过微信网页授权机制后,重定向页面

f9ac15b15b6b2aff364138ba5c19cd3a.png

4.网页授权遇到的问题

1)redirect_uri

2)该链接无法访问,code:-1

code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期,重新获取就好

想要了解更多内容可以阅读微信

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值