企業微信開發(企業內部)

在這裏插入圖片描述

一、前言

1.企業微信於2016年4月上線,是騰訊微信團隊打造的以辦公溝通工具爲主打定位的移動辦公平臺,它的slogan:讓每個企業都有自己的微信。
2.企業微信提供了通訊錄管理、應用管理、消息推送、身份驗證、移動端SDK、素材、OA數據接口、企業支付、電子發票等API,管理員可以使用這些API,爲企業接入更多個性化的辦公應用。
3.企業微信也是一個平臺,是一個統一的辦公入口,可以集成公司內部的系統(OA系統、HR系統、ERP系統、CRM系統等),直接在企業微信手機端就可以接收內部系統的消息和通知。
4.企業微信與微信企業號區別:其實兩個產品最大的其別就是微信企業號是基於微信,而企業微信是一個獨立app。企業微信,傾向於將工作和生活完全分開,以獨立app的形式去使用,更有着豐富的辦公應用,如預設打卡、審批、日報、公告等OA應用,如果你對這些應用不滿足,還可以通過API接入和第三方應用滿足更多個性需求。有一種說法: 微信企業號要合併到企業微信,然後慢慢淡化微信企業號的概念。


二、Demo演示

在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述


三、開發步驟

corpid:每個企業都有唯一的corpid:我的企業–企業信息
userid:每個成員都有唯一的userid(賬號):通訊錄–成員詳情頁
部門id:每個部門都有唯一的id:通訊錄-組織架構-部門右邊的小圓點
tagid:每個標籤都有唯一的標籤id:通訊錄-標籤
agentid:每個應用唯一的id:應用與小程序-應用詳情頁
secret:企業應用中用於保障數據安全的鑰匙【跟agentid配套】
—自建應用secret:應用與小程序–應用–自建–某應用
—基礎應用secret:【如審批,打卡等應用】企業與小程序–應用–基礎–某應用–點開API小按鈕
—通訊錄管理secret:通訊錄同步【需開啓api接口同步】
—外部聯繫人管理secret:外部聯繫人–點開API小按鈕
—access_token:是企業後臺去企業微信的後臺獲取信息時的重要 票據,

由corpid和secret產生。所有接口在通信時都需要攜帶access_token用於驗證接口的訪問權限。
在這裏插入圖片描述

企業微信的開發大體可分爲以下幾步:
(1)封裝實體類
參考官方文檔給出的請求包、回包(即響應包),封裝對應的java實體類。
(2)java對象的序列化
將java對象序列化爲json格式的字符串
(3)獲取AccessToken,拼接請求接口url
憑證的獲取方式有兩種(此處暫時存疑,以待勘誤):
通訊錄AccessToken:CorpId+通訊錄密鑰
其他AccessToken:CorpId+應用密鑰
(4)調用接口發送http請求
封裝好http請求方法:httpRequest(請求url, 請求方法POST/GET, 請求包);


3.1 申請企業微信

在這裏插入圖片描述

3.2 創建應用

在這裏插入圖片描述

3.3 處理消息

點擊剛剛創建的應用,點擊【接收消息】-【設置API接收】,在URL處填寫我方的地址,例如:http://xxxxxx/wx/cp/portal/1000004,負責接收微信發送的消息。
在這裏插入圖片描述
token,和encodingAESKey需要在服務端裏面進行配置,然後啓動服務,在花生殼映射好端口,點擊保存,成功了就配置好了。

驗證:在應用裏面發送消息,看是否會回覆。如果回覆了,就成功配置完成。

服務端項目地址:https://gitee.com/chenxingxing6/weixin-java-cp-demo
具體怎麼配置:項目readme裏面寫的很清楚。

在這裏插入圖片描述

3.4 發送消息demo
package com.demo;

import me.chanjar.weixin.cp.api.impl.WxCpServiceImpl;
import me.chanjar.weixin.cp.bean.WxCpMessage;
import me.chanjar.weixin.cp.bean.WxCpMessageSendResult;
import me.chanjar.weixin.cp.bean.article.NewArticle;
import me.chanjar.weixin.cp.config.impl.WxCpDefaultConfigImpl;


/**
 * 發送消息
 */
public class WeixinMessageDemo {
    private static final Integer agentId = 1000004;
    private static final String corpId = "ww0ff82e1e3";
    private static final String corpSecret = "Mygabj9Vz7q0_OWU-8f-c";
    private static final String user1 = "ChenXing";

    private static WxCpDefaultConfigImpl config = new WxCpDefaultConfigImpl();
    private static WxCpServiceImpl wxCpService;

    static {
        // 註冊的企業信息
        config.setCorpId(corpId);
        config.setCorpSecret(corpSecret);
        wxCpService = new WxCpServiceImpl();
        wxCpService.setWxCpConfigStorage(config);
    }

    public static void main(String[] args) throws Exception {
        WxCpMessage cpMessage = null;
        int chooseIndex = 1;
        switch (chooseIndex){
            case 0:{
                cpMessage = TEXT();
                break;
            }
            case 1:{
                cpMessage = IMAGE();
                break;
            }
            case 3:{
                cpMessage = VOICE();
                break;
            }
            case 4:{
                cpMessage = VIDEO();
                break;
            }
            case 5:{
                cpMessage = NEWS();
                break;
            }
            default:{
                break;
            }
        }
        WxCpMessageSendResult result = wxCpService.messageSend(cpMessage);
        System.out.println(result);
    }


    /**
     * 文本消息
     * @return
     */
    public static WxCpMessage TEXT(){
        WxCpMessage message = WxCpMessage.TEXT()
            .toUser(user1)    // 用戶Id
            .content("文本消息") // 消息
            .agentId(agentId)          // 應用Id
            .build();
        return message;
    }

    /**
     * 圖片消息
     * @return
     */
    public static WxCpMessage IMAGE(){
        WxCpMessage message = WxCpMessage.IMAGE()
            .toUser(user1)
            .mediaId("1JwpbLSisNzaUb8dGiR6stmseQcRORha2Md9DeV829-1W_G56F6gjsO5ClJ7isccW")
            .agentId(agentId)
            .build();
        return message;
    }

    /**
     * 語音消息
     * @return
     */
    public static WxCpMessage VOICE(){
        WxCpMessage message = WxCpMessage.VOICE()
            .toUser(user1)
            .agentId(agentId)
            .mediaId("media_id")
            .build();
        return message;
    }


    /**
     * 視頻消息
     * @return
     */
    public static WxCpMessage VIDEO(){
        WxCpMessage message = WxCpMessage.VIDEO()
            .toUser(user1)
            .agentId(agentId)
            .mediaId("media_id")
            .build();
        return message;
    }

    /**
     * 圖文消息
     * @return
     */
    public static WxCpMessage NEWS(){
        NewArticle article1 = new NewArticle();
        article1.setUrl("URL");
        article1.setPicUrl("PIC_URL");
        article1.setDescription("Is Really A Happy Day");
        article1.setTitle("Happy Day");

        NewArticle article2 = new NewArticle();
        article2.setUrl("URL");
        article2.setPicUrl("PIC_URL");
        article2.setDescription("Is Really A Happy Day");
        article2.setTitle("Happy Day");

        WxCpMessage message = WxCpMessage.NEWS()
            .toUser(user1)
            .agentId(agentId)
            .addArticle(article1)
            .addArticle(article2)
            .build();
        return message;
    }

}


3.5 如何調用企業微信API?

1.引入js文件
方法一:在需要調用JS接口的頁面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.2.0.js
方法二:支持使用 AMD/CMD 標準模塊加載方法加載(以vue爲例)

$ npm install weixin-js-sdk --save
或
$ yarn add weixin-js-sdk --save

2.通過config接口注入權限驗證配置
所有需要使用JS-SDK的頁面必須先注入配置信息,否則將無法調用(同一個url僅需調用一次,對於變化url的SPA的web app可在每次url變化時進行調用)。而signature的如何生成可參考官網API,出於安全考慮,開發者必須在服務器端實現簽名的邏輯(即後端給出接口)。

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

3.通過ready接口處理成功驗證

wx.ready(function(){
    // config信息驗證後會執行ready方法,所有接口調用都必須在config接口獲得結果之後,config是一個客戶端的異步操作,所以如果需要在頁面加載時就調用相關接口,則須把相關接口放在ready函數中調用來確保正確執行。對於用戶觸發時才調用的接口,則可以直接調用,不需要放在ready函數中。
});

4.通過error接口處理失敗驗證

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

驗證成功後,就可以調用微信API的其他接口了。

在這裏插入圖片描述

如果企業需要在打開的網頁裏面攜帶用戶的身份信息,第一步需要構造如下的鏈接來獲取code參數:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=CORPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect
員工點擊後,頁面將跳轉至 redirect_uri?code=CODE&state=STATE,企業可根據code參數獲得員工的userid。code長度最大爲512字節。


參考資料

企業微信 API文檔:https://work.weixin.qq.com/api/doc
開發時請留意企業微信與企業號的接口差異:https://work.weixin.qq.com/api/doc#12060
(1) Quick Start
https://github.com/Wechat-Group/weixin-java-tools/wiki/CP_Quick-Start
(2) 微信消息路由器
https://github.com/Wechat-Group/weixin-java-tools/wiki/CP_微信消息路由器
(3)WxCpConfigStorage
https://github.com/Wechat-Group/weixin-java-tools/wiki/CP_WxCpConfigStorage
(4)同步回覆消息
https://github.com/Wechat-Group/weixin-java-tools/wiki/CP_同步回覆消息
(5)刷新access_token
https://github.com/Wechat-Group/weixin-java-tools/wiki/CP_刷新access_token
(6)用戶身份二次驗證
https://github.com/Wechat-Group/weixin-java-tools/wiki/CP_用戶身份二次驗證
(7)主動發送消息
https://github.com/Wechat-Group/weixin-java-tools/wiki/CP_主動發送消息
(8)臨時素材(多媒體文件)管理
https://github.com/Wechat-Group/weixin-java-tools/wiki/CP_多媒體文件管理
(9) 用戶管理
https://github.com/Wechat-Group/weixin-java-tools/wiki/CP_用戶管理
(10)部門管理
https://github.com/Wechat-Group/weixin-java-tools/wiki/CP_部門管理
(11)標籤管理
https://github.com/Wechat-Group/weixin-java-tools/wiki/CP_標籤管理
(12)自定義菜單管理
https://github.com/Wechat-Group/weixin-java-tools/wiki/CP_自定義菜單管理
(13)OAuth2網頁授權
https://github.com/Wechat-Group/weixin-java-tools/wiki/CP_OAuth2網頁授權
(14)http代理支持
https://github.com/Wechat-Group/weixin-java-tools/wiki/CP_http代理支持
(15)如何調用未支持的接口
https://github.com/Wechat-Group/weixin-java-tools/wiki/CP_如何調用未支持的接口
(16)如何執行本項目單元測試
https://github.com/Wechat-Group/weixin-java-tools/wiki/CP_如何執行本項目單元測試

可以運行 demo-1 的代碼來對weixin-java-tools的有一個更好的瞭解。
項目demo-1: https://github.com/Wechat-Group/weixin-java-tools
啓動方式: https://github.com/Wechat-Group/weixin-java-tools/wiki/CP_demo代碼


企業微信開發異常整理:http://www.cnblogs.com/shirui/category/1053578.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章