初識企業微信(企業號)開發(4)

前面說了一些後臺用到的接口,在介紹一下JSSDK 的網頁受權:web

企業微信JS-SDK是企業微信面向網頁開發者提供的基於企業微信內的網頁開發工具包。c#

經過使用企業微信JS-SDK,網頁開發者可藉助企業微信高效地使用拍照、選圖、語音、位置等手機系統的能力,同時能夠直接使用企業微信分享、掃一掃等企業微信特有的能力,爲企業微信用戶提供更優質的網頁體驗。api

步驟一:引入JS文件 在須要調用JS接口的頁面引入以下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.2.0.jsbash

步驟二:經過config接口注入權限驗證配置 全部須要使用JS-SDK的頁面必須先注入配置信息,不然將沒法調用(同一個url僅需調用一次,對於變化url的SPA的web app可在每次url變化時進行調用)。服務器

wx.config({
    beta: true,// 必須這麼寫,不然wx.invoke調用形式的jsapi會有問題
    debug: true, // 開啓調試模式,調用的全部api的返回值會在客戶端alert出來,若要查看傳入的參數,能夠在pc端打開,參數信息會經過log打出,僅在pc端時纔會打印。
    appId: '', // 必填,企業微信的corpID
    timestamp: , // 必填,生成簽名的時間戳
    nonceStr: '', // 必填,生成簽名的隨機串
    signature: '',// 必填,簽名,見附錄1
    jsApiList: [] // 必填,須要使用的JS接口列表,全部JS接口列表見附錄2
});
複製代碼

步驟三:經過ready接口處理成功驗證微信

wx.ready(function(){
    // config信息驗證後會執行ready方法,全部接口調用都必須在config接口得到結果以後,config是一個客戶端的異步操做,因此若是須要在頁面加載時就調用相關接口,則須把相關接口放在ready函數中調用來確保正確執行。對於用戶觸發時才調用的接口,則能夠直接調用,不須要放在ready函數中。
});
複製代碼

步驟四:經過error接口處理失敗驗證app

wx.error(function(res){
    // config信息驗證失敗會執行error函數,如簽名過時致使驗證失敗,具體錯誤信息能夠打開config的debug模式查看,也能夠在返回的res參數中查看,對於SPA能夠在這裏更新簽名。
});
複製代碼

只用過其中的圖像與文件接口,其餘的接口可參考官網:work.weixin.qq.com/api/doc#100…異步

由於上傳圖片有效期3天,可用素材管理接口下載圖片到本身的服務器,此處得到的 serverId 即 media_id。函數

拍照或從手機相冊中選圖接口:工具

wx.chooseImage({
    count: 1, // 默認9
    sizeType: ['original', 'compressed'], // 能夠指定是原圖仍是壓縮圖,默認兩者都有
    sourceType: ['album', 'camera'], // 能夠指定來源是相冊仍是相機,默認兩者都有
    defaultCameraMode: "batch", //表示進入拍照界面的默認模式,目前有normal與batch兩種選擇,normal表示普通單拍模式,batch表示連拍模式,不傳該參數則爲normal模式。(注:用戶進入拍照界面仍然可自由切換兩種模式)
    success: function (res) {
        var localIds = res.localIds; // 返回選定照片的本地ID列表,
                // andriod中localId能夠做爲img標籤的src屬性顯示圖片;
                // 而在IOS中需經過上面的接口getLocalImgData獲取圖片base64數據,從而用於img標籤的顯示
    }
});
複製代碼

預覽圖片接口:

wx.previewImage({
    current: '', // 當前顯示圖片的http連接
    urls: [] // 須要預覽的圖片http連接列表
});

複製代碼

上傳圖片接口:

wx.uploadImage({
    localId: '', // 須要上傳的圖片的本地ID,由chooseImage接口得到
    isShowProgressTips: 1, // 默認爲1,顯示進度提示
    success: function (res) {
        var serverId = res.serverId; // 返回圖片的服務器端ID
    }
});
複製代碼

咱們把圖片文件上傳到微信的臨時服務器,若是咱們須要存到本身的本地服務器,那麼就須要咱們在後臺根據serverId 即 media_id 獲取文件保存到本地服務器,也就是調用獲取臨時素材這個接口。

/**
     * 獲取媒體文件
     * 
     * @param accessToken
     *            接口訪問憑證
     * @param media_id
     *            媒體文件id
     * @param savePath
     *            文件在服務器上的存儲路徑
     */
    public static String downloadMedia(String accessToken, String mediaId, String savePath) {
        String filePath = null;
        // 拼接請求地址
        String requestUrl = "https://qyapi.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID";
        requestUrl = requestUrl.replace("ACCESS_TOKEN", accessToken).replace("MEDIA_ID", mediaId);
        System.out.println(requestUrl);
        try {
            URL url = new URL(requestUrl);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setDoInput(true);
            conn.setRequestMethod("GET");

            if (!savePath.endsWith("/")) {
                savePath += "/";
            }
            //追加一個時間的文件夾
            SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
            String date = format.format(new Date());
            savePath += date + "/";
            
            String contentType = conn.getHeaderField("Content-Type");
            // 根據內容類型獲取擴展名
            String fileExt = getExt(contentType);

            File saveFile = new File(savePath);
            if (!saveFile.exists()) {
                saveFile.mkdirs();
            }
            // 將mediaId做爲文件名
            filePath = savePath + mediaId + fileExt;

            BufferedInputStream bis = new BufferedInputStream(conn.getInputStream());
            FileOutputStream fos = new FileOutputStream(new File(filePath));
            byte[] buf = new byte[8096];
            int size = 0;
            while ((size = bis.read(buf)) != -1)
                fos.write(buf, 0, size);
            fos.close();
            bis.close();

            conn.disconnect();
            String info = String.format("下載媒體文件成功,filePath=" + filePath);
            System.out.println(info);
        } catch (Exception e) {
            filePath = null;
            String error = String.format("下載媒體文件失敗:%s", e);
            System.out.println(error);
        }
        return filePath;
    }
    
    //獲取圖片的拓展名
     private static String getExt(String contentType){
        if("image/jpeg".equals(contentType)){
            return ".jpg";
        }else if("image/png".equals(contentType)){
            return ".png";
        }else if("image/gif".equals(contentType)){
            return ".gif";
        }
        
        return null;
    }
複製代碼

這樣就能夠將圖片文件存儲到本地服務器,處理其餘類型的文件操做應該也差很少。

相關文章
相關標籤/搜索