You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

677 lines
29 KiB

package com.fr.plugin.utils;
import com.fanruan.api.log.LogKit;
import com.fanruan.api.net.http.HttpKit;
import com.fr.general.ComparatorUtils;
import com.fr.log.FineLoggerFactory;
import com.fr.plugin.dao.MyYiTuanDao;
import com.fr.plugin.entitys.YTYiTuanEntity;
import com.fr.plugin.yt.MyCoreDBAccess;
import com.fr.report.stable.fun.Actor;
import com.fr.stable.ActorConstants;
import com.fr.stable.ActorFactory;
import com.fr.stable.StringUtils;
import com.fr.stable.db.action.DBAction;
import com.fr.stable.db.dao.DAOContext;
import com.fr.stable.query.QueryFactory;
import com.fr.stable.query.restriction.RestrictionFactory;
import com.fr.third.guava.cache.*;
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.JsonNode;
import com.mashape.unirest.http.Unirest;
import org.json.JSONArray;
import org.json.JSONObject;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/**
* xx码API调用工具类
* Created by Shinelon on 2017/12/13.
*/
public class YiTuanMaUtils {
public final static String API_BASE_URL = "https://xxxx.cn/openapi/" ;
public final static String APP_TOKEN_URL = API_BASE_URL + "oauth/token" ;
public final static String APP_TICKET_URL = API_BASE_URL + "oauth/ticket" ;
public final static String APP_AUTHCODE_URL = API_BASE_URL + "oauth/authorize" ;
public final static String APP_AUTHUSERID_URL = API_BASE_URL + "user/get-user-ids?authCode=" ;
public final static String GET_ALLUSER_URL = API_BASE_URL + "group/members/" ;
public final static String APP_SENDMSG_URL = API_BASE_URL + "message/send-to-eapp" ;
public final static String APP_SENDMSG_TO_USER = API_BASE_URL + "message/send-to-users" ;
public final static String GROUP_SENDMSG_URL = API_BASE_URL + "message/send-to-group" ;
public final static String ACCOUNT_URL = "https://xxxx.cn/esenaccount/openapi/account" ;
public final static int SUCCESS_CODE = 200;
public final static int EXPIRE_CODE = 400;
public final static int ERROR_CODE = 401;
public final static int SYS_ERROR_CODE = 500;
public final static String APPLICATION_JSON_UTF8 = "application/json;charset=UTF-8" ;
/**
* token缓存,2小时有效期
*/
private static LoadingCache<String, String> tokenCache = CacheBuilder.newBuilder()
.expireAfterWrite(2, TimeUnit.HOURS)
.removalListener(new RemovalListener<String, String>() {
@Override
public void onRemoval(
RemovalNotification<String, String> notification) {
LogKit.debug(notification.getKey() + " was removed, cause is " + notification.getCause());
}
}).build(new CacheLoader<String, String>() {
@Override
public String load(String key) throws Exception {
return getAccessTokenFromAPI(key);
}
});
/**
* ticket缓存,10分钟有效期
*/
private static LoadingCache<String, String> ticketCache = CacheBuilder.newBuilder()
.expireAfterWrite(10, TimeUnit.MINUTES)
.removalListener(new RemovalListener<String, String>() {
@Override
public void onRemoval(
RemovalNotification<String, String> notification) {
LogKit.debug(notification.getKey() + " was removed, cause is " + notification.getCause());
}
}).build(new CacheLoader<String, String>() {
@Override
public String load(String key) throws Exception {
return getTicketFromAPI(key);
}
});
private static LoadingCache<String, String> testCache = CacheBuilder.newBuilder()
.expireAfterWrite(5, TimeUnit.SECONDS)
.removalListener(new RemovalListener<String, String>() {
@Override
public void onRemoval(RemovalNotification<String, String> notification) {
LogKit.debug(notification.getKey() + " was removed, cause is " + notification.getCause());
}
}).build(new CacheLoader<String, String>() {
@Override
public String load(String key) throws Exception {
return getTicketFromAPI(key);
}
});
/**
* post请求
*
* @param bodyJSON
* @param url
* @return
* @throws Exception
*/
private static HttpResponse<JsonNode> buildPostResponce(JSONObject bodyJSON, String url) throws Exception {
HttpResponse<JsonNode> jsonResponse = null;
jsonResponse = Unirest
.post(url)
.header("Content-Type" , APPLICATION_JSON_UTF8)
.body(bodyJSON.toString()).asJson();
return jsonResponse;
}
/**
* post请求(header处理)
*
* @param bodyJSON
* @param url
* @param access_token
* @return
* @throws Exception
*/
private static HttpResponse<JsonNode> buildPostResponceWithToken(JSONObject bodyJSON, String url, String access_token) throws Exception {
HttpResponse<JsonNode> jsonResponse = null;
jsonResponse = Unirest
.post(url)
.header("Content-Type" , APPLICATION_JSON_UTF8)
.header("Authorization" , getAuthorizationHeader(access_token))
.body(bodyJSON.toString()).asJson();
return jsonResponse;
}
/**
* get请求
*
* @param url
* @param access_token
* @return
* @throws Exception
*/
private static HttpResponse<JsonNode> buildGetResponceWithToken(String url, String access_token) throws Exception {
HttpResponse<JsonNode> jsonResponse = null;
jsonResponse = Unirest
.get(url)
.header("Content-Type" , APPLICATION_JSON_UTF8)
.header("Authorization" , getAuthorizationHeader(access_token))
.asJson();
return jsonResponse;
}
/**
* 获取缓存中的token
*
* @return
*/
public static String getAccessToken(String clientId) {
try {
String token = tokenCache.get(clientId);
if (StringUtils.isEmpty(token)) {
token = getAccessTokenFromAPI(clientId);
if (StringUtils.isNotBlank(token)) {
tokenCache.put(clientId, token);
}
}
return token;
} catch (Exception e) {
FineLoggerFactory.getLogger().debug("==================== 获取缓存access_token失败!");
}
return "" ;
}
/**
* 根据clientId以及clientSecret获取token
*
* @param clientId
* @param clientSecret
* @return
* @throws Exception
*/
public static String getAccessTokenFromConfig(String clientId, String clientSecret) throws Exception {
JSONObject jsonObject = new JSONObject();
jsonObject.put("clientId" , clientId);
jsonObject.put("clientSecret" , clientSecret);
HttpResponse<JsonNode> jsonResponse = buildPostResponce(jsonObject, APP_TOKEN_URL);
if (jsonResponse.getStatus() == SUCCESS_CODE) {
JsonNode jsonNode = jsonResponse.getBody();
return jsonNode.getObject().getString("access_token");
} else {
FineLoggerFactory.getLogger().debug("==================== 获取xx码access_token失败!");
FineLoggerFactory.getLogger().debug("==================== 获取xx码access_token失败! responseCode = " + jsonResponse.getStatus());
FineLoggerFactory.getLogger().debug("==================== responseBody = " + jsonResponse.getBody().toString());
}
return "" ;
}
/**
* 缓存build时专用,获取token
* todo 改成查询clientId
*
* @return
* @throws Exception
*/
public static String getAccessTokenFromAPI(String clientId) throws Exception {
// YiTuanMaManager manager = YiTuanMaManager.getInstance();
// return getAccessTokenFromConfig(manager.getClientId(), manager.getClientSecret());
YTYiTuanEntity entity = getYituanEntityByClientId(clientId);
if (entity != null) {
String secret = entity.getSecret();
return getAccessTokenFromConfig(clientId, secret);
}
return "" ;
}
public static YTYiTuanEntity getYituanEntityByClientId(String clientId) throws Exception {
List<YTYiTuanEntity> ytYiTuanEntities = MyCoreDBAccess.getAccessor().runQueryAction(new DBAction<List<YTYiTuanEntity>>() {
@Override
public List<YTYiTuanEntity> run(DAOContext daoContext) throws Exception {
return daoContext.getDAO(MyYiTuanDao.class).find(QueryFactory.create().addRestriction(RestrictionFactory.eq("clientId" , clientId)));
}
});
if (!ytYiTuanEntities.isEmpty()) {
return ytYiTuanEntities.get(0);
}
return null;
}
/**
* 获取缓存中的ticket
*
* @return
*/
public static String getTicket(String clientid) {
try {
String ticket = ticketCache.get(clientid);
if (StringUtils.isEmpty(ticket)) {
ticket = getTicketFromAPI(clientid);
ticketCache.put(clientid, ticket);
}
return ticket;
} catch (Exception e) {
FineLoggerFactory.getLogger().debug("==================== 获取缓存ticket失败!");
}
return "" ;
}
public static String refreshToken(String clientId) throws Exception {
String access_token = getAccessTokenFromAPI(clientId);
if (StringUtils.isNotBlank(access_token)) {
tokenCache.put(clientId, access_token);
}
return access_token;
}
/**
* 根据token获取ticket
*
* @param access_token
* @return
* @throws Exception
*/
public static String getTicketWithToken(String clientId, String access_token) throws Exception {
LogKit.debug("==================== :获取ticket token=" + access_token);
return getTicket4ThreeTimes(clientId, access_token, 0);
}
private static String getTicket4ThreeTimes(String clientId, String access_token, int count) throws Exception {
if (count < 3) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("accessToken" , access_token);
HttpResponse<JsonNode> jsonResponse = buildPostResponceWithToken(jsonObject, APP_TICKET_URL, access_token);
if (jsonResponse.getStatus() == SUCCESS_CODE) {
JsonNode jsonNode = jsonResponse.getBody();
return jsonNode.getObject().getString("ticket");
} else if (jsonResponse.getStatus() == EXPIRE_CODE || jsonResponse.getStatus() == ERROR_CODE) {
LogKit.debug("==================== 获取xx码ticket失败! token失效,重新获取");
access_token = refreshToken(clientId);
count++;
return getTicket4ThreeTimes(clientId, access_token, count);
} else {
FineLoggerFactory.getLogger().debug("==================== 获取xx码ticket失败!");
FineLoggerFactory.getLogger().debug("==================== 获取xx码ticket失败! responseCode = " + jsonResponse.getStatus());
FineLoggerFactory.getLogger().debug("==================== responseBody = " + jsonResponse.getBody().toString());
return "" ;
}
} else {
FineLoggerFactory.getLogger().debug("==================== 3次获取xx码ticket失败!");
return "" ;
}
}
/**
* 缓存build时专用,获取ticket
*
* @return
* @throws Exception
*/
public static String getTicketFromAPI(String clientId) throws Exception {
String access_token = getAccessToken(clientId);
if (StringUtils.isNotEmpty(access_token)) {
return getTicketWithToken(clientId, access_token);
}
return "" ;
}
/**
* 获取authCode,已弃
*
* @param ticket
* @param access_token
* @return
* @throws Exception
*/
public static String getAuthCode(String ticket, String access_token) throws Exception {
LogKit.debug("==================== :获取authCode token=" + access_token);
JSONObject jsonObject = new JSONObject();
jsonObject.put("ticket" , ticket);
HttpResponse<JsonNode> jsonResponse = buildPostResponceWithToken(jsonObject, APP_AUTHCODE_URL, access_token);
if (jsonResponse.getStatus() == SUCCESS_CODE) {
JsonNode jsonNode = jsonResponse.getBody();
return jsonNode.getObject().getString("authCode");
} else {
FineLoggerFactory.getLogger().debug("==================== 获取xx码authCode失败!");
FineLoggerFactory.getLogger().debug("==================== 获取xx码authCode失败! responseCode = " + jsonResponse.getStatus());
FineLoggerFactory.getLogger().debug("==================== responseBody = " + jsonResponse.getBody().toString());
}
return null;
}
/**
* 获取当前xx码用户id
*
* @param authCode
* @param access_token
* @return
* @throws Exception
*/
public static String getCurrentUserId(String clientId, String authCode, String access_token) throws Exception {
LogKit.debug("==================== :获取当前xx码用户id token=" + access_token);
return getCurrentUserId4ThreeTimes(clientId, authCode, access_token, 0);
}
private static String getCurrentUserId4ThreeTimes(String clientId, String authCode, String access_token, int count) throws Exception {
if (count < 3) {
HttpResponse<JsonNode> jsonResponse = buildGetResponceWithToken(APP_AUTHUSERID_URL + authCode, access_token);
if (jsonResponse.getStatus() == SUCCESS_CODE) {
JsonNode jsonNode = jsonResponse.getBody();
return jsonNode.getObject().getString("userId");
} else if (jsonResponse.getStatus() == EXPIRE_CODE || jsonResponse.getStatus() == ERROR_CODE) {
LogKit.debug("==================== 获取xx码用户ID失败! token失效,重新获取");
access_token = refreshToken(clientId);
count++;
return getCurrentUserId4ThreeTimes(clientId, authCode, access_token, count);
} else {
FineLoggerFactory.getLogger().debug("==================== 获取xx码用户ID失败!");
FineLoggerFactory.getLogger().debug("==================== 获取xx码用户ID失败! responseCode = " + jsonResponse.getStatus());
FineLoggerFactory.getLogger().debug("==================== responseBody = " + jsonResponse.getBody().toString());
return null;
}
} else {
FineLoggerFactory.getLogger().debug("==================== 3次获取xx码用户ID失败!");
return null;
}
}
/**
* 获取团队id,已弃
*
* @param authCode
* @param access_token
* @return
* @throws Exception
*/
public static String getGroupId(String authCode, String access_token) throws Exception {
LogKit.debug("==================== :获取团队id token=" + access_token);
HttpResponse<JsonNode> jsonResponse = buildGetResponceWithToken(APP_AUTHUSERID_URL + authCode, access_token);
if (jsonResponse.getStatus() == SUCCESS_CODE) {
JsonNode jsonNode = jsonResponse.getBody();
return jsonNode.getObject().getString("tenantId");
} else {
FineLoggerFactory.getLogger().debug("==================== 获取BI团队ID失败!");
FineLoggerFactory.getLogger().debug("==================== 获取BI团队ID失败! responseCode = " + jsonResponse.getStatus());
FineLoggerFactory.getLogger().debug("==================== responseBody = " + jsonResponse.getBody().toString());
}
return null;
}
/**
* 获取团队下所有用户
*
* @param access_token
* @return
* @throws Exception
*/
public static JSONArray getUserInfo(String clientId, String access_token) throws Exception {
YTYiTuanEntity tuanEntity = getYituanEntityByClientId(clientId);
if (tuanEntity != null) {
String groupId = tuanEntity.getGroupId();
return getUserInfo4ThreeTimes(clientId, groupId, access_token, 0);
}
LogKit.error("同步 client ID : {} 无法获取到对应的配置" , clientId);
return new JSONArray();
}
private static JSONArray getUserInfo4ThreeTimes(String clientId, String groupId, String access_token, int count) throws Exception {
if (count < 3) {
HttpResponse<JsonNode> jsonResponse = buildGetResponceWithToken(GET_ALLUSER_URL + groupId, access_token);
if (jsonResponse.getStatus() == SUCCESS_CODE) {
JsonNode jsonNode = jsonResponse.getBody();
return jsonNode.getObject().getJSONArray("members");
} else if (jsonResponse.getStatus() == EXPIRE_CODE || jsonResponse.getStatus() == ERROR_CODE) {
LogKit.debug("==================== 获取xx码团队所有用户失败! token失效,重新获取");
access_token = refreshToken(clientId);
count++;
return getUserInfo4ThreeTimes(clientId, groupId, access_token, count);
} else {
FineLoggerFactory.getLogger().debug("==================== 获取xx码团队所有用户失败!");
FineLoggerFactory.getLogger().debug("==================== 获取xx码团队所有用户失败! responseCode = " + jsonResponse.getStatus());
FineLoggerFactory.getLogger().debug("==================== responseBody = " + jsonResponse.getBody().toString());
return null;
}
} else {
FineLoggerFactory.getLogger().debug("==================== 3次获取xx码团队所有用户失败!");
return null;
}
}
/**
* build请求header
*
* @param access_token
* @return
*/
private static String getAuthorizationHeader(String access_token) {
String authorization = "Bearer " + access_token;
return authorization;
}
/**
* 兼容旧报表h5插件
*
* @return
*/
public static String getCprOP() {
//兼容老的h5插件
Actor newH5Actor = ActorFactory.getActor("h5");
if (newH5Actor == null || ComparatorUtils.equalsIgnoreCase(ActorFactory.getType(newH5Actor), ActorConstants.TYPE_PAGE)) {
return "h5_page" ;
}
return "h5" ;
}
/**
* 消息发送接口message实体拼接
*
* @param title
* @param content
* @param linkUrl
* @return
* @throws Exception
*/
private static JSONObject buildMessage(String title, String content, String linkUrl, String image) throws Exception {
JSONObject message = new JSONObject();
message.put("content" , content);
if (StringUtils.isNotEmpty(linkUrl)) {
message.put("linkUrl" , linkUrl);
}
message.put("msgType" , "TEXT");
message.put("appletName" , "BI平台");
YiTuanMaManager manager = YiTuanMaManager.getInstance();
String logourl = manager.getUrl() + "/url/ytlogo";
// String logourl = manager.getUrl() + "/resources?path=com/fr/plugin/web/images/log.jpg" ;
message.put("appletLogoUrl" , logourl);
message.put("avatar" , logourl);
message.put("msgType" , "TEXT");
message.put("msgType" , "TEXT");
message.put("imageUrl" , image);
message.put("title" , StringUtils.isNotEmpty(title) ? title : "BI消息推送");
return message;
}
/**
* 发送应用消息
*
* @param access_token
* @param eappId
* @param targetIds
* @param title
* @param content
* @param linkUrl
* @throws Exception
*/
public static void sendMsgToUserFromAppWithToken(String clientId, String access_token, String eappId, List<String> targetIds, String title, String content, String linkUrl, String imageUrl) throws Exception {
LogKit.debug("ASP ==================== :发送应用消息clientId:{} token={}" , clientId, access_token);
JSONObject jsonObject = new JSONObject();
jsonObject.put("eappId" , eappId);
jsonObject.put("appId" , eappId);
jsonObject.put("targetIds" , targetIds);
jsonObject.put("message" , buildMessage(title, content, linkUrl, imageUrl));
LogKit.debug("==================== 消息内容为:" + jsonObject.toString());
sendMsgToUserFromAppWithToken4ThreeTimes(clientId, jsonObject, access_token, 0);
}
private static void sendMsgToUserFromAppWithToken4ThreeTimes(String clientId, JSONObject jsonObject, String access_token, int count) throws Exception {
if (count < 3) {
HttpResponse<JsonNode> jsonResponse = buildPostResponceWithToken(jsonObject, APP_SENDMSG_URL, access_token);
if (jsonResponse.getStatus() == SUCCESS_CODE) {
LogKit.debug("==================== 发送应用消息成功!");
LogKit.debug("==================== 响应{}" , jsonResponse.getBody());
} else if (jsonResponse.getStatus() == EXPIRE_CODE || jsonResponse.getStatus() == ERROR_CODE) {
LogKit.debug("==================== 发送应用消息失败! token失效,重新获取:{}",jsonResponse.getBody());
access_token = refreshToken(clientId);
count++;
sendMsgToUserFromAppWithToken4ThreeTimes(clientId, jsonObject, access_token, count);
} else {
FineLoggerFactory.getLogger().debug("==================== 发送应用消息失败!");
FineLoggerFactory.getLogger().debug("==================== 发送应用消息失败! responseCode = " + jsonResponse.getStatus());
FineLoggerFactory.getLogger().debug("==================== responseBody = " + jsonResponse.getBody().toString());
}
} else {
FineLoggerFactory.getLogger().debug("==================== 3次发送应用消息失败!");
}
}
/**
* 发送应用消息
*
* @param targetIds
* @param title
* @param content
* @param linkUrl
* @throws Exception
*/
public static void sendMsgToUserFromApp(String clientId, List<String> targetIds, String title, String content, String linkUrl, String imageUrl) throws Exception {
YTYiTuanEntity entity = getYituanEntityByClientId(clientId);
if (entity != null) {
LogKit.debug("发送请求到clientId {} 团队ID:{}" , clientId, entity.getTeamId());
sendMsgToUserFromAppWithToken(clientId, getAccessToken(clientId), entity.getTeamId(), targetIds, title, content, linkUrl, imageUrl);
} else {
LogKit.debug("发送请求到clientId 未能找到?????" , clientId);
}
}
/**
* 发送用户信息
*
* @param targetIds
* @param title
* @param content
* @param linkUrl
* @throws Exception
*/
public static void sendMSGtoUser(String clientId, String fromUserId, List<String> targetIds, String title, String content, String linkUrl, String imageUrl) throws Exception {
JSONObject params = new JSONObject();
params.put("fromUserId" , fromUserId);
JSONObject message = buildMessage(title, content, linkUrl, imageUrl);
params.put("message" , message);
JSONArray targets = new JSONArray();
for (String targetId : targetIds) {
targets.put(targetId);
}
params.put("targetIds" , targets);
sendMSGtoUserWithToken(clientId, params, getAccessToken(clientId), 0);
}
private static void sendMSGtoUserWithToken(String clientId, JSONObject jsonObject, String access_token, int count) throws Exception {
if (count < 3) {
HttpResponse<JsonNode> jsonResponse = buildPostResponceWithToken(jsonObject, APP_SENDMSG_TO_USER, access_token);
if (jsonResponse.getStatus() == SUCCESS_CODE) {
LogKit.debug("==================== 发送个人成功!");
} else if (jsonResponse.getStatus() == EXPIRE_CODE || jsonResponse.getStatus() == ERROR_CODE) {
LogKit.debug("==================== 发送个人! token失效,重新获取");
access_token = refreshToken(clientId);
count++;
sendMSGtoUserWithToken(clientId, jsonObject, access_token, count);
} else {
FineLoggerFactory.getLogger().debug("==================== 发送个人失败!");
FineLoggerFactory.getLogger().debug("==================== 发送个人失败! responseCode = " + jsonResponse.getStatus());
FineLoggerFactory.getLogger().debug("==================== responseBody = " + jsonResponse.getBody().toString());
}
} else {
FineLoggerFactory.getLogger().debug("==================== 3次个人失败!");
}
}
/**
* 发送聊天群消息
*
* @param access_token
* @param groupId
* @param fromUserId
* @param title
* @param content
* @param linkUrl
* @throws Exception
*/
public static void sendMsgToGroupWithToken(String clientId, String access_token, String groupId, String fromUserId, String title, String content, String linkUrl, String image) throws Exception {
LogKit.debug("==================== :发送聊天群消息 token=" + access_token);
JSONObject jsonObject = new JSONObject();
jsonObject.put("groupId" , groupId);
jsonObject.put("fromUserId" , fromUserId);
jsonObject.put("message" , buildMessage(title, content, linkUrl, image));
LogKit.debug("==================== 消息内容为:" + jsonObject.toString());
sendMsgToGroupWithToken4ThreeTimes(clientId, jsonObject, access_token, 0);
}
private static void sendMsgToGroupWithToken4ThreeTimes(String clientId, JSONObject jsonObject, String access_token, int count) throws Exception {
if (count < 3) {
HttpResponse<JsonNode> jsonResponse = buildPostResponceWithToken(jsonObject, GROUP_SENDMSG_URL, access_token);
if (jsonResponse.getStatus() == SUCCESS_CODE) {
LogKit.debug("==================== 发送聊天群消息成功!");
} else if (jsonResponse.getStatus() == EXPIRE_CODE || jsonResponse.getStatus() == ERROR_CODE) {
LogKit.debug("==================== 发送聊天群消息失败! token失效,重新获取");
access_token = refreshToken(clientId);
count++;
sendMsgToGroupWithToken4ThreeTimes(clientId, jsonObject, access_token, count);
} else {
FineLoggerFactory.getLogger().debug("==================== 发送聊天群消息失败!");
FineLoggerFactory.getLogger().debug("==================== 发送聊天群消息失败! responseCode = " + jsonResponse.getStatus());
FineLoggerFactory.getLogger().debug("==================== responseBody = " + jsonResponse.getBody().toString());
}
} else {
FineLoggerFactory.getLogger().debug("==================== 3次发送聊天群消息失败!");
}
}
/**
* 发送聊天群消息
*
* @param groupId
* @param fromUserId
* @param title
* @param content
* @param linkUrl
* @throws Exception
*/
public static void sendMsgToGroup(String clientId, String groupId, String fromUserId, String title, String content, String linkUrl, String image) throws Exception {
sendMsgToGroupWithToken(clientId, getAccessToken(clientId), groupId, fromUserId, title, content, linkUrl, image);
}
/**
* 发送公告号消息,未实现
*
* @param pubOrGroupId
* @param userIds
* @param title
* @param content
* @param url
* @throws Exception
*/
public static void sendMsgToUserFromPublicNum(String pubOrGroupId, List<String> userIds, String title, String content, String url) throws Exception {
LogKit.debug("==================== 发送公告号消息未实现!");
FineLoggerFactory.getLogger().warn("==================== 发送公告号消息未实现!");
}
public static String getUserInfoByAccessToken(String accessToken) throws IOException {
String url = ACCOUNT_URL;
Map<String, String> headers = new HashMap<>();
headers.put("Authorization" , "Bearer " + accessToken);
headers.put("Content-Type" , "application/json; charset=utf-8");
String resp = HttpKit.get(url, new HashMap<>(), headers);
LogKit.error("==================== 获取用户信息返回结果ByAccessToken:" + resp);
com.fr.json.JSONObject jsonObject = new com.fr.json.JSONObject(resp);
return jsonObject.getString("id");
}
}