微信网页授权有什么作用呢?它可以用来做获取用户的openId ,可以采用网页授权登录,免除用户登录。主要是为了获取用户的信息。
网页授权开发的第一步是在微信公众平台配置授权的域名配置的域名要求(
、授权回调域名配置规范为全域名,比如需要网页授权的域名为:www.qq.com,配置以后此域名下面的页面http://www.qq.com/music.html 、 http://www.qq.com/login.html 都可以进行OAuth2.0鉴权。但http://pay.qq.com 、 http://music.qq.com 、 http://qq.com无法进行OAuth2.0鉴权)
配置完授权的域名接下来就是:
1、引导用户进入授权页面同意授权,获取code
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
这里需要注意的是redirect_uri 必须要用urlencode对链接进行处理 测试号不进行处理可以,正式号的话就不行。
redirect_url只可以传递一个参数如果要多个参数该怎么传递呢?多个参数lz是采用一个变量把所有的参数放到json里面当成一个参数:网站名字/weixin/WeiXinCommGetOpenId?weixin_outh2_params=WEIXIN_OUTH2_PARAMS
注意这个授权必须要在微信浏览器打开才可以
这里可以获取到code以及传过来的参数一个json字符串通过code可以获取用户的openId,授权也分为两种,静默授权和非静默授权。非静默授权除了可以获取用户的openid还可以获取用户的头像。昵称等。静默授权只能获取用户的openid
附上获取用户openid的方法
/**
*
* @Title: getUserInfoOpenId
* @Description: 获取请求用户信息的access_token
* @param @param code
* @param @return
* @return String
*/
public static String getUserInfoOpenId(String code) {
logger.info("getUserInfoOpenId params code"+code);
String openId= "";
try {
if(StringUtil.isNotEmpty(code)){
String url =WeiXinConstant.WEIXIN_ACCESS_TOKEN_URL.replace("APPID", APPID).replace("SECRET", APPSECRET).replace("CODE",code);
logger.info("request accessToken from url: {}", url);
String tokens= httpRequestGet(url, null);
logger.info("request tokens from tokens: {}", tokens);
if(StringUtil.isNotEmpty(tokens)){
JSONObject json = JSONObject.fromObject(tokens);
openId = json.getString("openid");
}
}
} catch (Exception ex) {
logger.error("fail to request wechat access token. [error={}]"+code, ex);
}
return openId;
}