微信公衆號開發(三)

微信公衆號開發json

 

第三章   素材api

1.臨時素材緩存

公衆號常常有須要用到一些臨時性的多媒體素材的場景,例如在使用接口特別是發送消息時,對多媒體文件、多媒體消息的獲取和調用等操做,是經過media_id來進行的。素材管理接口對全部認證的訂閱號和服務號開放(注:自定義菜單接口和素材管理接口向第三方平臺旗下未認證訂閱號開放)。經過本接口,公衆號能夠新增臨時素材(即上傳臨時多媒體文件)。服務器

2.方法微信

在進行媒體(圖片,語音,視頻,音樂)消息開發時,需先上傳媒體到微信服務器,獲得media_id,才能進行接下來的後續開發app

3.素材格式:ui

具體是,圖片大小不超過2M,支持bmp/png/jpeg/jpg/gif格式,語音大小不超過2M,長度不超過60秒(公衆平臺官網能夠在文章中插入小於30分鐘的語音,但這些語音不能用於羣發等場景,只能放在文章內,這方面接口暫不支持),支持mp3/wma/wav/amr格式url

 

臨時素材參數說明:spa

    

 

/**
     * 上傳臨時素材
     * @param api
     * @param filePath
     * @param accessToken
     * @param type
     * @return
     * @throws IOException
     */
    public static String uploadLs(String filePath,String accessToken,String type) throws IOException{
        JSONObject jsonObject = uploadCommon(UPLOAD_URL, filePath, accessToken, type);
        String typeName = "media_id";
        if(!"image".equals(type)){//若是是圖片格式的直接用media_id,不然用type拼接  _media_id
            typeName = type + "_media_id";
        }
        String mediaId = jsonObject.getString(typeName);
        return mediaId;
    }
    
    
    /**
     * 上傳圖文消息內的圖片獲取URL
     * @param filePath
     * @param accessToken
     * @param type
     * @return
     * @throws IOException
     */
    public static JSONObject uploadImage(String filePath,String accessToken) throws IOException{
        JSONObject jsonObject = uploadCommon(UPLOAD_SEND_IMAGE, filePath, accessToken, null);
        return jsonObject;
    }
    
    

    /**
     * 文件上傳 (通用)
     * @param filePath
     * @param accessToken
     * @param Type
     * @return
     * @throws IOException
     */
    public static JSONObject uploadCommon(String api,String filePath,String accessToken,String type) throws IOException{
        File file = new File(filePath);
        if(!file.exists() || !file.isFile()){
            throw new IOException("文件不存在");
        }
        
        String url = null;
        if(type==null){
            url = api.replace("ACCESS_TOKEN", accessToken);
        }else{
            url = api.replace("ACCESS_TOKEN", accessToken).replace("TYPE", type);
        }
        
        
        URL urlObj = new URL(url);
        //鏈接
        HttpURLConnection con = (HttpURLConnection) urlObj.openConnection();
        
        con.setRequestMethod("POST");
        con.setDoInput(true);
        con.setDoOutput(true);
        con.setUseCaches(false);//忽略緩存
        
        //設置請求頭信息
        con.setRequestProperty("Connection", "Keep-Alive");
        con.setRequestProperty("Charset", "UTF-8");
        
        //設置邊界
        String BOUNDARY = "----------" + System.currentTimeMillis();
        con.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + BOUNDARY);
        
        StringBuilder sb = new StringBuilder();
        sb.append("--");
        sb.append(BOUNDARY);
        sb.append("\r\n");
        sb.append("Content-Disposition:form-data;name=\"file\";filename=\"" + file.getName() + "\"\r\n");
        sb.append("Content-Type:application/octet-stream\r\n\r\n");
        
        byte[] head = sb.toString().getBytes("UTF-8");
        
        //得到輸出流
        OutputStream out = new DataOutputStream(con.getOutputStream());
        //輸出表頭
        out.write(head);
        
        //文件正文部分
        //把文件以流的方式 推入到url中
        DataInputStream in = new DataInputStream(new FileInputStream(file));
        int bytes = 0;
        byte[] bufferOut = new byte[1024];
        while ((bytes = in.read(bufferOut))!=-1){
            out.write(bufferOut,0,bytes);
        }
        in.close();
        
        //結尾部分
        byte[] foot = ("\r\n--" + BOUNDARY + "--\r\n").getBytes("UTF-8");//定義最後數據分割線
        
        out.write(foot);
        
        out.flush();
        out.close();
        
        StringBuffer buffer = new StringBuffer();
        BufferedReader reader = null;
        String result = null;
        try {
            //定義BufferedReader輸入流來讀取url的響應
            reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
            String line = null;
            while((line = reader.readLine())!=null){
                buffer.append(line);
            }
            if(result == null){
                result = buffer.toString();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(reader!=null){
                reader.close();
            }
        }
    
        JSONObject jsonObj = JSONObject.fromObject(result);
        //System.out.println(jsonObj);
        
        /*String typeName = "media_id";
        if(!"image".equals(type)){//若是是圖片格式的直接用media_id,不然用type拼接  _media_id
            typeName = type + "_media_id";
        }
        String mediaId = jsonObj.getString(typeName);*/
        return jsonObj;
    }


/**
     * 上傳圖文消息素材(推送前一步)
     * @param token
     * @param news
     * @return
     */
    public static JSONObject updateSendNews(String token,String news){
        String url = UPLOAD_SEND_NEWS.replace("ACCESS_TOKEN", token);
        JSONObject jsonObject = doPostStr(url, news);
        return jsonObject;
    }
    
    
    
    /**
     * 圖文消息羣發推送
     * @param token
     * @param sendnews
     * @return
     */
    public static JSONObject sendNews(String token,String sendnews){
        String url = SEND_NEWS.replace("ACCESS_TOKEN", token);
        JSONObject jsonObject = doPostStr(url, sendnews);
        return jsonObject;
    }
    
    
    
    
    /**
     * 圖文消息預覽
     * @param token
     * @param previewnews
     * @return
     */
    public static JSONObject previewNews(String token,String previewnews){
        String url = PREVIEW_NEWS.replace("ACCESS_TOKEN", token);
        JSONObject jsonObject = doPostStr(url, previewnews);
        return jsonObject;
    }

 (下一章:微信公衆號-消息回覆)code

相關文章
相關標籤/搜索