通過微信公衆號給微信用戶發送音頻信息

第一步:創建微信消息發送實體

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_tokenSecret錯誤,或者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;

    }
}


發佈了42 篇原創文章 · 獲贊 28 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章