微信授权自动登录

我们在写小程序微信授权的时候,微信有自己的内置浏览器,我们要先判断用户是否在微信客服端登录

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

你可能感兴趣的:(微信授权自动登录)