第一步:創建微信消息發送實體
public class TestMessage { //openid private String touser; //消息類型 private String msgtype; //文件存儲的ID private Map<String,Object> voice ; public String getTouser() { return touser; } public void setTouser(String touser) { this.touser = touser; } public String getMsgtype() { return msgtype; } public void setMsgtype(String msgtype) { this.msgtype = msgtype; } public Map<String, Object> getVoice() { return voice; } public void setVoice(Map<String, Object> voice) { this.voice = voice; } }
第二步:微信token獲得業務接口
@FeignClient(value = "weixin-token-1") public interface TokenFeignService { /** * 進行token請求 * @param * @return */ @RequestMapping(value = "/getToken",method = RequestMethod.GET) String getToken(); }
第三步:信息實體類
public class ErrorCodeText { public static String errorMsg(int errorcode) { String errmsg = ""; switch (errorcode) { case -1: errmsg = "系統繁忙 "; break; case 0: errmsg = "請求成功 "; break; case 40001: errmsg = "獲取access_token時Secret錯誤,或者access_token無效 "; break; case 40002: errmsg = "不合法的憑證類型"; break; case 40003: errmsg = "不合法的UserID"; break; case 40004: errmsg = "不合法的媒體文件類型 "; break; case 40005: errmsg = "不合法的文件類型 "; break; case 40006: errmsg = "不合法的文件大小"; break; case 40007: errmsg = "不合法的媒體文件id"; break; case 40008: errmsg = "不合法的消息類型 "; break; case 40013: errmsg = "不合法的corpid "; break; case 40014: errmsg = "不合法的access_token"; break; case 40015: errmsg = "不合法的菜單類型"; break; case 40016: errmsg = "不合法的按鈕個數"; break; case 40017: errmsg = "不合法的按鈕類型"; break; case 40018: errmsg = "不合法的按鈕名字長度"; break; case 40019: errmsg = "不合法的按鈕KEY長度或未設置key值"; break; case 40020: errmsg = "不合法的按鈕URL長度 "; break; case 40021: errmsg = "不合法的菜單版本號 "; break; case 40022: errmsg = "不合法的子菜單級數"; break; case 40023: errmsg = "不合法的子菜單按鈕個數"; break; case 40024: errmsg = "不合法的子菜單按鈕類型"; break; case 40025: errmsg = "不合法的子菜單按鈕名字長度"; break; case 40026: errmsg = "不合法的子菜單按鈕KEY長度"; break; case 40027: errmsg = "不合法的子菜單按鈕URL長度"; break; case 40028: errmsg = "不合法的自定義菜單使用員工"; break; case 40029: errmsg = "不合法的oauth_code"; break; case 40031: errmsg = "不合法的UserID列表"; break; case 40032: errmsg = "不合法的UserID列表長度"; break; case 40033: errmsg = "不合法的請求字符,不能包含\\uxxxx格式的字符 "; break; case 40035: errmsg = "不合法的參數 "; break; case 40038: errmsg = "不合法的請求格式 "; break; case 40039: errmsg = "不合法的URL長度"; break; case 40040: errmsg = "不合法的插件token"; break; case 40041: errmsg = "不合法的插件id"; break; case 40042: errmsg = "不合法的插件會話"; break; case 40048: errmsg = "url中包含不合法domain"; break; case 40054: errmsg = "不合法的子菜單url域名"; break; case 40055: errmsg = "不合法的按鈕url域名 "; break; case 40056: errmsg = "不合法的agentid"; break; case 40057: errmsg = "不合法的callbackurl"; break; case 40058: errmsg = "不合法的紅包參數 "; break; case 40059: errmsg = "不合法的上報地理位置標誌位 "; break; case 40060: errmsg = "設置上報地理位置標誌位時沒有設置callbackurl"; break; case 40061: errmsg = "設置應用頭像失敗"; break; case 40062: errmsg = "不合法的應用模式"; break; case 40063: errmsg = "紅包參數爲空"; break; case 40064: errmsg = "管理組名字已存在"; break; case 40065: errmsg = "不合法的管理組名字長度"; break; case 40066: errmsg = "不合法的部門列表"; break; case 40067: errmsg = "標題長度不合法 "; break; case 40068: errmsg = "不合法的標籤ID"; break; case 40069: errmsg = "不合法的標籤ID列表"; break; case 40070: errmsg = "列表中所有標籤(用戶)ID都不合法 "; break; case 40071: errmsg = "不合法的標籤名字,標籤名字已經存在 "; break; case 40072: errmsg = "不合法的標籤名字長度"; break; case 40073: errmsg = "不合法的openid"; break; case 40074: errmsg = "news消息不支持指定爲高保密消息"; break; case 41001: errmsg = "缺少access_token參數 "; break; case 41002: errmsg = "缺少corpid參數"; break; case 41003: errmsg = "缺少refresh_token參數"; break; case 41004: errmsg = "缺少secret參數"; break; case 41005: errmsg = "缺少多媒體文件數據"; break; case 41006: errmsg = "缺少media_id參數"; break; case 41007: errmsg = "缺少子菜單數據"; break; case 41008: errmsg = "缺少oauth code"; break; case 41009: errmsg = "缺少UserID"; break; case 41010: errmsg = "缺少url"; break; case 41011: errmsg = "缺少agentid"; break; case 41012: errmsg = "缺少應用頭像mediaid"; break; case 41013: errmsg = "缺少應用名字"; break; case 41014: errmsg = "缺少應用描述"; break; case 41015: errmsg = "缺少Content"; break; case 41016: errmsg = "缺少標題"; break; case 41017: errmsg = "缺少標籤ID"; break; case 41018: errmsg = "缺少標籤名字 "; break; case 42001: errmsg = "access_token超時 "; break; case 42002: errmsg = "refresh_token超時"; break; case 42003: errmsg = "oauth_code超時 "; break; case 42004: errmsg = "插件token超時"; break; case 43001: errmsg = "需要GET請求"; break; case 43002: errmsg = "需要POST請求"; break; case 43003: errmsg = "需要HTTPS"; break; case 43004: errmsg = "需要接收者關注"; break; case 43005: errmsg = "需要好友關係"; break; case 43006: errmsg = "需要訂閱"; break; case 43007: errmsg = "需要授權"; break; case 43008: errmsg = "需要支付授權"; break; case 43009: errmsg = "需要員工已關注"; break; case 43010: errmsg = "需要處於回調模式"; break; case 43011: errmsg = "需要企業授權"; break; case 44001: errmsg = "多媒體文件爲空"; break; case 44002: errmsg = "POST的數據包爲空"; break; case 44003: errmsg = "圖文消息內容爲空"; break; case 44004: errmsg = "文本消息內容爲空"; break; case 45001: errmsg = "多媒體文件大小超過限制"; break; case 45002: errmsg = "消息內容超過限制"; break; case 45003: errmsg = "標題字段超過限制"; break; case 45004: errmsg = "描述字段超過限制"; break; case 45005: errmsg = "鏈接字段超過限制"; break; case 45006: errmsg = "圖片鏈接字段超過限制"; break; case 45007: errmsg = "語音播放時間超過限制"; break; case 45008: errmsg = "圖文消息超過限制"; break; case 45009: errmsg = "接口調用超過限制"; break; case 45010: errmsg = "創建菜單個數超過限制"; break; case 45015: errmsg = "回覆時間超過限制"; break; case 45016: errmsg = "系統分組,不允許修改"; break; case 45017: errmsg = "分組名字過長"; break; case 45018: errmsg = "分組數量超過上限"; break; case 45024: errmsg = "賬號數量超過上限"; break; case 46001: errmsg = "不存在媒體數據"; break; case 46002: errmsg = "不存在的菜單版本"; break; case 46003: errmsg = "不存在的菜單數據"; break; case 46004: errmsg = "不存在的員工"; break; case 47001: errmsg = "解析JSON/XML內容錯誤"; break; case 48002: errmsg = "Api禁用"; break; case 50001: errmsg = "redirect_uri未授權"; break; case 50002: errmsg = "員工不在權限範圍"; break; case 50003: errmsg = "應用已停用"; break; case 50004: errmsg = "員工狀態不正確(未關注狀態) "; break; case 50005: errmsg = "企業已禁用"; break; case 60001: errmsg = "部門長度不符合限制"; break; case 60002: errmsg = "部門層級深度超過限制"; break; case 60003: errmsg = "部門不存在"; break; case 60004: errmsg = "父親部門不存在"; break; case 60005: errmsg = "不允許刪除有成員的部門"; break; case 60006: errmsg = "不允許刪除有子部門的部門"; break; case 60007: errmsg = "不允許刪除根部門"; break; case 60008: errmsg = "部門名稱已存在"; break; case 60009: errmsg = "部門名稱含有非法字符"; break; case 60010: errmsg = "部門存在循環關係"; break; case 60011: errmsg = "管理員權限不足,(user/department/agent)無權限"; break; case 60012: errmsg = "不允許刪除默認應用"; break; case 60013: errmsg = "不允許關閉應用"; break; case 60014: errmsg = "不允許開啓應用"; break; case 60015: errmsg = "不允許修改默認應用可見範圍"; break; case 60016: errmsg = "不允許刪除存在成員的標籤"; break; case 60017: errmsg = "不允許設置企業"; break; case 60102: errmsg = "UserID已存在"; break; case 60103: errmsg = "手機號碼不合法"; break; case 60104: errmsg = "手機號碼已存在"; break; case 60105: errmsg = "郵箱不合法"; break; case 60106: errmsg = "郵箱已存在"; break; case 60107: errmsg = "微信號不合法"; break; case 60108: errmsg = "微信號已存在"; break; case 60109: errmsg = "QQ號已存在"; break; case 60110: errmsg = "部門個數超出限制"; break; case 60111: errmsg = "UserID不存在"; break; case 60112: errmsg = "成員姓名不合法"; break; case 60113: errmsg = "身份認證信息(微信號/手機/郵箱)不能同時爲空 "; break; case 60114: errmsg = "性別不合法"; break; case 65304: errmsg = "MatchRule信息爲空"; break; case 65305: errmsg = "個性化菜單數量受限"; break; case 65306: errmsg = "不支持個性化菜單的帳號"; break; case 65307: errmsg = "個性化菜單信息爲空"; break; case 65309: errmsg = "個性化菜單開關處於關閉狀態"; break; case 65308: errmsg = "包含沒有響應類型的button"; break; default: errmsg = "沒有此錯誤碼! "; break; } return errmsg; } }
第四步:證書任務管理器
public class MyX509TrustManager implements X509TrustManager { /** * 檢查客戶端證書 */ @Override public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { } /** * 檢查服務器證書 */ @Override public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { } /** * 返回信任的證書數組 */ @Override public X509Certificate[] getAcceptedIssuers() { return null; } }
第五步:語音信息推送
@Service public class WeixinMessageServiceImpl implements WeixinMessageService { private static Logger log = LoggerFactory.getLogger(WeixinMessageServiceImpl.class); /** * 客服接口給用戶發送消息接口 */ public static String content_openid="https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN"; //獲得微信令牌獲取對象 @Autowired private TokenFeignService tokenFeignService; /** * * @param openid 用戶openid * @param mediaId 文件存儲的ID * @return */ @Override public ResponseVO messageTest(String openid, String mediaId){ //獲得令牌 String accessToken = tokenFeignService.getToken(); //創建返回實體對象 ResponseVO vo = new ResponseVO(); //獲得新的token String url=content_openid.replace("ACCESS_TOKEN", accessToken); TestMessage testMessage=new TestMessage(); //設置消息的類型 testMessage.setMsgtype("voice"); //設置要發送的openid集合 testMessage.setTouser(openid); //創建集合 Map<String,Object> map=new HashMap<>(); //設置發送語音ID map.put("media_id",mediaId); testMessage.setVoice(map); //將測試消息對象轉成json String jsonTestMessage = JSONObject.toJSONString(testMessage); //調用接口進行發送 JSONObject jsonObject = httpRequest(url, "POST", jsonTestMessage); log.error("語音消息發送失敗 errcode:{" + jsonObject.getInteger("errcode")+"} " + "errmsg:{"+jsonObject.getString("errmsg")+"} "); Integer errcode = jsonObject.getInteger("errcode"); String errorCodeText = ErrorCodeText.errorMsg(errcode); if (errcode == 0){ vo.setSuccess(true); }else{ vo.setSuccess(false); } vo.setCode(errcode); vo.setText(errorCodeText); return vo; } }