官网地址:
官网提供的四个步骤
- 第一步:用户同意授权,获取code
- 第二步:通过code换取网页授权access_token
- 第三步:刷新access_token(如果需要)
- 第四步:拉取用户信息(需scope为 snsapi_userinfo)
- 附:检验授权凭证(access_token)是否有效
一、获取code
所需要的参数
授权效果
错误码的返回
二、获取access_token
第一步会获得一个微信返回的code,拿着这个CODE 还有APPID还有公钥往微信发送请求
// 1.调用getHTMLAccessToken | |
JSONObject htmlAccessToken = WeChatUtil.getHTMLAccessToken(code); | |
// 2.获取用户授权的微信地址 | |
public static final String GET_HTML_ACCESS_TOKEN = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code"; | |
/** java 项目 www.fhadmin.cn | |
* 3.根据code获取access_token | |
* @param code | |
* @return access_token,open_id | |
*/ | |
public static JSONObject getHTMLAccessToken(String code) { | |
String replace =GET_HTML_ACCESS_TOKEN.replace("APPID", WeChatResources.APPID).replace("SECRET", WeChatResources.APPSECRET).replace("CODE", code); | |
log.info("请求url:{}",replace); | |
JSONObject jsonObject = HttpUtil.doGet(replace); | |
return jsonObject; | |
} | |
/** | |
* 4.发送请求的doGET方法 | |
*/ | |
public static JSONObject doGet(String url) { | |
HttpClient httpClient = HttpClientBuilder.create().build(); | |
HttpGet get = new HttpGet(url); | |
JSONObject jsonObject = null; | |
try { | |
HttpResponse response = httpClient.execute(get); | |
HttpEntity entity = response.getEntity(); | |
if (null != entity) { | |
String result = EntityUtils.toString(entity); | |
jsonObject = JSONObject.fromObject(result); | |
} | |
} catch (IOException e) { | |
e.printStackTrace(); | |
} | |
return jsonObject; | |
} | |
// 5.方法响应成功后获取access_token和openid | |
Object access_token = htmlAccessToken.get("access_token"); | |
Object openid = htmlAccessToken.get("openid"); |
参数说明
返回参数说明
三、刷新access_token
- 由于access_token拥有较短的有效期,当access_token超时后,可以使用refresh_token进行刷新,refresh_token有效期为30天,当refresh_token失效之后,需要用户重新授权。
- 获取第二步的refresh_token后,请求以下链接获取access_token:
- 请求方式同步骤二 用 HttpUtil.doGet(replace)
参数说明
返回参数说明
四、拉取用户信息
//1.根据access_token,open_id获取用户信息 从而完成微信的授权登入 | |
JSONObject userInfo = WeChatUtil.getUserInfo(access_token, openid); | |
//2.获取用户信息 openid | |
public static final String GET_USER_INFO = "https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN"; | |
/**java 项目 www.fhadmin.cn | |
* 3.根据access_token,open_id获取用户信息 | |
* @return | |
*/ | |
public static JSONObject getUserInfo(Object access_token,Object open_id){ | |
String replace = GET_USER_INFO.replace("ACCESS_TOKEN", access_token.toString()).replace("OPENID", open_id.toString()); | |
JSONObject jsonObject = HttpUtil.doGet(replace); | |
return jsonObject; | |
} |
参数说明
返回参数说明
检验授权凭证(access_token)是否有效