企业微信机器人 sdk 实现发送消息的功能 api(文本消息,图片消息,图片+文字消息) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
uzfg57666
V2EX    程序员

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

  •  
  •   uzfg57666 2022-11-12 16:28:21 +08:00 1689 次点击
    这是一个创建于 1153 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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) {
    i.close();
    }
    } catch (IOException ex) {
    ex.printStackTrace();
    }
    }
    return jsonObject;
    }

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

    目前已经实现了大部分功能,运行稳定,比如:发各种消息,
    接收各种消息,外部群内部群管理,下载文件,加好友,发朋友圈等等功能,
    可提供接口,方便各种语言二次开发,
    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3478 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 37ms UTC 04:34 PVG 12:34 LAX 20:34 JFK 23:34
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86