微信告警功能开发
1.申请企业微信账号
l 企业ID(CorpId),发送消息或管理用户get_token都需要用到
自建应用,得到代理应用ID和密钥:
l 代理应用ID(AgentID):1000002 ,发送消息时,标注是谁发出的消息
l 应用密钥(AppSecret):
l 通讯录同步密钥(BookSecret):
2.application.properties中添加API的url配置
#微信 获取token地址
wx.gettokenUrl = https://qyapi.weixin.qq.com/cgi-bin/gettoken
#微信 创建用户地址
wx.createUserUrl = https://qyapi.weixin.qq.com/cgi-bin/user/create?access_token=
#微信 修改用户信息地址
wx.updateUserUrl = https://qyapi.weixin.qq.com/cgi-bin/user/update?access_token=
#微信 删除用户信息地址
wx.delUserUrl = https://qyapi.weixin.qq.com/cgi-bin/user/delete?access_token=
#微信 发送通知地址
wx.messageSendURI = https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=
3.获取access_token
很多地方需要用到access_token,需要corpid和corpsecret两个参数。
l 发送消息的access_token 使用企业ID(CorpId)和企业密钥(CorpSecret)来获取。
发送消息还需要用到代理应用ID(AgentAppID)
l 管理用户的access_token 使用企业ID(CorpId)和通讯录同步密钥(BookSecret)来获取。
/**
* 获取企业号的accessToken
*/
private String getAccessToken(String corpid, String secret) {
String url = gettokenUrl + "?corpid=" + corpid + "&corpsecret=" + secret;
JSONObject result = HttpUtil.doGetRequest(url);
if (result.getInteger("errcode") == 0) {
return result.getString("access_token");
}
return accessToken;
}
4.企业用户管理
上述发送消息中用的用户Id,来源于企业微信的用户,是提供API进行管理的。
4.1 创建用户
String accessToken = getAccessToken(alertConfig.getWxCorpid(), alertConfig.getWxBookSecret());
String postUrl = createUserUrl + accessToken;
JSONObject params = new JSONObject();
params.put("userid", request.getParameter("userid"));
params.put("name", request.getParameter("name"));
params.put("email", request.getParameter("email"));
params.put("mobile", request.getParameter("mobile"));
params.put("gender", request.getParameter("gender"));
params.put("department", request.getParameter("department"));
JSONObject response = HttpUtil.doPostRequest(postUrl, params);
4.2 更新用户
String accessToken = getAccessToken(alertConfig.getWxCorpid(), alertConfig.getWxBookSecret());
String postUrl = updateUserUrl + accessToken;
JSONObject params = new JSONObject();
//参数准备同创建用户,此处略
JSONObject response = HttpUtil.doPostRequest(postUrl, params);
4.3 删除用户
String accessToken = getAccessToken(alertConfig.getWxCorpid(), alertConfig.getWxBookSecret());
String userid = params.getString("userId");
String requestUrl = delUserUrl + accessToken + "&userid=" + userid;
JSONObject response = HttpUtil.doGetRequest(requestUrl);
5.发送消息
SystemConfigPojo alertConfig = alertConfigDao.getAlertConfig();
// 使用企业ID(CorpId)和企业密钥(CorpSecret)来获取accessToken
String accessToken = getAccessToken(alertConfig.getWxCorpid(), alertConfig.getWxCorpsecret());
// 发送通知的接口URL
String postUrl = messageSendURI + accessToken;
// 使用代理ID和消息内容构建消息参数
JSONObject params = new JSONObject();
JSONObject wxText= new JSONObject();
wxText.put("content",message);
params.put("agentid",alertConfig.getWxAgentID());
params.put("text",wxText);
params.put("touser",userId);//第4节中通过API接口创建的企业微信中成员用户Id
//请求接口发送
JSONObject response = HttpUtil.doPostRequest(postUrl, params);
6.发送微信客服信息
// 获取微信小程序token地址
private static String getAppTokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential";
//微信小程序appid
private static String appId = "wx********";
//微信小程序secret
private static String secret = "**dd*******";
// 获取登录用户的openId url
private static String getOpenIdUrl ="https://api.weixin.qq.com/sns/jscode2session?grant_type=authorization_code";
// 发送客服信息url
private static String sendCSMSGuRL="https://api.weixin.qq.com/cgi-bin/message/custom/send?";
//获取微信小程序的accessToken,与第3节企业微信accessToken参数有区别
private static String getAppAccessToken(String appId, String secret) {
String url = getAppTokenUrl + "&appid=" + appId + "&secret=" + secret;
JSONObject result = HttpUtil.doGetRequest(url);
return result.getString("access_token");
}
//获取微信小程序登录的 openid
// 这里的code是微信小程序登录成功后的res.code,由小程序调用接口时传过来
// wx.login({
// success: function (res) {
// res.code
// }
private static String getOpenId(String appId, String secret, String code) {
String url = getOpenIdUrl + "&appid=" + appId + "&secret=" + secret + "&js_code=" + code;
JSONObject result = HttpUtil.doGetRequest(url);
if( null != result.getString("openid") && !"".equals(result.getString("openid"))) {
return result.getString("openid");
}
return "";
}
/**
* 发送微信客服信息
* @param code 微信小程序登录成功后的res.code
*/
public static void sendCSMsg(String code) {
String openId = getOpenId(appId,secret,code);
String access_token = getAppAccessToken(appId, secret);
String url = sendCSMSGuRL + "access_token=" + access_token;
JSONObject param = new JSONObject();
param.put("touser", openId);
param.put("msgtype", "link");
WXLink link = new WXLink();
link.setTitle("告警信息推送设置");
link.setDescription("点击,识别二维码设置微信信息推送功能");
link.setThumb_url("https://****/images/login_logo.png");
link.setUrl("https://*****/wxImage/wxqrcode.png");
param.put("link", link);
JSONObject result = HttpUtil.doPostRequest(url, param);
}