package com.smtaiserver.smtaiserver.weixinLogin;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpUtil;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.smtaiserver.smtaiserver.core.SMTAIServerApp;
import com.smtservlet.util.Json;
import java.util.Map;
/**
* description: WeChatUtils 微信获取用户工具类
*
* @date: 2021/8/19 0019 上午 10:05
* @author: William
* version: 1.0
*/
public class WeChatUtils {
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
/**
* 获取微信accessToken路径
*/
private static final String GET_ACCESS_TOKEN_URL = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";
public WeChatUtils() throws Exception {
}
/**
* description: getAccessToken 根据code获取accessToken
* version: 1.0
*
* @param code 微信用户授权code
* @return java.util.Map
* @date: 2021/8/19 0019 上午 10:10
* @author: William
*/
public static Map getAccessToken(String code) throws Exception {
Json weixinAppidSecret = (Json) SMTAIServerApp.getApp().getGlobalConfig("weixin_appid_secret");
String appid = weixinAppidSecret.safeGetStr("appid", null);
String secret = weixinAppidSecret.safeGetStr("secret", null);
return getAccessToken(code, appid, secret);
}
/**
* description: getAccessToken 根据code获取微信用户信息,返回map如果正确map包含access_token ,如果错误则包含:errcode
* version: 1.0
*
* @param code 微信授权code
* @param appId 微信appId
* @param appSecret 微信appSecret
* @return java.util.Map
* @date: 2021/8/19 0019 上午 10:11
* @author: William
*/
public static Map getAccessToken(String code, String appId, String appSecret) throws Exception {
//判断所有字段不能为空
if (isAnyBlank(code, appId, appSecret)) {
throw new IllegalArgumentException("参数错误");
}
String requestUrl = GET_ACCESS_TOKEN_URL
.replace("APPID", appId)
.replace("SECRET", appSecret)
.replace("CODE", code);
String result = HttpUtil.get(requestUrl);
return parseMap(result);
}
/**
* description: isAnyBlank 判断是否存在空字符串,Hutool未编写
* version: 1.0
*
* @param strs 字符串
* @return java.lang.Boolean
* @date: 2021/8/19 0019 上午 10:25
* @author: William
*/
public static Boolean isAnyBlank(CharSequence... strs) {
//如果为空直接返回true
if (ArrayUtil.isEmpty(strs)) {
return true;
}
for (CharSequence str : strs) {
if (StrUtil.isBlank(str)) {
return true;
}
}
return false;
}
public static Map parseMap(String json) {
try {
return OBJECT_MAPPER.readValue(json, new TypeReference