|
@@ -1,5 +1,6 @@
|
|
|
package com.kede.wechat.service.impl;
|
|
package com.kede.wechat.service.impl;
|
|
|
|
|
|
|
|
|
|
+import com.kede.common.model.ChatMsg;
|
|
|
import com.kede.common.model.ChatMsgUser;
|
|
import com.kede.common.model.ChatMsgUser;
|
|
|
import com.kede.common.utils.DateUtils;
|
|
import com.kede.common.utils.DateUtils;
|
|
|
import com.kede.common.utils.HttpUtils;
|
|
import com.kede.common.utils.HttpUtils;
|
|
@@ -18,6 +19,8 @@ import org.springframework.stereotype.Service;
|
|
|
import com.kede.common.dao.ChatMsgUserMapper;
|
|
import com.kede.common.dao.ChatMsgUserMapper;
|
|
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
import javax.annotation.Resource;
|
|
|
|
|
+import java.io.File;
|
|
|
|
|
+import java.io.FileOutputStream;
|
|
|
import java.util.*;
|
|
import java.util.*;
|
|
|
|
|
|
|
|
@Service("ConversationContentService")
|
|
@Service("ConversationContentService")
|
|
@@ -35,6 +38,8 @@ public class ConversationContentServiceImpl implements ConversationContentServic
|
|
|
@Value(value = "${conversationContent.secret}")
|
|
@Value(value = "${conversationContent.secret}")
|
|
|
private String secret;
|
|
private String secret;
|
|
|
|
|
|
|
|
|
|
+ @Value(value = "${conversationContent.app.secret}")
|
|
|
|
|
+ private String appSecret;
|
|
|
@Value(value = "${conversationContent.addressBook.secret}")
|
|
@Value(value = "${conversationContent.addressBook.secret}")
|
|
|
private String addressBookSecret;
|
|
private String addressBookSecret;
|
|
|
|
|
|
|
@@ -119,28 +124,110 @@ public class ConversationContentServiceImpl implements ConversationContentServic
|
|
|
// 1es92NKBbaNT1AlRNfjtACH1KrPRLlEnmAS0EUIWWmn45/kOpH3T4ovOuNDnrafw==",
|
|
// 1es92NKBbaNT1AlRNfjtACH1KrPRLlEnmAS0EUIWWmn45/kOpH3T4ovOuNDnrafw==",
|
|
|
// "seq":1}
|
|
// "seq":1}
|
|
|
JSONObject data = new JSONObject(item);
|
|
JSONObject data = new JSONObject(item);
|
|
|
- String encrypt_random_key = data.getString("encrypt_random_key");
|
|
|
|
|
- String encrypt_chat_msg = data.getString("encrypt_chat_msg");
|
|
|
|
|
- long msg = Finance.NewSlice();
|
|
|
|
|
- try {
|
|
|
|
|
- message = RSAEncrypt.decryptRSA(encrypt_random_key, priKey);
|
|
|
|
|
- ret = Finance.DecryptData(sdk, message, encrypt_chat_msg, msg);
|
|
|
|
|
- if (ret != 0) {
|
|
|
|
|
- System.out.println("getchatdata ret " + ret);
|
|
|
|
|
|
|
+ String encrypt_random_key = data.getString("encrypt_random_key");
|
|
|
|
|
+ String encrypt_chat_msg = data.getString("encrypt_chat_msg");
|
|
|
|
|
+ long msg = Finance.NewSlice();
|
|
|
|
|
+ try {
|
|
|
|
|
+ message = RSAEncrypt.decryptRSA(encrypt_random_key, priKey);
|
|
|
|
|
+ ret = Finance.DecryptData(sdk, message, encrypt_chat_msg, msg);
|
|
|
|
|
+ if (ret != 0) {
|
|
|
|
|
+ System.out.println("getchatdata ret " + ret);
|
|
|
// return;
|
|
// return;
|
|
|
|
|
+ }
|
|
|
|
|
+ String str = String.valueOf(Finance.GetContentFromSlice(msg));
|
|
|
|
|
+ com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSONObject.parseObject(str);
|
|
|
|
|
+ System.out.println("获取slice内容======="+jsonObject);
|
|
|
|
|
+ String msgtype = jsonObject.getString("msgtype");
|
|
|
|
|
+ if (msgtype.equals("text")){
|
|
|
|
|
+ InputChatMsg chatMsg = new InputChatMsg(jsonObject);
|
|
|
|
|
+ list.add(chatMsg);
|
|
|
|
|
+ }else if (msgtype.equals("image")){
|
|
|
|
|
+ com.alibaba.fastjson.JSONObject image = jsonObject.getJSONObject("image");
|
|
|
|
|
+ String sdkfileid = image.getString("sdkfileid");
|
|
|
|
|
+ String indexbuf = "";
|
|
|
|
|
+ while(true){
|
|
|
|
|
+
|
|
|
|
|
+ //每次使用GetMediaData拉取存档前需要调用NewMediaData获取一个media_data,在使用完media_data中数据后,还需要调用FreeMediaData释放。
|
|
|
|
|
+ long media_data = Finance.NewMediaData();
|
|
|
|
|
+ ret = Finance.GetMediaData(sdk, indexbuf, sdkfileid, null, null, 3, media_data);
|
|
|
|
|
+ if(ret!=0){
|
|
|
|
|
+ System.out.println("getmediadata ret:" + ret);
|
|
|
|
|
+ Finance.FreeMediaData(media_data);
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+ System.out.printf("getmediadata outindex len:%d, data_len:%d, is_finis:%d\n",Finance.GetIndexLen(media_data),Finance.GetDataLen(media_data), Finance.IsMediaDataFinish(media_data));
|
|
|
|
|
+ try {
|
|
|
|
|
+
|
|
|
|
|
+ File file = new File("F:\\test\\123.jpg");
|
|
|
|
|
+ if (!file.getParentFile().exists()) {
|
|
|
|
|
+ file.getParentFile().mkdirs(); // 自动创建缺失的父目录
|
|
|
|
|
+ }
|
|
|
|
|
+ //大于512k的文件会分片拉取,此处需要使用追加写,避免后面的分片覆盖之前的数据。
|
|
|
|
|
+ FileOutputStream outputStream = new FileOutputStream(new File("F:\\test\\123.jpg"), true);
|
|
|
|
|
+ outputStream.write(Finance.GetData(media_data));
|
|
|
|
|
+ outputStream.close();
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ e.printStackTrace();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if(Finance.IsMediaDataFinish(media_data) == 1)
|
|
|
|
|
+ {
|
|
|
|
|
+ //已经拉取完成最后一个分片
|
|
|
|
|
+ Finance.FreeMediaData(media_data);
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ else
|
|
|
|
|
+ {
|
|
|
|
|
+ //获取下次拉取需要使用的indexbuf
|
|
|
|
|
+ indexbuf = Finance.GetOutIndexBuf(media_data);
|
|
|
|
|
+ Finance.FreeMediaData(media_data);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ Finance.FreeSlice(msg);
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ e.printStackTrace();
|
|
|
}
|
|
}
|
|
|
- String str = String.valueOf(Finance.GetContentFromSlice(msg));
|
|
|
|
|
- com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSONObject.parseObject(str);
|
|
|
|
|
-// System.out.println(jsonObject);
|
|
|
|
|
- String action = jsonObject.getString("action");
|
|
|
|
|
- if (!action.equals("switch")){
|
|
|
|
|
- InputChatMsg chatMsg = new InputChatMsg(jsonObject);
|
|
|
|
|
- list.add(chatMsg);
|
|
|
|
|
- }
|
|
|
|
|
- Finance.FreeSlice(msg);
|
|
|
|
|
- } catch (Exception e) {
|
|
|
|
|
- e.printStackTrace();
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ //拉取媒体数据
|
|
|
|
|
+// String indexbuf = "";
|
|
|
|
|
+// while(true){
|
|
|
|
|
+// //每次使用GetMediaData拉取存档前需要调用NewMediaData获取一个media_data,在使用完media_data中数据后,还需要调用FreeMediaData释放。
|
|
|
|
|
+// long media_data = Finance.NewMediaData();
|
|
|
|
|
+// ret = Finance.GetMediaData(sdk, indexbuf, sdkfileid, proxy, passwd, timeout, media_data);
|
|
|
|
|
+// if(ret!=0){
|
|
|
|
|
+// System.out.println("getmediadata ret:" + ret);
|
|
|
|
|
+// Finance.FreeMediaData(media_data);
|
|
|
|
|
+// return null;
|
|
|
|
|
+// }
|
|
|
|
|
+// System.out.printf("getmediadata outindex len:%d, data_len:%d, is_finis:%d\n",
|
|
|
|
|
+// Finance.GetIndexLen(media_data),
|
|
|
|
|
+// Finance.GetDataLen(media_data),
|
|
|
|
|
+// Finance.IsMediaDataFinish(media_data));
|
|
|
|
|
+// try {
|
|
|
|
|
+// //大于512k的文件会分片拉取,此处需要使用追加写,避免后面的分片覆盖之前的数据。
|
|
|
|
|
+// FileOutputStream outputStream = new FileOutputStream(new File(savefile), true);
|
|
|
|
|
+// outputStream.write(Finance.GetData(media_data));
|
|
|
|
|
+// outputStream.close();
|
|
|
|
|
+// } catch (Exception e) {
|
|
|
|
|
+// e.printStackTrace();
|
|
|
|
|
+// }
|
|
|
|
|
+//
|
|
|
|
|
+// if(Finance.IsMediaDataFinish(media_data) == 1)
|
|
|
|
|
+// {
|
|
|
|
|
+// //已经拉取完成最后一个分片
|
|
|
|
|
+// Finance.FreeMediaData(media_data);
|
|
|
|
|
+// break;
|
|
|
|
|
+// }
|
|
|
|
|
+// else
|
|
|
|
|
+// {
|
|
|
|
|
+// //获取下次拉取需要使用的indexbuf
|
|
|
|
|
+// indexbuf = Finance.GetOutIndexBuf(media_data);
|
|
|
|
|
+// Finance.FreeMediaData(media_data);
|
|
|
|
|
+// }
|
|
|
|
|
+// }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
Finance.FreeSlice(slice);
|
|
Finance.FreeSlice(slice);
|
|
@@ -175,24 +262,24 @@ public class ConversationContentServiceImpl implements ConversationContentServic
|
|
|
return accessToken;
|
|
return accessToken;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- @Override
|
|
|
|
|
|
|
+
|
|
|
public String getAddressBookAccessToken() {
|
|
public String getAddressBookAccessToken() {
|
|
|
//获取redis缓存数据
|
|
//获取redis缓存数据
|
|
|
String accessToken = null;
|
|
String accessToken = null;
|
|
|
Map<String,String> accessMap = (Map<String, String>) redisTemplate.opsForValue().get("ADDRESS_BOOK_ACCESS_TOKEN");
|
|
Map<String,String> accessMap = (Map<String, String>) redisTemplate.opsForValue().get("ADDRESS_BOOK_ACCESS_TOKEN");
|
|
|
if (accessMap == null){
|
|
if (accessMap == null){
|
|
|
- logger.debug("AddressBookAccessToken无缓存从接口获取");
|
|
|
|
|
- Map<String, String> map = getAccessMap(corpid,secret);
|
|
|
|
|
|
|
+ logger.debug("ADDRESS_BOOK无缓存从接口获取");
|
|
|
|
|
+ Map<String, String> map = getAccessMap(corpid, secret);
|
|
|
//新增redis缓存数据
|
|
//新增redis缓存数据
|
|
|
redisTemplate.opsForValue().set("ADDRESS_BOOK_ACCESS_TOKEN",map);
|
|
redisTemplate.opsForValue().set("ADDRESS_BOOK_ACCESS_TOKEN",map);
|
|
|
accessToken = map.get("accessToken");
|
|
accessToken = map.get("accessToken");
|
|
|
}else {
|
|
}else {
|
|
|
- logger.debug("AddressBookAccessToken有缓存从缓存获取");
|
|
|
|
|
|
|
+ logger.debug("ADDRESS_BOOK有缓存从缓存获取");
|
|
|
accessToken = accessMap.get("accessToken");
|
|
accessToken = accessMap.get("accessToken");
|
|
|
Long expireDate = Long.valueOf(accessMap.get("expireDate"));
|
|
Long expireDate = Long.valueOf(accessMap.get("expireDate"));
|
|
|
if (expireDate < System.currentTimeMillis()){
|
|
if (expireDate < System.currentTimeMillis()){
|
|
|
- logger.debug("AddressBookAccessToken缓存已过期从接口获取");
|
|
|
|
|
- Map<String, String> map = getAccessMap(corpid,secret);
|
|
|
|
|
|
|
+ logger.debug("ADDRESS_BOOK缓存已过期从接口获取");
|
|
|
|
|
+ Map<String, String> map = getAccessMap(corpid, secret);
|
|
|
accessToken = map.get("accessToken");
|
|
accessToken = map.get("accessToken");
|
|
|
//新增redis缓存数据
|
|
//新增redis缓存数据
|
|
|
redisTemplate.opsForValue().set("ADDRESS_BOOK_ACCESS_TOKEN",map);
|
|
redisTemplate.opsForValue().set("ADDRESS_BOOK_ACCESS_TOKEN",map);
|
|
@@ -202,6 +289,32 @@ public class ConversationContentServiceImpl implements ConversationContentServic
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
|
|
+ public String getAppAccessToken() {
|
|
|
|
|
+ //获取redis缓存数据
|
|
|
|
|
+ String accessToken = null;
|
|
|
|
|
+ Map<String,String> accessMap = (Map<String, String>) redisTemplate.opsForValue().get("ADDRESS_BOOK_ACCESS_TOKEN");
|
|
|
|
|
+ if (accessMap == null){
|
|
|
|
|
+ logger.debug("APP_ACCESS_TOKEN无缓存从接口获取");
|
|
|
|
|
+ Map<String, String> map = getAccessMap(corpid,appSecret);
|
|
|
|
|
+ //新增redis缓存数据
|
|
|
|
|
+ redisTemplate.opsForValue().set("APP_ACCESS_TOKEN",map);
|
|
|
|
|
+ accessToken = map.get("accessToken");
|
|
|
|
|
+ }else {
|
|
|
|
|
+ logger.debug("APP_ACCESS_TOKEN有缓存从缓存获取");
|
|
|
|
|
+ accessToken = accessMap.get("accessToken");
|
|
|
|
|
+ Long expireDate = Long.valueOf(accessMap.get("expireDate"));
|
|
|
|
|
+ if (expireDate < System.currentTimeMillis()){
|
|
|
|
|
+ logger.debug("APP_ACCESS_TOKEN缓存已过期从接口获取");
|
|
|
|
|
+ Map<String, String> map = getAccessMap(corpid,appSecret);
|
|
|
|
|
+ accessToken = map.get("accessToken");
|
|
|
|
|
+ //新增redis缓存数据
|
|
|
|
|
+ redisTemplate.opsForValue().set("APP_ACCESS_TOKEN",map);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return accessToken;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
public String getPermitUserList() {
|
|
public String getPermitUserList() {
|
|
|
String url=String.format("https://qyapi.weixin.qq.com/cgi-bin/msgaudit/get_permit_user_list?access_token=%s",getAccessToken());
|
|
String url=String.format("https://qyapi.weixin.qq.com/cgi-bin/msgaudit/get_permit_user_list?access_token=%s",getAccessToken());
|
|
|
com.alibaba.fastjson.JSONObject result = HttpUtils.httpGet(url);
|
|
com.alibaba.fastjson.JSONObject result = HttpUtils.httpGet(url);
|
|
@@ -227,16 +340,16 @@ public class ConversationContentServiceImpl implements ConversationContentServic
|
|
|
String url=null;
|
|
String url=null;
|
|
|
Integer type=0;
|
|
Integer type=0;
|
|
|
if (msgIdSub.equals("wb")){
|
|
if (msgIdSub.equals("wb")){
|
|
|
- url=String.format("https://qyapi.weixin.qq.com/cgi-bin/msgaudit/get_robot_info??access_token=%s&robot_id=%s",getAddressBookAccessToken(),userId);
|
|
|
|
|
|
|
+ url=String.format("https://qyapi.weixin.qq.com/cgi-bin/msgaudit/get_robot_info??access_token=%s&robot_id=%s",getAppAccessToken(),userId);
|
|
|
}else if (msgIdSub.equals("wo")||msgIdSub.equals("wm")){
|
|
}else if (msgIdSub.equals("wo")||msgIdSub.equals("wm")){
|
|
|
- // https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get?access_token=ACCESS_TOKEN&external_userid=EXTERNAL_USERID&cursor=CURSOR
|
|
|
|
|
- url=String.format("https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get?access_token=%s&external_userid=%s",getAddressBookAccessToken(),userId);
|
|
|
|
|
|
|
+ // https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get
|
|
|
|
|
+ url=String.format("https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get?access_token=%s&external_userid=%s",getAppAccessToken(),userId);
|
|
|
type=1;
|
|
type=1;
|
|
|
}else {
|
|
}else {
|
|
|
url=String.format("https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token=%s&userid=%s",getAccessToken(),userId);
|
|
url=String.format("https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token=%s&userid=%s",getAccessToken(),userId);
|
|
|
type=2;
|
|
type=2;
|
|
|
}
|
|
}
|
|
|
- String userName = getUserName(url);
|
|
|
|
|
|
|
+ String userName = getUserName(url,type);
|
|
|
System.out.println(userId+"="+userName);
|
|
System.out.println(userId+"="+userName);
|
|
|
if (StringUtils.isNotBlank(userName)){
|
|
if (StringUtils.isNotBlank(userName)){
|
|
|
chatMsgUser = new ChatMsgUser();
|
|
chatMsgUser = new ChatMsgUser();
|
|
@@ -250,39 +363,77 @@ public class ConversationContentServiceImpl implements ConversationContentServic
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * errorGode 错误码
|
|
|
|
|
+ * 301059=非内部群,不提供数据
|
|
|
|
|
+ * 90501=该群不是客户群
|
|
|
|
|
+ * @param chatMsg
|
|
|
|
|
+ * @return
|
|
|
|
|
+ */
|
|
|
@Override
|
|
@Override
|
|
|
- public String pushGetRoomName(String roomid) {
|
|
|
|
|
|
|
+ public String pushGetRoomName(ChatMsg chatMsg) {
|
|
|
|
|
+ String name=null;
|
|
|
// https://qyapi.weixin.qq.com/cgi-bin/externalcontact/groupchat/get?access_token=ACCESS_TOKEN
|
|
// https://qyapi.weixin.qq.com/cgi-bin/externalcontact/groupchat/get?access_token=ACCESS_TOKEN
|
|
|
|
|
+ String roomid = chatMsg.getRoomid();
|
|
|
ChatMsgUser chatMsgUser = chatMsgUserMapper.selectByUserId(roomid);
|
|
ChatMsgUser chatMsgUser = chatMsgUserMapper.selectByUserId(roomid);
|
|
|
if (chatMsgUser != null){
|
|
if (chatMsgUser != null){
|
|
|
return chatMsgUser.getName();
|
|
return chatMsgUser.getName();
|
|
|
}else {
|
|
}else {
|
|
|
- String url=String.format("https://qyapi.weixin.qq.com/cgi-bin/externalcontact/groupchat/get?access_token=%s",getAddressBookAccessToken());
|
|
|
|
|
- Map<String,Object> map = new HashMap<String, Object>();
|
|
|
|
|
- map.put("chat_id",roomid);
|
|
|
|
|
- map.put("cursor",0);
|
|
|
|
|
- com.alibaba.fastjson.JSONObject jsonObject = HttpUtils.httpPost(url, map);
|
|
|
|
|
- System.out.println(jsonObject.toJSONString());
|
|
|
|
|
- if (jsonObject.getInteger("errcode")==0){
|
|
|
|
|
|
|
+ //查询编号中有没有external
|
|
|
|
|
+ String msgIdSub = chatMsg.getMsgid();
|
|
|
|
|
+ int i = msgIdSub.indexOf("external");
|
|
|
|
|
+ if (i>0){
|
|
|
|
|
+ String url=String.format("https://qyapi.weixin.qq.com/cgi-bin/externalcontact/groupchat/get?access_token=%s",getAppAccessToken());
|
|
|
|
|
+ Map<String,Object> map = new HashMap<String, Object>();
|
|
|
|
|
+ map.put("chat_id",roomid);
|
|
|
|
|
+ map.put("cursor",0);
|
|
|
|
|
+ com.alibaba.fastjson.JSONObject jsonObject = HttpUtils.httpPost(url, map);
|
|
|
|
|
+ System.out.println(jsonObject.toJSONString());
|
|
|
|
|
+ if (jsonObject.getInteger("errcode")==0){
|
|
|
|
|
+ }else {
|
|
|
|
|
+ System.out.println("获取外部群名称失败");
|
|
|
|
|
+ }
|
|
|
}else {
|
|
}else {
|
|
|
- System.out.println("获取会话内容存档群名称失败");
|
|
|
|
|
|
|
+ //https://qyapi.weixin.qq.com/cgi-bin/msgaudit/groupchat/get
|
|
|
|
|
+ String url=String.format("https://qyapi.weixin.qq.com/cgi-bin/msgaudit/groupchat/get?access_token=%s",getAccessToken());
|
|
|
|
|
+ Map<String,Object> map = new HashMap<String, Object>();
|
|
|
|
|
+ map.put("roomid",roomid);
|
|
|
|
|
+ com.alibaba.fastjson.JSONObject jsonObject = HttpUtils.httpPost(url, map);
|
|
|
|
|
+ System.out.println(jsonObject.toJSONString());
|
|
|
|
|
+ name = jsonObject.getString("roomname");
|
|
|
|
|
+ if (jsonObject.getInteger("errcode")==0){
|
|
|
|
|
+ }else {
|
|
|
|
|
+ System.out.println("获取内部群名称失败");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- return null;
|
|
|
|
|
|
|
+ return name;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
- private String getUserName(String url){
|
|
|
|
|
|
|
+ private String getUserName(String url,Integer type){
|
|
|
com.alibaba.fastjson.JSONObject result = HttpUtils.httpGet(url);
|
|
com.alibaba.fastjson.JSONObject result = HttpUtils.httpGet(url);
|
|
|
|
|
+ String name = null;
|
|
|
if (result.getInteger("errcode")==0){
|
|
if (result.getInteger("errcode")==0){
|
|
|
System.out.println(result.toJSONString());
|
|
System.out.println(result.toJSONString());
|
|
|
- return result.getString("name");
|
|
|
|
|
|
|
+ if (type==0){
|
|
|
|
|
+
|
|
|
|
|
+ }else if (type==1){
|
|
|
|
|
+ com.alibaba.fastjson.JSONObject externalContact = result.getJSONObject("external_contact");
|
|
|
|
|
+ name=externalContact.getString("name");
|
|
|
|
|
+ }else if (type==2){
|
|
|
|
|
+ name = result.getString("name");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
}else {
|
|
}else {
|
|
|
System.out.println(result.toJSONString());
|
|
System.out.println(result.toJSONString());
|
|
|
System.out.println("获取会话内容存档成员列表失败");
|
|
System.out.println("获取会话内容存档成员列表失败");
|
|
|
}
|
|
}
|
|
|
- return null;
|
|
|
|
|
|
|
+ return name;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|