package com.stylefeng.guns.modular.system.util; import com.stylefeng.guns.core.exception.GunsException; import io.rong.RongCloud; import io.rong.messages.BaseMessage; import io.rong.messages.TxtMessage; import io.rong.methods.group.Group; import io.rong.methods.user.User; import io.rong.models.Result; import io.rong.models.group.GroupMember; import io.rong.models.group.GroupModel; import io.rong.models.message.GroupMessage; import io.rong.models.message.PrivateMessage; import io.rong.models.message.SystemMessage; import io.rong.models.response.ResponseResult; import io.rong.models.response.TokenResult; import io.rong.models.user.UserModel; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.URL; import java.net.URLConnection; import java.security.MessageDigest; import java.util.HashMap; import java.util.List; /** * 融云 */ public class RongCloudUtil { public static String appKey = "bmdehs6pbnozs"; public static String appSecret = "RovVwtABN1"; // 海外token获取RongCloud.getSingaporeInstance(appKey, appSecret); private static RongCloud rongCloud = RongCloud.getInstance(appKey, appSecret); public static void main(String[] args) throws Exception { TokenResult token = getToken("1", "1", "1"); System.out.println(token.toString()); } /** * 融云注册 * @param id * @param name * @param portrait * @return * @throws Exception */ public static TokenResult getToken(String id, String name, String portrait) throws Exception{ User user = rongCloud.user; // rongCloud.message.group.recall() UserModel userModel = new UserModel() .setId(id) .setName(name) .setPortrait(portrait); TokenResult result = user.register(userModel); return result; } /** * 修改 * @param id * @param name * @param portrait * @return * @throws Exception */ public static Result update(String id, String name, String portrait) throws Exception{ User user = rongCloud.user; UserModel userModel = new UserModel() .setId(id) .setName(name) .setPortrait(portrait); Result result = user.update(userModel); return result; } /** * 推送 * @param userId * @param content * @param extras * @return * @throws Exception */ public static String push( String userId, String content,String extras) throws Exception { String platform="[\"ios\",\"android\"]"; String audience="{\"userid\":"+"[\""+userId+"\"]"+",\"is_to_all\":false}"; String notification="{\"alert\":\""+content+"\",\"ios\":"+extras+",\"android\":"+extras+"}"; String[] tag = {"10"}; StringBuilder sb = new StringBuilder(); sb.append("platform=").append(platform); sb.append("&tag=").append(tag.toString()); sb.append("&audience=").append(audience); sb.append("¬ification=").append(notification); /*sb.append(","); sb.append("\"extras\":").append(extras);*/ /*HostType apiHostType = new HostType("https://api-sg01.ronghub.com/message/system"); HttpURLConnection conn = HttpUtil.CreatePostHttpConnection(apiHostType, appKey, appSecret, "/publish.json", "application/json"); HttpUtil.setBodyParameter(sb, conn);*/ //return HttpUtil.returnResult(""); return ""; } /** * 通过融云发送系统信息,详见https://www.rongcloud.cn/docs/message_architecture.html#group_notification_message * @param senderId 发送人 * @param targetIds 接收人(数组) * @param baseMessage 消息内容 * @param pushContent 推送内容 * @param pushData 推送数据 */ public static void sendSystemMessage(String senderId, String[] targetIds, BaseMessage baseMessage, String pushContent, String pushData){ SystemMessage systemMessage = new SystemMessage() .setSenderId(senderId) .setTargetId(targetIds) .setObjectName(baseMessage.getType()) .setContent(baseMessage) .setPushContent(pushContent) .setPushData(pushData) .setIsPersisted(0) .setIsCounted(0) .setContentAvailable(0); try { ResponseResult responseResult = rongCloud.message.system.send(systemMessage); System.out.println(responseResult); } catch (Exception e) { e.printStackTrace(); } } public static void sendSystemMessage1(String senderId, String[] targetIds, BaseMessage baseMessage, String pushContent, String pushData){ SystemMessage systemMessage = new SystemMessage() .setSenderId(senderId) .setTargetId(targetIds) .setObjectName(baseMessage.getType()) .setContent(baseMessage) .setPushContent(pushContent) .setPushData(pushData) .setIsPersisted(0) .setIsCounted(0) .setContentAvailable(1); try { ResponseResult responseResult = rongCloud.message.system.send(systemMessage); System.out.println(responseResult); } catch (Exception e) { e.printStackTrace(); } } /** * 通过融云发送单聊消息 */ public static void sendPrivateMsg(String senderId, String targetId, BaseMessage baseMessage){ PrivateMessage privateMessage = new PrivateMessage() .setSenderId(senderId) .setTargetId(new String[]{targetId}) .setObjectName(baseMessage.getType()) .setContent(baseMessage) .setPushContent("") .setPushData("") .setCount("") .setVerifyBlacklist(0) .setIsPersisted(1) .setIsCounted(1) .setIsIncludeSender(0); //发送单聊方法 try { rongCloud.message.msgPrivate.send(privateMessage); } catch (Exception e) { e.printStackTrace(); } } public static void sendPrivateMsg1(String senderId, String targetId, BaseMessage baseMessage){ PrivateMessage privateMessage = new PrivateMessage() .setSenderId(senderId) .setTargetId(new String[]{targetId}) .setObjectName(baseMessage.getType()) .setContent(baseMessage) .setPushContent("") .setPushData("") .setCount("") .setVerifyBlacklist(0) .setIsPersisted(1) .setIsCounted(1) .setIsIncludeSender(1); //发送单聊方法 try { rongCloud.message.msgPrivate.send(privateMessage); } catch (Exception e) { e.printStackTrace(); } } public static void sendPrivateMsg(String senderId, String[] targetId, BaseMessage baseMessage){ PrivateMessage privateMessage = new PrivateMessage() .setSenderId(senderId) .setTargetId(targetId) .setObjectName(baseMessage.getType()) .setContent(baseMessage) .setPushContent("") .setPushData("") .setCount("") .setVerifyBlacklist(0) .setIsPersisted(1) .setIsCounted(1) .setIsIncludeSender(1); //发送单聊方法 try { rongCloud.message.msgPrivate.send(privateMessage); } catch (Exception e) { e.printStackTrace(); } } /** * 发送群组消息 * @param fromUserId 注意当前用户id不会接收到该消息 * @param toGroupId 群id */ public static void sendGroupMessage(String fromUserId, String toGroupId, BaseMessage baseMessage, String pushContent, String pushData){ GroupMessage groupMessage = new GroupMessage() .setSenderId(fromUserId) .setTargetId(new String[]{toGroupId}) .setObjectName(baseMessage.getType()) .setContent(baseMessage) .setPushContent(pushContent) .setPushData(pushData) .setIsPersisted(1) .setIsIncludeSender(1) .setContentAvailable(0); try { ResponseResult groupResult = rongCloud.message.group.send(groupMessage); System.out.println(groupResult); } catch (Exception e) { e.printStackTrace(); } } public static void sendGroupMessage1(String fromUserId, String toGroupId, BaseMessage baseMessage, String pushContent, String pushData){ GroupMessage groupMessage = new GroupMessage() .setSenderId(fromUserId) .setTargetId(new String[]{toGroupId}) .setObjectName(baseMessage.getType()) .setContent(baseMessage) .setPushContent(pushContent) .setPushData(pushData) .setIsPersisted(1) .setIsIncludeSender(1) .setContentAvailable(0); try { ResponseResult groupResult = rongCloud.message.group.send(groupMessage); } catch (Exception e) { e.printStackTrace(); } } /** * 移除黑名单 */ public static void removeBlackList(String userId,String friendId){ UserModel user = getUserModel(userId,friendId); try { rongCloud.user.blackList.remove(user); } catch (Exception e) { e.printStackTrace(); } } /** * 添加黑名单 */ public static void addBlackList(String userId,String friendId){ UserModel user = getUserModel(userId,friendId); try { rongCloud.user.blackList.add(user); } catch (Exception e) { e.printStackTrace(); } } private static UserModel getUserModel(String userId, String friendId){ UserModel blackUser = new UserModel().setId(userId); UserModel[] blacklist = {blackUser}; UserModel user = new UserModel() .setId(friendId) .setBlacklist(blacklist); return user; } /** * 通过融云发送单聊消息 */ public static void sendPrivateMsg(String fromUserId, String toUserId, String objectName, String content) { TxtMessage txtMessage = new TxtMessage(content, content); PrivateMessage privateMessage = new PrivateMessage() .setSenderId(fromUserId) .setTargetId(new String[]{toUserId}) // .setObjectName("RC:TxtMsg") .setObjectName(objectName) .setContent(txtMessage) .setPushContent("") .setPushData("") .setCount("") .setVerifyBlacklist(0) .setIsPersisted(1) .setIsCounted(1) .setIsIncludeSender(0); //发送单聊方法 try { rongCloud.message.msgPrivate.send(privateMessage); } catch (Exception e) { e.printStackTrace(); } } /** * 发送文本消息 * @param userId 发送用户id * @param toUserId 接收用户id * @param content 消息文本内容 * @return */ public static Integer privatePushTxtMessage(String userId, String toUserId, String content){ /*String url = "https://api-cn.ronghub.com/message/private/publish.json"; String data = "fromUserId=" + userId + "&toUserId=" + toUserId + "&objectName=RC:TxtMsg&content=" + content; String s = this.pushHttp(url, data); JSONObject jsonObject = JSON.parseObject(s); if(jsonObject.getIntValue("code") == 200){ return jsonObject.getIntValue("status"); }*/ //sendPrivateMsg(userId,toUserId,"RC:TxtMsg",content); String url = "https://api-sg01.ronghub.com/message/private/publish.json"; String data = "fromUserId=" + userId + "&toUserId=" + toUserId + "&objectName=RC:TxtMsg&content=" + content; sendPost(url,data); return 1; } public static Integer pushSilentAll(String userId, String groupNo,String[] toUserId,String name){ GroupMessage message = new GroupMessage(); message.setIsIncludeSender(1); message.setSenderId(userId); message.setTargetId(new String[]{groupNo}); message.setToUserId(toUserId); message.setObjectName("RC:TxtMsg"); TxtMessage txtMessage = new TxtMessage(name, ""); message.setContent(txtMessage); try{ rongCloud.message.group.sendDirection(message); }catch (Exception e){ e.printStackTrace(); } return 1; } // 单人禁言 public static Integer Silent(String userId, String groupNo,Integer minute,String groupName ) throws Exception { // String url = "https://api-cn.ronghub.com/group/user/gag/add.json"; // HashMap map = new HashMap<>(); // map.put("userId",userId); // map.put("groupId",groupNo); // map.put("minute",minute); // String data = "fromUserId=" + userId + "&toUserId=" + toUserId + "&objectName=RC:TxtMsg&content=" + name; //sendPost(url,data); // String s = HttpRequestUtil.postRequest1(url, map, appKey, appSecret); GroupModel groupModel = new GroupModel(); GroupMember[] members = new GroupMember[1]; GroupMember groupMember = new GroupMember(); groupMember.setGroupId(groupNo); groupMember.setId(userId); members[0]=groupMember; groupModel.setId(groupNo); groupModel.setMembers(members); groupModel.setName(groupName); groupModel.setMinute(minute); rongCloud.group.gag.add(groupModel); return 1; } private static GroupModel initGroupModel(String groupId, List memberIds, String groupName) { GroupMember[] members = new GroupMember[memberIds.size()]; for (int i = 0; i < memberIds.size(); i++) { members[i] = new GroupMember().setId(memberIds.get(i)); } return new GroupModel() .setId(groupId) .setMembers(members) .setName(groupName); } /** * 解散群组 * @param groupId 群组id */ public static Integer dismissGroup(String groupId, GroupMember[] members){ Group Group = rongCloud.group; //GroupMember[] members = new GroupMember[]{new GroupMember().setId(memberId)}; GroupModel group = new GroupModel() .setId(groupId) .setMembers(members); Result groupDismissResult = null; try { groupDismissResult = (Result)Group.dismiss(group); } catch (Exception e) { e.printStackTrace(); } System.out.println("dismiss: " + groupDismissResult.toString()); return groupDismissResult.getCode(); } /** * 创建群组 */ public static Integer createGroup(String groupNo, String groupName,GroupMember[] members){ Group Group = rongCloud.group; // GroupMember[] members = new GroupMember[]{new GroupMember().setId(userid)}; GroupModel group = new GroupModel() .setId(groupNo).setName(groupName).setMembers(members); Result groupDismissResult = null; try { groupDismissResult = (Result)Group.create(group); } catch (Exception e) { e.printStackTrace(); } return groupDismissResult.getCode(); } /** * 全体禁言 * @param groupIds * @return */ public static Integer banAdd(String[] groupIds){ Group Group = rongCloud.group; Result banAddResult = null; try { banAddResult = (Result)Group.ban.add(groupIds); } catch (Exception e) { e.printStackTrace(); } System.out.println("banAdd: " + banAddResult.toString()); return banAddResult.getCode(); } /** * 移除禁言 * @param groupIds * @return */ public static Integer banRemove(String[] groupIds){ Group Group = rongCloud.group; Result banRemoveResult = null; try { banRemoveResult = (Result)Group.ban.remove(groupIds); } catch (Exception e) { e.printStackTrace(); } System.out.println("banRemove: " + banRemoveResult.toString()); return banRemoveResult.getCode(); } public static void addGroup(String groupNo,List userid,String groupName) throws Exception { GroupModel groupModel = initGroupModel(groupNo, userid, groupName); rongCloud.group.join(groupModel); try { } catch (Exception e) { e.printStackTrace(); } } /** * 向指定 URL 发送POST方法的请求 * * @param url * 发送请求的 URL * @param param * 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 * @return 所代表远程资源的响应结果 */ public static String sendPost(String url, String param) { PrintWriter out = null; BufferedReader in = null; String result = ""; try { URL realUrl = new URL(url); // 打开和URL之间的连接 URLConnection conn = realUrl.openConnection(); // 设置通用的请求属性 conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); String nonce = String.valueOf(Double.valueOf(Math.random() * 1000000.0D).intValue()); String timeMillis = String.valueOf(System.currentTimeMillis()); String signature = string2Sha1(appSecret + nonce + timeMillis); conn.setConnectTimeout(1000 * 30); conn.setRequestProperty("Host", "api-cn.ronghub.com"); conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); conn.setRequestProperty("App-Key", appKey); conn.setRequestProperty("Nonce", nonce); conn.setRequestProperty("Timestamp", timeMillis); conn.setRequestProperty("Signature", signature); // 发送POST请求必须设置如下两行 conn.setDoOutput(true); conn.setDoInput(true); // 获取URLConnection对象对应的输出流 out = new PrintWriter(conn.getOutputStream()); // 发送请求参数 out.print(param); // flush输出流的缓冲 out.flush(); // 定义BufferedReader输入流来读取URL的响应 in = new BufferedReader( new InputStreamReader(conn.getInputStream())); String line; while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { System.out.println("发送 POST 请求出现异常!"+e); e.printStackTrace(); } //使用finally块来关闭输出流、输入流 finally{ try{ if(out!=null){ out.close(); } if(in!=null){ in.close(); } } catch(IOException ex){ ex.printStackTrace(); } } return result; } private static String string2Sha1(String str){ if(str==null||str.length()==0){ return null; } char hexDigits[] = {'0','1','2','3','4','5','6','7','8','9', 'a','b','c','d','e','f'}; try { MessageDigest mdTemp = MessageDigest.getInstance("SHA1"); mdTemp.update(str.getBytes("UTF-8")); byte[] md = mdTemp.digest(); int j = md.length; char buf[] = new char[j*2]; int k = 0; for (int i = 0; i < j; i++) { byte byte0 = md[i]; buf[k++] = hexDigits[byte0 >>> 4 & 0xf]; buf[k++] = hexDigits[byte0 & 0xf]; } return new String(buf); } catch (Exception e) { // TODO: handle exception return null; } } // public String initPortraitUri(List headImg) { // List picUrls = new ArrayList<>(); // int i = 0; // for (String memberAccount : headImg) { // if (memberAccount != null && StringUtils.isNotBlank(memberAccount)) { // picUrls.add(memberAccount); // i++; // if (i >= 9) { // break; // } // } // } // try { // // 生成九宫格群组头像 // byte[] buff = ImageUtil.getCombinationOfhead(picUrls); // //上传到Oss // /*String url = dfsClient.uploadFile(buff, "jpg"); // if (!Objects.equals(url, "")) { // return fileRoot + "/" + url; // }*/ // return OssUploadUtil.uploadByteOSS(buff); // } catch (Exception e) { // } // return ""; // } /*public static void main(String[] args) { try { TokenResult token = getToken("13688394165", "Crystal", "https://sinata.oss-cn-shenzhen.aliyuncs.com/Oo-logo.png"); System.out.println("token"); System.out.println(token); *//*if (SinataUtil.isNotEmpty(token)){ if(token.code==200){ System.out.println(token.getToken()); } }*//* } catch (Exception e) { System.out.println("kkkkkkk"); e.printStackTrace(); System.out.println(e.getMessage()); } }*/ }