目的:给关注用户推送消息

    场景:自动化测试,运维监控,接口访问等报错预警。例如线上接口报错,发送提醒消息

准备工作:

 1:注册企业号(为什么不用公众号呢?)

企业号注册

2:常用参数介绍:

     1:CORPID    企业号唯一标志符号。
位置:点击首页企业名称,企业资料中有key:CorpID
2:CORPSECRET:
需要创建单独等应用。具体步骤,按照提示一步一步来即可。需关注2个参数
Secret 和 AgentId(用于区分给哪个应用推送消息)

3:发送消息准备工作:

 关注自己的企业号。(需要先绑定手机号)

4:纪录下需要发送消息的通讯录Id

用于给指定用户推送消息

5:代码结构

   1:获取token
2:发送消息

6源码:(在你执行下面代码的时候,AgentId改为你自己的)

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import javax.net.ssl.HttpsURLConnection;
import net.sf.json.JSONObject; import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.cookie.CookiePolicy;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.DefaultHttpParams; /**
* @author cxf
*/ public class SendWeChatMessage {
// 系统properties文件名称
// private static final String EMAILCONFIG = "emailAndMsgConfig";
// 发送消息类型
private final static String MSGTYPE = "text";
// 发送消息分组所有成员
private final static String TOPARTY = "@all";
// 获取配置文件中的值
private final static String CORPID = "上面提到的CORPID";// 需要自己申请,官网有试用企业号
// 可以申请试用
private final static String CORPSECRET = "上面提到的CORPSECRET";
// 获取访问权限码URL
private final static String ACCESS_TOKEN_URL = "https://qyapi.weixin.qq.com/cgi-bin/gettoken";
// 创建会话请求URL
private final static String CREATE_SESSION_URL = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token="; // 获取接口访问权限码
public String getAccessToken() {
HttpClient client = new HttpClient();
// PostMethod post = new PostMethod(ACCESS_TOKEN_URL);
GetMethod get = new GetMethod(ACCESS_TOKEN_URL);
get.releaseConnection();
get.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
NameValuePair[] param = { new NameValuePair("corpid", CORPID), new NameValuePair("corpsecret", CORPSECRET) };
// 设置策略,防止报cookie错误
DefaultHttpParams.getDefaultParams().setParameter("http.protocol.cookie-policy", CookiePolicy.BROWSER_COMPATIBILITY);
// 给post设置参数
get.setQueryString(param);
String result = null;
try {
client.executeMethod(get);
result = new String(get.getResponseBodyAsString().getBytes("utf-8"));
} catch (IOException e) {
e.printStackTrace();
}
// 将数据转换成json if(result==null||result==""){
System.out.println("*****************");
System.out.println("result:null");
}else {
System.out.println("result is not null:"+result.toString());
JSONObject jasonObject = JSONObject.fromObject(result);
result = (String) jasonObject.get("access_token");
// System.out.println(result); get.releaseConnection();
}
return result; } /**
* 企业接口向下属关注用户发送微信消息(实现方式一)
*
* @param touser
* 成员ID列表(消息接收者,多个接收者用‘|’分隔,最多支持1000个)。特殊情况:指定为@all,
* 则向关注该企业应用的全部成员发送
* @param toparty
* 部门ID列表,多个接收者用‘|’分隔,最多支持100个。当touser为@all时忽略本参数
* @param totag
* 标签ID列表,多个接收者用‘|’分隔。当touser为@all时忽略本参数
* @param content
* 消息内容
* @return
*/
@SuppressWarnings("deprecation")
public String sendWeChatMessage(String touser, String toparty, String totag, String content) {
HttpClient client = new HttpClient();
String ACCESS_TOKEN = getAccessToken();
StringBuffer sb = new StringBuffer();
sb.append("{");
sb.append("\"touser\":" + "\"" + touser + "\",");
sb.append("\"toparty\":" + "\"" + toparty + "\",");
sb.append("\"totag\":" + "\"" + totag + "\",");
sb.append("\"msgtype\":" + "\"" + "text" + "\",");
sb.append("\"agentid\":" + "\"" + "1000002" + "\",");
sb.append("\"text\":" + "{");
sb.append("\"content\":" + "\"" + content + "\"},");
sb.append("\"debug\":" + "\"" + "1" + "\"");
sb.append("}");
// 请求链接
String url = CREATE_SESSION_URL + ACCESS_TOKEN;
PostMethod post = new PostMethod(url);
post.releaseConnection();
post.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
// 设置策略,防止报cookie错误
DefaultHttpParams.getDefaultParams().setParameter("http.protocol.cookie-policy", CookiePolicy.BROWSER_COMPATIBILITY);
// 给post设置参数
post.setRequestBody(sb.toString());
String result = "";
try {
client.executeMethod(post);
result = new String(post.getResponseBodyAsString().getBytes("utf-8"));
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(result); post.releaseConnection(); return result; } /**
* 此方法可以发送任意类型消息
*
* @param msgType
* text|image|voice|video|file|news
* @param touser
* 成员ID列表(消息接收者,多个接收者用‘|’分隔,最多支持1000个)。特殊情况:指定为@all,
* 则向关注该企业应用的全部成员发送
* @param toparty
* 部门ID列表,多个接收者用‘|’分隔,最多支持100个。当touser为@all时忽略本参数
* @param totag
* 标签ID列表,多个接收者用‘|’分隔。当touser为@all时忽略本参数
* @param content
* msgType=text时 ,文本消息内容
* @param mediaId
* msgType=image|voice|video时 ,对应消息信息ID(--------)
* @param title
* msgType=news|video时,消息标题
* @param description
* msgType=news|video时,消息描述
* @param url
* msgType=news时,消息链接
* @param picurl
* msgType=news时,图片路径
* @param safe
* 表示是否是保密消息,0表示否,1表示是,默认0
*/
public void sendWeChatMsg(String msgType, String touser, String toparty, String totag, String content, String mediaId, String title,
String description, String url, String picurl, String safe) { URL uRl;
String ACCESS_TOKEN = getAccessToken();
// 拼接请求串
String action = CREATE_SESSION_URL + ACCESS_TOKEN;
// 封装发送消息请求json
StringBuffer sb = new StringBuffer();
sb.append("{");
sb.append("\"touser\":" + "\"" + touser + "\",");
sb.append("\"toparty\":" + "\"" + toparty + "\",");
sb.append("\"totag\":" + "\"" + totag + "\",");
if (msgType.equals("text")) {
sb.append("\"msgtype\":" + "\"" + msgType + "\",");
sb.append("\"text\":" + "{");
sb.append("\"content\":" + "\"" + content + "\"");
sb.append("}");
} else if (msgType.equals("image")) {
sb.append("\"msgtype\":" + "\"" + msgType + "\",");
sb.append("\"image\":" + "{");
sb.append("\"media_id\":" + "\"" + mediaId + "\"");
sb.append("}");
} else if (msgType.equals("voice")) {
sb.append("\"msgtype\":" + "\"" + msgType + "\",");
sb.append("\"voice\":" + "{");
sb.append("\"media_id\":" + "\"" + mediaId + "\"");
sb.append("}");
} else if (msgType.equals("video")) {
sb.append("\"msgtype\":" + "\"" + msgType + "\",");
sb.append("\"video\":" + "{");
sb.append("\"media_id\":" + "\"" + mediaId + "\",");
sb.append("\"title\":" + "\"" + title + "\",");
sb.append("\"description\":" + "\"" + description + "\"");
sb.append("}");
} else if (msgType.equals("file")) {
sb.append("\"msgtype\":" + "\"" + msgType + "\",");
sb.append("\"file\":" + "{");
sb.append("\"media_id\":" + "\"" + mediaId + "\"");
sb.append("}");
} else if (msgType.equals("news")) {
sb.append("\"msgtype\":" + "\"" + msgType + "\",");
sb.append("\"news\":" + "{");
sb.append("\"articles\":" + "[");
sb.append("{");
sb.append("\"title\":" + "\"" + title + "\",");
sb.append("\"description\":" + "\"" + description + "\",");
sb.append("\"url\":" + "\"" + url + "\",");
sb.append("\"picurl\":" + "\"" + picurl + "\"");
sb.append("}");
sb.append("]");
sb.append("}");
}
sb.append(",\"safe\":" + "\"" + safe + "\",");
sb.append("\"agentid\":" + "\"" + "1000002" + "\",");
sb.append("\"debug\":" + "\"" + "1" + "\"");
sb.append("}");
String json = sb.toString();
try { uRl = new URL(action); HttpsURLConnection http = (HttpsURLConnection) uRl.openConnection(); http.setRequestMethod("POST"); http.setRequestProperty("Content-Type", "application/json;charset=UTF-8"); http.setDoOutput(true); http.setDoInput(true); System.setProperty("sun.net.client.defaultConnectTimeout", "30000");//
// 连接超时30秒 System.setProperty("sun.net.client.defaultReadTimeout", "30000"); //
// 读取超时30秒 http.connect(); OutputStream os = http.getOutputStream(); os.write(json.getBytes("UTF-8"));// 传入参数 InputStream is = http.getInputStream(); int size = is.available(); byte[] jsonBytes = new byte[size]; is.read(jsonBytes); String result = new String(jsonBytes, "UTF-8"); System.out.println("请求返回结果:" + result); os.flush(); os.close(); } catch (Exception e) { e.printStackTrace(); }
} /**
* 企业接口向下属关注用户发送微信消息(实现方式二)
*
* @param touser
* 成员ID列表(消息接收者,多个接收者用‘|’分隔,最多支持1000个)。特殊情况:指定为@all,
* 则向关注该企业应用的全部成员发送
* @param toparty
* 部门ID列表,多个接收者用‘|’分隔,最多支持100个。当touser为@all时忽略本参数
* @param totag
* 标签ID列表,多个接收者用‘|’分隔。当touser为@all时忽略本参数
* @param content
* 消息内容
* @param safe
* 消息是否保密
* @return
*/
public void sendWeChatMsgText(String touser, String toparty, String totag, String content, String safe) { URL uRl;
String ACCESS_TOKEN = getAccessToken();
// 拼接请求串
String action = CREATE_SESSION_URL + ACCESS_TOKEN;
// 封装发送消息请求json
StringBuffer sb = new StringBuffer();
sb.append("{");
sb.append("\"touser\":" + "\"" + touser + "\",");
sb.append("\"toparty\":" + "\"" + toparty + "\",");
sb.append("\"totag\":" + "\"" + totag + "\","); sb.append("\"msgtype\":" + "\"" + MSGTYPE + "\",");
sb.append("\"text\":" + "{");
sb.append("\"content\":" + "\"" + content + "\"");
sb.append("}"); sb.append(",\"safe\":" + "\"" + safe + "\",");
sb.append("\"agentid\":" + "\"" + "1000002" + "\",");
sb.append("\"debug\":" + "\"" + "1" + "\"");
sb.append("}");
String json = sb.toString();
System.out.println("==========================");
System.out.println(json);
System.out.println("==========================");
try { uRl = new URL(action); HttpsURLConnection http = (HttpsURLConnection) uRl.openConnection(); http.setRequestMethod("POST"); http.setRequestProperty("Content-Type", "application/json;charset=UTF-8"); http.setDoOutput(true); http.setDoInput(true); System.setProperty("sun.net.client.defaultConnectTimeout", "30000");//
// 连接超时30秒 System.setProperty("sun.net.client.defaultReadTimeout", "30000"); //
// 读取超时30秒 http.connect(); OutputStream os = http.getOutputStream(); os.write(json.getBytes("UTF-8"));// 传入参数 InputStream is = http.getInputStream(); int size = is.available(); byte[] jsonBytes = new byte[size]; is.read(jsonBytes); String result = new String(jsonBytes, "UTF-8"); System.out.println("请求返回结果:" + result); os.flush(); os.close(); } catch (Exception e) { e.printStackTrace(); }
} public static void main(String[] args) {
SendWeChatMessage weChat = new SendWeChatMessage();
weChat.sendWeChatMsgText("ChengXueFeng", "1", "", "微信测试", "0");
// weChat.sendWeChatMsg("text", "mxlydx", "4", "", "测试senMsg", "", "",
// "", "", "", "0");
// weChat.sendWeChatMessage("mxlydq", "2", "", "Hi");
}

  

转自:https://www.jianshu.com/p/b0b81a986e35

java-给微信推送消息 利用企业微信的更多相关文章

  1. Websocket实现Java后台主动推送消息到前台

    写在前面 需求: 项目测试, 缺少用户登录失败给admin推送消息, 想到这个方式, 当用户登录失败时, admin用户会在页面看到咣咣乱弹的alert. 正文 pom.xml <!-- web ...

  2. 免注册公众号的三种微信推送消息服务的C#代码实现

    有时候我们需要监控一些网络上的变化,但是每次去刷新网页却又很麻烦,而且大部分刷新的时候网页并没有更新.那么有没有一个工具,可以监控网页变化,并将变化的结果推送到手机微信上呢? 这里有很多应用场景,比如 ...

  3. python使用微信推送消息

    from wxpy import * #该库主要是用来模拟与对接微信操作的 import requests from datetime import datetime import time impo ...

  4. php实现微信推送消息

    一.<?phpnamespace Org\Weixin;class OrderPush{ protected $appid; protected $secrect; protected $acc ...

  5. node-wechat 微信推送消息

    https://github.com/nswbmw/node-wechat/blob/master/index.js

  6. Python接入企业微信 - 推送信息到内部群里

    前言 之前一篇文章提到了使用wechatpy库来实现企业微信应用登录:Django + Taro 前后端分离项目实现企业微信登录 其实这个库可以实现的功能非常多,基本微信开发涉及到的功能都能实现. 本 ...

  7. Docker系列——Grafana+Prometheus+Node-exporter微信推送(三)

    在之前博文中,已经成功的实现了邮件推送.目前主流的办公终端,就是企业微信.钉钉.飞书.今天来分享下微信推送,我们具体来看. 企业微信 在配置企业微信推送时,需要有微信企业,具体如何注册.使用,另外百度 ...

  8. 小程序推送消息(Template)

    最近搞小程序模拟推送消息,才发现小程序推送消息接口准备下线. 请注意,小程序模板消息接口将于2020年1月10日下线,开发者可使用订阅消息功能 咱们现在有需求,所以不管下不下,完成再说. 一:”获取a ...

  9. 使用ESP8266nodeMCU 向微信推送模板数据

    使用HTTPS协议向微信公众号推送消息,(使用ESP8266的低成本实现) 前几天被朋友问到这个东西的实现方式,花了一下午时间研究一下,特此记录.没有排版比较乱. 一丶前往微信公众平台注册微信微信公众 ...

随机推荐

  1. Twitter的RPC框架Finagle简介

    Twitter的RPC框架Finagle简介 http://www.infoq.com/cn/news/2014/05/twitter-finagle-intro

  2. XML 之快速入门

    XML 简介 - XML, 即可扩展标记语言(eXtensible Markup Language), 是一种标记语言. - 标记型语言: 使用标签进行操作 - 可扩展: XML 的标签可以自定义 - ...

  3. JS全选checkbox

    <!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/ ...

  4. 贪玩ML系列之一个BP玩一天

    手写串行BP算法,可调batch_size 既要:1.输入层f(x)=x  隐藏层sigmoid 输出层f(x)=x 2.run函数实现单条数据的一次前馈 3.train函数读入所有数据for循环处理 ...

  5. JS练习--嵌套列表(for循环)

    CSS: ;;} ul,li{list-style: none;} .cont{ width: 600px; margin:30px auto; } .cont h3{ border-bottom: ...

  6. pandas删除包含指定内容的行

    Outline 处理数据时,遇到文件中包含一些不需要的数据(行),需要把这些不符合要求的行给删除掉. 例如:该数据中应该都是2000年的数据,但是包含了一些2001年的数据,所以需要把2001年的数据 ...

  7. Pandas 之 过滤DateFrame中所有小于0的值并替换

    Outline 前几天,数据清洗时有用到pandas去过滤大量数据中的“负值”: 把过滤出来的“负值”替换为“NaN”或者指定的值. 故做个小记录. 读取CSV文件 代码: import pandas ...

  8. 爬虫任务一:使用httpclient去爬取百度新闻首页的新闻标题和url,编码是utf-8

    第一个入手的爬虫小任务: maven工程 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=" ...

  9. php foreach函数的用法

    php foreach函数用法举例.  Foreach 函数(PHP4/PHP5) foreach 语法结构提供了遍历数组的简单方式. foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类 ...

  10. nginx规则总结

    location正则写法 一个示例: location = / { # 精确匹配 / ,主机名后面不能带任何字符串 [ configuration A ] } location / { # 因为所有的 ...