微信网页授权

2019-08-02  本文已影响0人  Zn_go

微信网页授权文档地址:

https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842

微信网页授权步骤:
一、用户同意授权,获取code

注:公众号需要有授权作用域

url=https://open.weixin.qq.com/connect/oauth2/authorize?appid=公众号唯一标识&redirect_uri=回调地址&response_type=code&scope=授权作用域&state=STATE#wechat_redirect
参数解释

授权流程:
1.用户点击公众号菜单
调用链接url,用户在同意授权之后,回调地址将会拿到code
注:每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。
2.将code发送至第三方网页服务器(就是我们开发服务器的后端接口)

二、通过code,获取openid,获取用户基本信息

url=https://api.weixin.qq.com/sns/oauth2/access_token?appid=公众号唯一标识&secret=公众号的appsecret&code=第一步拿到的code&grant_type=authorization_code

后端拿到code之后,使用Spring RestTemplate类 进行请求
注:对于RestTemplate类的使用方法,请查看:
https://docs.spring.io/spring/docs/5.1.8.RELEASE/javadoc-api/

服务器后端处理code

// 注意替换appid、appsecret与code
String tokenURL = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=公众号唯一标识&secret=公众号的appsecret&code=第一步拿到的code&grant_type=authorization_code";
// 实例化RestTemplate对象
RestTemplate restTemplate = new RestTemplate();
// 调用RestTemplate对象的getForObject()方法,执行url请求,获得相应结果
String tokenResponse = restTemplate.getForObject(tokenURL, String.class);

请求结果详解:

// 请求结果样例(请求正确,将返回一个json字符串)
{
    "access_token":"ACCESS_TOKEN",
    "expires_in":7200,
    "refresh_token":"REFRESH_TOKEN",
    "openid":"OPENID",
    "scope":"SCOPE" 
 }
请求结果参数

此时拿到了access_token,可以进行用户信息的拉取

url=https://api.weixin.qq.com/sns/userinfo?access_token=获取的access_token&openid=获取的openid&lang=zh_CN

服务器后端请求获取用户信息

// 注意替换参数
String userinfoURL = "https://api.weixin.qq.com/sns/userinfo?access_token=获取的access_token&openid=获取的openid&lang=zh_CN";
// 调用RestTemplate对象的getForObject()方法,执行url请求,获得相应结果
String userinfoResponse = restTemplate.getForObject(userinfoURL, String.class);

请求结果详解:

// 请求结果样例(请求正确,将返回一个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"
}
请求结果参数

注:在获取用户信息的时候,微信使用ISO-8859-1编码,需要进行编码转化

// 注userinfoJson是将请求结果转化为JSONObject
String nickname = new String(userinfoJson.getString("nickname").getBytes("ISO-8859-1"), "UTF-8");

到此,网页授权结束

上一篇下一篇

猜你喜欢

热点阅读