环信获得token的代码
代码片
代码片
public class HuanXinTokenService {
private static final ObjectMapper MAPPER = new ObjectMapper();
@Autowired
private HuanXinConfig huanXinConfig;
@Autowired
private RestTemplate restTemplate;
public static final String REDIS_KEY = "HX_TOKEN";
@Autowired
private RedisTemplate<String, String> redisTemplate;
private String refreshToken() {
String targetUrl = huanXinConfig.getUrl() + huanXinConfig.getOrgName() + "/" + huanXinConfig.getAppName() + "/token";
Map<String, String> param = new HashMap<>();
param.put("grant_type", "client_credentials");
param.put("client_id", huanXinConfig.getClientId());
param.put("client_secret", huanXinConfig.getClientSecret());
//请求环信接口
ResponseEntity<String> responseEntity =
restTemplate.postForEntity(targetUrl, param, String.class);
if (responseEntity.getStatusCodeValue() != 200) {
return null;
}
String body = responseEntity.getBody();
try {
// 转换为json对象
JsonNode jsonNode = MAPPER.readTree(body);
String accessToken = jsonNode.get("access_token").asText();
if (StringUtils.isNotBlank(accessToken)) {
// 将token保存到redis,有效期为5天,环信接口返回的有效期为6天
redisTemplate.opsForValue().set(REDIS_KEY, accessToken, Duration.ofDays(5));
return accessToken;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public String getToken() {
String token = redisTemplate.opsForValue().get(REDIS_KEY);
if (StringUtils.isBlank(token)) {
return this.refreshToken();
}
return token;
}
}
-
配置文件huanxin:properties
-
tanhua.huanxin.url=http://a1.easemob.com/
tanhua.huanxin.orgName=xxxxxxxxxxx
tanhua.huanxin.appName=xxxxxxxxxxx
tanhua.huanxin.clientId=xxxxxxxxxxx
tanhua.huanxin.clientSecret=xxxxxxxxxxx
其他环信代码
。
@Service
public class HuanXinService {
private static final ObjectMapper MAPPER = new ObjectMapper();
@Autowired
private HuanXinTokenService huanXinTokenService;
@Autowired
private RestTemplate restTemplate;
@Autowired
private HuanXinConfig huanXinConfig;
/**
* 注册环信用户
*/
public boolean register(Long userId) {
String targetUrl = this.huanXinConfig.getUrl()
+ this.huanXinConfig.getOrgName() + "/"
+ this.huanXinConfig.getAppName() + "/users";
String token = this.huanXinTokenService.getToken();
try {
// 请求体
HuanXinUser huanXinUser = new HuanXinUser(String.valueOf(userId), DigestUtils.md5Hex(userId + "_itcast_tanhua"));
String body = MAPPER.writeValueAsString(Arrays.asList(huanXinUser));
// 请求头
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/json");
headers.add("Authorization", "Bearer " + token);
HttpEntity<String> httpEntity = new HttpEntity<>(body, headers);
ResponseEntity<String> responseEntity = restTemplate.postForEntity(targetUrl, httpEntity, String.class);
return responseEntity.getStatusCodeValue() == 200;
} catch (Exception e) {
e.printStackTrace();
}
// 注册失败
return false;
}
/**
* 环信添加好友
*/
public boolean contactUsers(Long userId, Long friendId) {
String targetUrl = this.huanXinConfig.getUrl()
+ this.huanXinConfig.getOrgName() + "/"
+ this.huanXinConfig.getAppName() + "/users/" +
userId + "/contacts/users/" + friendId;
try {
String token = this.huanXinTokenService.getToken();
// 请求头
HttpHeaders headers = new HttpHeaders();
headers.add("Authorization", "Bearer " + token);
HttpEntity<String> httpEntity = new HttpEntity<>(headers);
ResponseEntity<String> responseEntity = restTemplate.postForEntity(targetUrl, httpEntity, String.class);
return responseEntity.getStatusCodeValue() == 200;
} catch (Exception e) {
e.printStackTrace();
}
// 添加失败
return false;
}
// 发送系统消息
public boolean sendMsg(String target, String type, String msg) {
String targetUrl = this.huanXinConfig.getUrl()
+ this.huanXinConfig.getOrgName() + "/"
+ this.huanXinConfig.getAppName() + "/messages";
try {
String token = this.huanXinTokenService.getToken();
// 请求头
HttpHeaders headers = new HttpHeaders();
headers.add("Authorization", "Bearer " + token);
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("target_type", "users");
paramMap.put("target", Arrays.asList(target));
Map<String, Object> msgMap = new HashMap<>();
msgMap.put("type", type);
msgMap.put("msg", msg);
paramMap.put("msg", msgMap);
//表示消息发送者;无此字段Server会默认设置为“from”:“admin”,有from字段但值为空串(“”)时请求失败
// msgMap.put("from", type);
HttpEntity<String> httpEntity = new HttpEntity<>(MAPPER.writeValueAsString(paramMap), headers);
ResponseEntity<String> responseEntity = this.restTemplate.postForEntity(targetUrl, httpEntity, String.class);
return responseEntity.getStatusCodeValue() == 200;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
}
配置类
@Configuration
@PropertySource("classpath:huanxin.properties")
@ConfigurationProperties(prefix = "tanhua.huanxin")
@Data
public class HuanXinConfig {
private String url;
private String orgName;
private String appName;
private String clientId;
private String clientSecret;
}