我们在写小程序微信授权的时候,微信有自己的内置浏览器,我们要先判断用户是否在微信客服端登录
String ua = request.getHeader("User-Agent");判断ua里是否有MicroMessenger字符串,ua.contains("MicroMessenger")
微信的授权有两种方式,一种是静默授权snsapi_base为scope,用户为感知,只能获取用户的openid。
另一种是scope为snsapi_userinfo需要用户同意才行,因为这里介绍的是开发微信的公众号授权,用户已经关注,所以也是为感知的。
第一步,获取用户的code
向网址https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_userinfo&state=#wechat_redirect发送一个get请求,然后会返回code.
第二步。通过code换取acesstoken
向网址https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code发送get请求,把获取到的code带上。
第三步,刷新acesstoken
向网址https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN发送一个get请求,把过期的acesstoken带上。
如何判断acesstoken过期,
java是面向对象的,所以我们创建一个实体类为accesstoken,然后在第二步获取到acesstoken的时候转换为实体类对象,然后在它的构造方法中来计算时间。
第四步,拉取用户的信息、
向网址https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN发送一个get请求,返回的是一个JSON数据。
{ "openid":" OPENID",
" nickname": NICKNAME,
"sex":"1",
"province":"PROVINCE"
"city":"CITY",
"country":"COUNTRY",
"headimgurl": "http://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46",
"privilege":[ "PRIVILEGE1" "PRIVILEGE2" ],
"unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
}
以上就是微信端授权过程,下面附上微信开发文档的地址
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432