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参数的值,点击使用说明或者测试,可以看到具体的参数格式:
在这里插入图片描述
这样,运行程序,你就可以接收到微信消息了:
在这里插入图片描述
在管理中心里面,你可以看到自己的二维码,当别人扫描二维码以后,你可以把他添加到指定群组下,这样他也能接收到你的消息了,当然了你可以写一个定时任务,定时扫描人员列表然后添加到指定群组下面,这样就省事多了,是不是很简单呢。

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值