zoukankan      html  css  js  c++  java
  • java编程实现给微信发送消息

    平时我们老是在网上看到使用python操作微信发送消息,这种功能java能不能实现呢,答案是可以的,这里我借助飞鸽快信实现一下。想了解飞鸽快信更多请访问官网。

    1.访问飞鸽快信:https://u.ifeige.cn/login
    使用微信扫码登录,并关注飞鸽快信的微信公众号:
    在这里插入图片描述
    2.添加一个群组,添加一下人员:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    3.查看一下密匙:
    在这里插入图片描述
    注意:在编码中,用到最多的就是密匙SECRET KEY群组app_key

    4.看一下使用说明接口文档

    5.开始编码操作:

    添加依赖:

    	<dependency>
    		<groupId>org.apache.httpcomponents</groupId>
    			<artifactId>httpclient</artifactId>
    			<version>4.5.12</version>
    	</dependency>
    	<dependency>
    			<groupId>com.alibaba</groupId>
    			<artifactId>fastjson</artifactId>
    			<version>1.2.62</version>
    	</dependency>
    	<dependency>
    			<groupId>org.apache.commons</groupId>
    			<artifactId>commons-lang3</artifactId>
    			<version>3.9</version>
    	</dependency>
    

    代码实现:

    /**
     * @author jinghuaixin
     * @date 2020/05/13
     */
    public class FeiGeSendMessgeToWeChart {
        private static final String SECRET_KEY = "xxxxxxxxxxxxxxxxxxx"; // 使用你自己的密匙SECRET_KEY
    
        private static final String APP_KEY = "yyyyyyyyyyyyyyyyyyy"; // 使用你自己的群组APP_KEY
    
        public static void main(String[] args) throws Exception {
            // 获取用户列表
            List<User> userList = getUserList();
            // 添加用户到群组中
            for (int i = 0, len = userList.size(); i < len; i++) {
                System.out.println(addUser(userList.get(i)));
            }
            // 发送消息测试
            sendMessageTest();
            // 删除用户测试:
            for (int i = 0, len = userList.size(); i < len; i++) {
                System.out.println(deleteUser(userList.get(i)));
            }
        }
    
        /**
         * 执行请求的公共方法
         * 
         * @param url 请求url
         * @param paramMap 参数map
         * @return
         * @throws Exception
         */
        public static String doExecuteRequest(String url, Map<String, String> paramMap) throws Exception {
            String result = "";
            // 创建一个HttpClient
            HttpClient httpclient = HttpClients.createDefault();
            // 创建一个POST请求对象
            HttpPost httpPost = new HttpPost(url);
            if (paramMap != null && !paramMap.isEmpty()) {
                // 添加参数列表
                List<NameValuePair> paramList = new ArrayList<>();
                for (Map.Entry<String, String> entry : paramMap.entrySet()) {
                    paramList.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
                }
                // 将参数封装成一个实体类
                UrlEncodedFormEntity urlEncodedFormEntity = new UrlEncodedFormEntity(paramList, "UTF-8");
                // 给POST请求添加参数
                httpPost.setEntity(urlEncodedFormEntity);
            }
    
            // 设置请求的报文头部的编码
            httpPost.setHeader(new BasicHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8"));
            // 设置期望服务端返回的编码
            httpPost.setHeader(new BasicHeader("Accept", "text/plain;charset=utf-8"));
            // 执行POST请求
            HttpResponse response = httpclient.execute(httpPost);
            // 判断请求响应是否成功
            int statusCode = response.getStatusLine().getStatusCode();
            if (statusCode == 200) {
                result = EntityUtils.toString(response.getEntity(), "UTF-8");
                System.out.println(result);
            } else {
                System.out.println("请求响应失败,响应代码:" + statusCode);
            }
            return result;
        }
    
        /**
         * 发送消息测试
         * @throws Exception
         */
        public static void sendMessageTest() throws Exception {
            // 创建一个HttpClient
            HttpClient httpclient = HttpClients.createDefault();
            // 创建一个POST请求对象
            HttpPost httpPost = new HttpPost("https://u.ifeige.cn/api/message/send");
            // 添加参数列表
            List<NameValuePair> paramList = new ArrayList<>();
            paramList.add(new BasicNameValuePair("secret", SECRET_KEY));
            paramList.add(new BasicNameValuePair("app_key", APP_KEY));
            // 模板名称:待处理通知 的模板id
            paramList.add(new BasicNameValuePair("template_id", "5uZIvSm5GAdUR1X25HNpjuOp6jSiL88v4opn4a4GLa0"));
            paramList.add(new BasicNameValuePair("data", "{" + 
                "    "first": {" + 
                "        "value": "待处理通知"," + 
                "        "color": "#173177"" + 
                "    }," + 
                "    "keyword1": {" + 
                "        "value": "放假咯"," + 
                "        "color": "#173177"" + 
                "    }," + 
                "    "keyword2": {" + 
                "        "value": "jinghx"," + 
                "        "color": "#173177"" + 
                "    }," + 
                "    "keyword3": {" + 
                "        "value": ""+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+""," + 
                "        "color": "#173177"" + 
                "    }," + 
                "    "remark": {" + 
                "        "value": "这条通知是假的"," + 
                "        "color": "#173177"" + 
                "    }" + 
                "}"));
            paramList.add(new BasicNameValuePair("url", "https://www.baidu.com"));
    
            // 指定了uid可以只进行单条信息发送
            // paramList.add(new BasicNameValuePair("uid", "4635"));
    
            // 将参数封装成一个实体类
            UrlEncodedFormEntity urlEncodedFormEntity = new UrlEncodedFormEntity(paramList, "UTF-8");
            // 给POST请求添加参数
            httpPost.setEntity(urlEncodedFormEntity);
            // 设置请求的报文头部的编码
            httpPost.setHeader(new BasicHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8"));
            // 设置期望服务端返回的编码
            httpPost.setHeader(new BasicHeader("Accept", "text/plain;charset=utf-8"));
            // 执行POST请求
            HttpResponse response = httpclient.execute(httpPost);
            // 判断请求响应是否成功
            int statusCode = response.getStatusLine().getStatusCode();
            if (statusCode == 200) {
                String content = EntityUtils.toString(response.getEntity(), "UTF-8");
                System.out.println(content);
            } else {
                System.out.println("请求响应失败,响应代码:" + statusCode);
            }
        }
    
        /**
         * 获取关注的用户列表
         * 
         * @param secret
         * @return
         * @throws Exception
         */
        public static List<User> getUserList() throws Exception {
            List<User> userList = null;
            String result = doExecuteRequest("https://u.ifeige.cn/api/userlist", new HashMap<String, String>() {
                private static final long serialVersionUID = 1L;
    
                {
                    put("secret", SECRET_KEY);
                }
            });
            System.out.println(result);
            if (StringUtils.isNotBlank(result)) {
                JSONObject json = JSON.parseObject(result);
                int count = Integer.parseInt(json.getString("count"));
                System.out.println("用户个数:" + count);
                if (count > 0) {
                    userList = new ArrayList<>();
                    JSONArray jsonArray = JSON.parseArray(json.getString("list"));
                    User user = null;
                    for (int i = 0; i < count; i++) {
                      /*userList = new ArrayList<>();
                    JSONArray jsonArray = JSON.parseArray(json.getString("list"));
                    User user = null;
                    for (int i = 0; i < count; i++) {
                        user = new User();
                        user.setId(jsonArray.getJSONObject(i).getString("id"));
                        user.setName(jsonArray.getJSONObject(i).getString("name"));
                        user.setRemark(jsonArray.getJSONObject(i).getString("remark"));
                        userList.add(user);
                    }*/
                    userList = JSON.parseArray(json.getString("list"), User.class);
                    }
                }
            }
            return userList;
        }
    
        /**
         * 添加用户
         * 
         * @return
         */
        public static int addUser(User u) throws Exception {
            int code = 0;
            String result = doExecuteRequest("https://u.ifeige.cn/api/group_adduser", new HashMap<String, String>() {
                private static final long serialVersionUID = 1L;
    
                {
                    put("secret", SECRET_KEY);
                    put("token", APP_KEY);
                    put("uid", u.getId());
                }
            });
            if (StringUtils.isNotBlank(result)) {
                code = Integer.parseInt(JSON.parseObject(result).getString("code"));
            }
            return code;
        }
    
        /**
         * 删除用户测试
         * 
         * @param u
         * @return
         * @throws Exception
         */
        public static int deleteUser(User u) throws Exception {
            int code = 0;
            String result = doExecuteRequest("https://u.ifeige.cn/api/group_deleteuser", new HashMap<String, String>() {
                private static final long serialVersionUID = 1L;
    
                {
                    put("secret", SECRET_KEY);
                    put("token", APP_KEY);
                    put("uid", u.getId());
                }
            });
            if (StringUtils.isNotBlank(result)) {
                code = Integer.parseInt(JSON.parseObject(result).getString("code"));
            }
            return code;
        }
    }
    /**
     * 用户信息
     * @author jinghuaixin
     * @date 2020/05/13
     */
    class User {
        private String id;
    
        private String name;
    
        private String remark;
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getRemark() {
            return remark;
        }
    
        public void setRemark(String remark) {
            this.remark = remark;
        }
    
        @Override
        public String toString() {
            return "User [id=" + id + ", name=" + name + ", remark=" + remark + "]";
        }
    
    }
    

    其实编码比较简单,按照接口说明里面的url请求和传递参数就可以了,下面贴一张接口的说明:
    在这里插入图片描述
    在这里插入图片描述
    在群里列表点击发消息,会跳转到模板页面,模板ID就是template_id参数的值,点击使用说明或者测试,可以看到具体的参数格式:
    在这里插入图片描述
    这样,运行程序,你就可以接收到微信消息了:
    在这里插入图片描述
    在管理中心里面,你可以看到自己的二维码,当别人扫描二维码以后,你可以把他添加到指定群组下,这样他也能接收到你的消息了,当然了你可以写一个定时任务,定时扫描人员列表然后添加到指定群组下面,这样就省事多了,是不是很简单呢。

    一颗安安静静的小韭菜。文中如果有什么错误,欢迎指出。
  • 相关阅读:
    PowerShell尝试ssh登录
    PowerShell收发TCP消息包
    powershell对指定IP进行端口扫描
    PowerShell尝试登录ftp
    PowerShell批量扫描IP和端口
    《PowerShell 3.0 Advanced Admin handbook》已于今日上市
    PowerShell尝试登录SQL Server
    Docker 数据卷
    Dockerfile自定义镜像
    Docker 容器操作
  • 原文地址:https://www.cnblogs.com/c-Ajing/p/13448348.html
Copyright © 2011-2022 走看看