企业微信机器人 sdk 实现发送消息的功能 api(文本消息,图片消息,图片+文字消息)

2022-11-12 16:28:21 +08:00
 uzfg57666
1.打开企业微信电脑版点击红框位置添加机器人
2.复制地址
3.代码环节 Controller
@GetMapping(value = "testRobot")
public void testRobot() throws IOException {
//VO 这段可以写在业务逻辑层
RobotVo vo = new RobotVo();
//机器人地址
vo.setWebhookAddress("刚才复制的地址");
//1.第一种情况:发送文本消息
// vo.setContent("我发送的消息是:文本消息");
// List<String> memberList = new ArrayList<>();
// memberList.add("@all");
// vo.setMemberList(memberList);
// vo.setMsgType("text");

// 2.第二种情况,发送图片消息
// vo.setMsgType("image");
// vo.setSavePath("C:/Users/Administrator/Desktop/吴彦祖.jpg");

//3.第三种情况,发送机器人消息
vo.setMsgType("news");
vo.setTitle("test");
vo.setDescription("test");
vo.setUrl("url");
// vo.setImageUrl("url")括号中的 url 是上传 oss 返回的路径
vo.setImageUrl("url");
service.run(vo);
}

4.VO
@Data
public class RobotVo {
/**
* 机器人 id
*/
private String robotId;
/**
* 机器人名字
*/
private String robotName;
/**
* 当前机器人的 webhook 地址
*/
private String webhookAddress;
/**
* 消息类型
*/
private String msgType;
/**
* 富文本框里面的内容
*/
private String content;
/**
* 涉及发送的人员
*/
private List<String> memberList;
/**
* 电话
*/
private String mobileList;
/**
* 图片地址
*/
private String imageUrl;
/**
* base64 编码后的值
*/
private String imageBase64Value;

/**
* 图片 md5 加密后的值
*/
private String imageMd5Value;

/**
* 发送消息的标题
*/
private String title;
/**
* 发送图文消息的描述信息
*/
private String description;
/**
* 图片 url 地址集合
*/
private List<String> imageUrlList;
/**
* 图片打开的地址
*/
private String url;
/**
* 消息内容集合
*/
private List<String> contentList;
/**
* 图片路径
*/
private String savePath;
}

5.Service 接口
/**
* 机器人
* @param vo
* @throws IOException
*/
void run(RobotVo vo) throws IOException;

6.Service 业务逻辑
@Override
public void run(RobotVo vo) throws IOException {
List<String> memberList = vo.getMemberList();
String jsonData = "";
String mobileList = "";
String strMember = "";
if (vo.getMsgType().equals("text")) {
if (!Strings.isNullOrEmpty(vo.getMobileList())) {
mobileList = vo.getMobileList();
} else {
mobileList = "";
}
for (int i = 0; i < memberList.size(); i++) {
if (i == memberList.size() - 1) {
strMember += "\"" + memberList.get(i) + "\"";
} else {
strMember += "\"" + memberList.get(i) + "\"" + ",";
}
}
String[] members = new String[memberList.size()];
for (int i = 0; i < memberList.size(); i++) {
members[i] = memberList.get(i);
}
jsonData = "{\n" +
"\t\"msgtype\": \"" + vo.getMsgType() + "\",\n" +
" \"text\": {\n" +
" \"content\": \"" + vo.getContent() + "\",\n" +
" \"mentioned_list\":[" + strMember + "],\n" +
" \"mentioned_mobile_list\":[\"" + mobileList + "\"]\n" +
" }\n" +
"}";

} else if (vo.getMsgType().equals("image")) {
//图片 base64 加密的值
vo.setImageBase64Value(getImageStr(vo.getSavePath()));
//图片 md5 加密的值
vo.setImageMd5Value(DigestUtils.md5Hex(new FileInputStream(vo.getSavePath())));
jsonData = "{\n" +
" \"msgtype\": \"" + vo.getMsgType() + "\",\n" +
" \"image\": {\n" +
" \"base64\": \"" + vo.getImageBase64Value() + "\",\n" +
" \"md5\": \"" + vo.getImageMd5Value() + "\"\n" +
" }\n" +
"}";
} else if (vo.getMsgType().equals("news")) {
//图片+文字消息
vo.setTitle(!Strings.isNullOrEmpty(vo.getTitle()) ? vo.getTitle() : "");
jsonData = "{\n" +
" \"msgtype\": \"" + vo.getMsgType() + "\",\n" +
" \"news\": {\n" +
" \"articles\" : [\n" +
" {\n" +
" \"title\" : \"" + vo.getTitle() + "\",\n" +
" \"description\" : \"" + vo.getDescription() + "\",\n" +
" \"url\" : \"" + vo.getUrl() + "\",\n" +
" \"picurl\" : \"" + vo.getImageUrl() + "\"\n" +
" }\n" +
" ]\n" +
" }\n" +
"}";
}
send(vo.getWebhookAddress(), jsonData);
}
7.send 方法
public static JSONObject send(String url, String param) {
PrintWriter out = null;
BufferedReader in = null;
JSONObject jsonObject = null;
String result = "";
try {
URL realUrl = new URL(url);
// 打开和 URL 之间的连接
URLConnection conn = realUrl.openConnection();
// 发送 POST 请求必须设置如下两行
conn.setDoOutput(true);
conn.setDoInput(true);
// 获取 URLConnection 对象对应的输出流(设置请求编码为 UTF-8 )
out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(), "UTF-8"));
// 发送请求参数
out.print(param);
// flush 输出流的缓冲
out.flush();
// 获取请求返回数据(设置返回数据编码为 UTF-8 )
in = new BufferedReader(
new InputStreamReader(conn.getInputStream(), "UTF-8"));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
jsonObject = JSONObject.parseObject(result);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (out != null) {
out.close();
}
if (in != null) {
in.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
return jsonObject;
}

这个是在调用官方 api 对接的接口。但是如果想更复杂的功能,比如:得到回调消息,外部群管理,发朋友圈等等。就需要 PC 版企微,c++底层开发了。欢迎技术交流。
HWND Qq[]=“2645542961”;
wchar_t mesbuff[0x180e];

目前已经实现了大部分功能,运行稳定,比如:发各种消息,
接收各种消息,外部群内部群管理,下载文件,加好友,发朋友圈等等功能,
可提供接口,方便各种语言二次开发,
1135 次点击
所在节点    程序员
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/894711

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX