平时我们老是在网上看到使用python操作微信发送消息,这种功能java能不能实现呢,答案是可以的,这里我借助飞鸽快信实现一下。想了解飞鸽快信更多请访问官网。
1.访问飞鸽快信:https://u.ifeige.cn/login
使用微信扫码登录,并关注飞鸽快信的微信公众号:
2.添加一个群组,添加一下人员:
3.查看一下密匙:
注意:在编码中,用到最多的就是密匙SECRET KEY和群组app_key!
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参数的值,点击使用说明或者测试,可以看到具体的参数格式:
这样,运行程序,你就可以接收到微信消息了:
在管理中心里面,你可以看到自己的二维码,当别人扫描二维码以后,你可以把他添加到指定群组下,这样他也能接收到你的消息了,当然了你可以写一个定时任务,定时扫描人员列表然后添加到指定群组下面,这样就省事多了,是不是很简单呢。
一颗安安静静的小韭菜。文中如果有什么错误,欢迎指出。