//环信代码

/**

  • 环信工具类
    */
    @Configuration
    public class HXUtil {
    private static RestTemplate restTemplate = new RestTemplate();

    private static final Logger logger = LoggerFactory.getLogger(HXUtil.class);

    // 对应环信平台Orgname
    private static final String ORG_NAME = “”;
    // 对应环信平台Client ID
    private static final String CLIENT_ID = “”;
    // 对应环信平台Client Secret
    private static final String CLIENT_SECRET = “”;
    // 对应环信平台appname
    private static final String APP_NAME = “”;
    // 链接前缀
    private static final String URL_PREFIX = “http://a1.easemob.com/” + ORG_NAME + “/” + APP_NAME + “/”;

    private Token token;

    public enum HXMessageType {
    txt,// 文本
    img,// 图片
    loc,// 位置
    audio,// 音频
    video,// 视频
    file// 文件
    }

    /**

    • 获取Token
    • token存在时间为7天,可以将token存入redis
    • @return token
      */
      public Token getToken() {
      JSONObject body = new JSONObject();
      body.put(“grant_type”, “client_credentials”);
      body.put(“client_id”, CLIENT_ID );
      body.put(“client_secret”, CLIENT_SECRET );
      HttpEntity httpEntity = new HttpEntity(body.toString(), null);
      ResponseEntity tokenResponseEntity = restTemplate.postForEntity(URL_PREFIX + “token”, httpEntity, Token.class);
      token = tokenResponseEntity.getBody();
      HttpStatus statusCode = tokenResponseEntity.getStatusCode();
      token.setStatusCode(statusCode.value());
      if(statusCode.value()==200){
      return token;
      }else {
      return null;
      }

    }

    /**

    • 添加用户
    • @param username 用户名(唯一非空)
    • @param password 密码
    • @return 是否成功
      */
      public Boolean addUser(String username, String password,String token) {
      try {
      JSONArray body = new JSONArray();
      JSONObject jsonObject = new JSONObject();
      jsonObject.put(“username”, username);
      jsonObject.put(“password”, password);
      body.add(jsonObject);
      HttpHeaders headers = new HttpHeaders();
      //设置
      headers.add(“Authorization”, "Bearer " + token);
      headers.setContentType(MediaType.APPLICATION_JSON);
      headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
      //通过token授权添加用户
      HttpEntity httpEntity = new HttpEntity(body.toString(), getHttpHeaders(MediaType.APPLICATION_JSON, MediaType.APPLICATION_JSON));
      ResponseEntity responseEntity = restTemplate.postForEntity(URL_PREFIX + “users”, httpEntity, null);
      System.out.println(responseEntity.getStatusCodeValue());
      return responseEntity.getStatusCodeValue() == 200;
      } catch (RestClientException e) {
      e.printStackTrace();
      return false;
      }
      }

    /**

    • 设置用户属性

    */
    public Boolean setUserMeta(UserDto userDto, String userName, String token) {
    try {
    MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
    map.add(“nickname”,CodeTransition.resolveToEmojiFromByte(userDto.getNickname()));
    map.add(“phone”,userDto.getPhone());
    map.add(“avatarurl”,StringUtils.isEmpty(userDto.getHeadImg())?“”:userDto.getHeadImg());

        HttpHeaders headers = new HttpHeaders();//设置headers.add("Authorization", "Bearer " + token);headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));//通过token授权设置用户属性HttpEntity httpEntity = new HttpEntity(map, headers);JSONObject responseEntity = restTemplate.exchange(URL_PREFIX + "metadata/user/"+userName, HttpMethod.PUT, httpEntity,JSONObject.class).getBody();logger.info("修改用户属性成功,返回接口为{},用户ID{},用户属性{}", responseEntity, userDto, userDto);return true;
    } catch (RestClientException e) {e.printStackTrace();return false;
    }
    

    }

    /**

    • 发送消息
    • @param sendUser 发送用户
    • @param targetUser 接收用户
    • @param msg 发送消息
    • @return 是否成功
      */
      public Boolean sendToUser(String sendUser, String targetUser, String msg) {
      try {
      JSONObject body = new JSONObject();
      body.put(“target_type”, “users”);
      JSONArray targetUserjson = new JSONArray();
      targetUserjson.add(targetUser);
      body.put(“target”, targetUserjson);
      JSONObject msgJson = new JSONObject();
      msgJson.put(“type”, HXMessageType.txt.name());
      msgJson.put(“msg”, msg);
      body.put(“msg”, msgJson);
      body.put(“from”, sendUser);
      HttpEntity httpEntity = new HttpEntity(body, getHttpHeaders(MediaType.APPLICATION_JSON, MediaType.APPLICATION_JSON));
      ResponseEntity responseEntity = restTemplate.postForEntity(URL_PREFIX + “messages”, httpEntity, null);
      System.out.println(responseEntity.getStatusCodeValue());
      return responseEntity.getStatusCodeValue() == 200;
      } catch (RestClientException e) {
      e.printStackTrace();
      return false;
      }
      }

    /**

    • 获取HttpHeaders
    • @param contentType 客户端发送类型
    • @param accept 响应类型
    • @return HttpHeaders
      */
      private HttpHeaders getHttpHeaders(MediaType contentType, MediaType… accept) {
      HttpHeaders headers = new HttpHeaders();
      //设置
      headers.add(“Authorization”, "Bearer " + getToken().getAccess_token());
      headers.setContentType(contentType != null ? contentType : MediaType.APPLICATION_JSON);
      headers.setAccept(Arrays.asList((accept != null && accept.length > 0) ? accept : new MediaType[]{MediaType.APPLICATION_JSON}));
      return headers;
      }

}

@Service
public class HxService {

private static final Logger logger = LoggerFactory.getLogger(HxService.class);@Autowired
private RedisTemplate<String, String> redisTemplate;public String addHXUser(String username) {HXUtil hxUtil=new HXUtil();Token token2 ;//判断redis中是否存在tokenString hxToken = redisTemplate.opsForValue().get("hxToken");if (!StringUtils.isEmpty(hxToken)){//存在就获取token//String token1 = jedisClientPool.get("token");//判断前端传入token是否和后端token一致/*if (token1.equals(token)){//通过token授权注册环信用户Boolean aBoolean = hxUtil.addUser(username, password,token);}else {//不一致重新更新tokentoken2= hxUtil.getToken();redisTemplate.opsForValue().set("token",token2.getAccess_token());}*/Boolean aBoolean = hxUtil.addUser(username, "123456",hxToken);if(aBoolean){logger.info("---------------------------添加数据成功-----------------------");}else{logger.info("---------------------------环信数据已添加-----------------------");}}else {//token不存在获取tokentoken2 = hxUtil.getToken();redisTemplate.opsForValue().set("hxToken",token2.getAccess_token());//获取tokenhxToken = redisTemplate.opsForValue().get("hxToken");//通过token授权注册用户Boolean aBoolean = hxUtil.addUser(username, "123456",hxToken);if(aBoolean){logger.info("---------------------------添加数据成功-----------------------");}else{logger.info("---------------------------环信数据已添加-----------------------");}}return hxToken;
}public String setHxUserMeta(UserDto userDto) {HXUtil hxUtil = new HXUtil();Token token2 ;//判断redis中是否存在tokenString hxToken = redisTemplate.opsForValue().get("hxToken");if (!StringUtils.isEmpty(hxToken)){Boolean aBoolean = hxUtil.setUserMeta(userDto, String.valueOf(userDto.getId()),hxToken);if(aBoolean){logger.info("---------------------------设置用户属性成功-----------------------");}}else {//token不存在获取tokentoken2 = hxUtil.getToken();redisTemplate.opsForValue().set("hxToken",token2.getAccess_token());//获取tokenhxToken = redisTemplate.opsForValue().get("hxToken");//通过token授权注册用户Boolean aBoolean = hxUtil.setUserMeta(userDto, String.valueOf(userDto.getId()),hxToken);if(aBoolean){logger.info("---------------------------设置用户属性成功-----------------------");}}return hxToken;
}

}

java环信后端接口相关推荐

  1. java环信聊天记录保存到数据库实体

    发现环信的根据时间条件拉取历史消息接口已经停用,就做了个通过导出聊天记录接口保存到数据库实体的功能,分享一下. 大致的思路: 1.通过环信的接口,把前一天24小时的数据压缩包下载到本地 2.把下载后的 ...

  2. java短信发送接口代码示例demo分享

    适用类型:适用于各类办公系统.ERP.CRM.电子商务平台的插件(如网站app短信验证码.群发短信会议通知.会员/客户关系交流.订单生成通知.发货通知.日程提醒.催费通知等等) 接 口特 点: 绿色短 ...

  3. JAVA 短信API接口调用 附 文档 Demo

    JAVA 短信API接口调用 附 文档 Demo 1.请求地址 http://host:port/sms 请求方式可以 POST 和 GET方式,建议采用POST方式 2.参数说明 参数需要 URLE ...

  4. java 环信 rest api_[huanxin-sdk] 环信 Rest Api Node sdk

    The node sdk of Huanxin Rest API for high performance 详细用法请移步:test/,建议使用 redis 存储token 'use strict'; ...

  5. java短信发送接口开发

    发送短信验证码几乎是现在每个网站都要使用到的一个功能,如注册的时候要发送短息验证码,修改密码的时候也要发送.但是第三方提供给我们的接口只是一个方法而已,并没有提供给我们更多的一个良好,可读性强的接口, ...

  6. java通达信交易接口源码分享

    如果大家想自己制作通信达接口,当然可以自行在网上找通信达源码,而且网上也有很多,下面小编就可以直接给大家一套用java语言写的源码了. import java.awt.Button; import j ...

  7. 环信 java接口实例_java调用环信接口

    现在需要实现app中消息禁言功能?需要调用环信的接口,已经有文档了,但是不知道怎么调用?不清楚怎么将环信的接口继承到java代码中?请大家多多指教. 添加禁言 将一个用户禁言.用户被禁言后,将无法在群 ...

  8. 基于环信接口,开发Web版的即时通讯

    最近做项目时需要实现在线聊天的功能,所以借助环信的平台来快速开发 集成环信的主要步骤 1 注册开发者账号 2 服务器端的集成 3 客户端集成 环信WebIM的demo 点击下载 在运行demo的时候需 ...

  9. 七(6)环信-用户体系集成-联系人管理

    课程总结 1.即时通信 环信通信 执行过程 2.用户体系集成 用户注册时分配环信账号 客户端获取环信账号,自动登录环信服务器 3.联系人业务处理 好友申请 查看联系人列表 一. 即时通信-环信介绍 1 ...

最新文章

  1. [安卓] 12、开源一个基于SurfaceView的飞行射击类小游戏
  2. gradle构建android项目
  3. php redis support,PHP 使用 Redis
  4. “天才”少年!4位90后摘得全球顶尖数学大奖,90%获奖者不满30岁
  5. IOS基础:ActionSheet(上拉菜单)的实现
  6. 创建存储过程向表中循环加入数据
  7. PHP的的指针的特性
  8. Charles的iOS应用程序
  9. 如何解决Please ensure that adb is correctly located at......
  10. Thinkpad X230 黑苹果macOS 10.14 和10. 15驱动AR9285网卡
  11. 亚马逊养号遛号Selenium自动化测试工具介绍,依托于VMLogin指纹浏览器配套实现。
  12. kali安装有道词典
  13. burp 安装 license key not recognized
  14. 爬虫从头学之Requests+正则表达式爬取猫眼电影top100
  15. 如何实现windows命令提示符的tab补全
  16. 地图开发技术报告(百度地图)
  17. 如何使用微信小程序制作banner轮播图?
  18. C#语言操作Win7系统任务栏(TaskBar)中程序图标的背景进度条
  19. XMind Zen 2020 10.3.1注册使用
  20. cordova build android遇到的问题

热门文章

  1. 企业上云规划与云原生环境设计
  2. 股价上涨,资金流出以及内外盘的关系
  3. 从项目管理角度如何保证质量
  4. 如何选择一个合适的物联网模块
  5. Apache Flink源码阅读环境搭建
  6. 熊猫数据集_使用大数据的熊猫
  7. Unity Scroll View在Clamped模式下无法移动
  8. RK3399:HDMI输出固定频率与热插拔
  9. 手机尾号猜年龄骗局解密
  10. 【笔记本加配置记录】笔记本加内存条,华硕拆后盖