项目场景:
企业微信应用发送定时任务消息
需求文本消息
遇到的bug
1.本地测试遇见“errcode“:60020,“errmsg“:“not allow to access from your ip
需要添加应用可信Ip,这里面编辑就行
2.发送报错errcode":40008,"errmsg":"Warning: wrong json format
我这里是参数入错
这是官方文档
本地因为用的阿里规范(驼峰的),匹配不到,报错
代码实现:
获取发送目标 删减的,成员Id根据项目获取
List<User> list = new ArrayList<>(); String user = ""; for (int i = 0; i<list.size();i++){ if (i < list.size()-1 ){ String userCode = list.get(i).getUserId(); user += userCode+"|"; }else{ String userCode = list.get(i).getUserId(); user += userCode; } }
发送消息:
/* 封装消息 */ @Override public AjaxResult sendMessages(String toUser, String contentValue) { //创建文本消息对象 TextMessageVo message = new TextMessageVo(); message.setTouser(toUser); message.setMsgtype("text"); TextVo text = new TextVo(); text.setContent(contentValue); message.setText(text); //发送消息 AjaxResult ajaxResult = sendMessage(message); return ajaxResult; } /** * 公共方法:发送消息 * @param message */ public AjaxResult sendMessage(BaseMessageVo message){ Integer agentId = Integer.valueOf(DictUtils.getDictValue("enterprise_wx","agentId")); message.setAgentid(agentId); // 获取 accessToken String accessToken = weiXinQiYeUtil.accessToken(); // 1.获取 json 字符串:将 message 对象转换为 json 字符串 Gson gson = new Gson(); String jsonMessage = gson.toJson(message); System.out.println("jsonTextMessage:"+jsonMessage); // 2.请求的 url String sendMessageUrl = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token="+accessToken; // 3.调用接口,发送消息 JSONObject jsonObject = HttpRequestUtil.httpRequest(sendMessageUrl, "POST", jsonMessage); System.out.println("jsonObject:"+jsonObject.toString()); // 4.错误消息处理 if (null != jsonObject) { if (0 != jsonObject.getByte("errcode")) { return AjaxResult.error("发送消息失败!"); } return AjaxResult.success(); } return null; }@Data public class TextMessageVo extends BaseMessageVo{ /** * 文本 */ private TextVo text; /** * 表示是否是保密消息,0表示否,1表示是,默认0 */ private int safe; }@Data public class BaseMessageVo { /** * 成员ID列表(消息接收者,多个接收者用‘|’分隔,最多支持1000个)。 * 非必传 * 特殊情况:指定为@all,则向该企业应用的全部成员发送 * touser、toparty、totag不能同时为空。 */ private String touser; /** * 部门ID列表,多个接收者用‘|’分隔,最多支持100个。 * 非必传 * 当touser为@all时忽略本参数 */ private String toparty; /** * 标签ID列表,多个接收者用‘|’分隔,最多支持100个。 * 非必传 * 当touser为@all时忽略本参数 */ private String totag; /** * 消息类型 * 必传 */ private String msgtype; /** * 企业应用的id。可在应用的设置页面查看 * 必传 */ private int agentid; }@Data public class TextVo { /** * 消息内容,最长不超过2048个字节 * 必传 */ private String content; }