微信告警功能开发

作者:陆金龙    发表时间:2023-05-28 06:22   

关键词:  

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);

}