1. 程式人生 > 實用技巧 >釘釘第三方企業應用開發快速入門

釘釘第三方企業應用開發快速入門

釘釘第三方企業應用開發快速入門

快速啟動入門

1. 建立小程式

1.1. 登入開發者後臺

登入釘釘開發者後臺,選擇應用開發-第三方企業應用-小程式,點選建立應用。

1.2. 填寫基礎資訊

填寫應用基本資訊,包括應用名稱、應用Logo、應用型別和應用簡介。

1.3. 檢視應用資訊

建立成功後,可以在應用列表檢視建立的應用。點選應用還可以檢視應用的詳細資訊,如下圖所示:

2. 設定安全域名

小程式需要事先設定一個或多個服務端安全域名(或IP),小程式前端只能通過這些安全域名(或IP)與服務端進行網路通訊。當安全域名更新時,需要在IDE重新打包上傳版本,設定的域名才會生效。

本質上,小程式前端與後端的網路通訊是同普通的H5前後端一樣的。因此在您做快速體驗時,可以填寫小程式前端所在環境能訪問的任何域名/IP地址,比如可以是您自己的辦公電腦本機地址或者區域網內地址。

就是將你伺服器的域名或地址新增進去

3. 設定介面許可權

釘釘開放了豐富的服務端介面能力,開發者可以使用這些介面能力,實現企業系統與釘釘的整合打通。在呼叫介面前,需要先申請並設定介面呼叫許可權,包括通訊錄許可權、外部聯絡人許可權、審批許可權及內購開發許可權等。如下圖所示。

4. 開發管理(建立回撥)

設定回撥URL用於啟用介面,沒有公網域名可以使用內網穿透的方式對外暴露,以便釘釘回撥

5. 下載原始碼

使用命令git clone下載程式碼,也可以直接用HTTP形式從程式碼倉庫下載。

服務端程式碼
git clone https://github.com/opendingtalk/eapp-isv-quick-start-java.git

前端程式碼
git clone https://github.com/opendingtalk/eapp-isv-quick-start-fe.git

6. 設定與修改原始碼

6.1. 伺服器端

6.1.1. 配置程式碼

修改com.config.Constant.java類中的配置

/**
 * 專案中的常量定義類
 */
public class Constant {
    /**
     * 應用的SuiteKey,登入開發者後臺,點選應用管理,進入應用詳情可見
     */
    public static final String SUITE_KEY="憑證與基礎資訊頁面中SuiteKey的值";

    /**
     * 應用的SuiteSecret,登入開發者後臺,點選應用管理,進入應用詳情可見
     */
    public static final String SUITE_SECRET="憑證與基礎資訊頁面中SuiteSecret的值";

    /**
     * 回撥URL簽名用。應用的簽名Token, 登入開發者後臺,點選應用管理,進入應用詳情可見
     */
    public static final String TOKEN = "自定義要與開發管理中的 `Token` 保持一致";

    /**
     * 回撥URL加解密用。應用的"資料加密金鑰",登入開發者後臺,點選應用管理,進入應用詳情可見
     */
    public static final String ENCODING_AES_KEY = "自定義要與開發管理中 `資料加密金鑰` 保持一致";

    /**
     * 用於暫時儲存釘釘發來的TICKET值
     */
    public static String TICKET;

}
6.1.2. 業務程式碼

修改com.controller.CallbackController.java類中的dingCallback方法

//在 else if (EVENT_SUITE_TICKET.equals(eventType)) {}中新增如下程式碼
//用於更新Ticket
Constant.TICKET = String.valueOf(callBackContent.get("SuiteTicket"));

//在else if (EVENT_TMP_AUTH_CODE.equals(eventType)) {}中新增如下程式碼,也可以抽取成方法呼叫
//用於啟用應用,當你在版本管理與釋出中 點選開通應用時被呼叫
try {
    //根據回撥資料型別做不同的業務處理
    String authCode = callBackContent.getString("AuthCode");
    String authCorpId = callBackContent.getString("AuthCorpId");

    //bizLogger.info("收到審批任務進度更新: " + plainText);
    //獲取第三方企業憑證suite_access_token
    DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/service/get_suite_token");
    OapiServiceGetSuiteTokenRequest request = new OapiServiceGetSuiteTokenRequest();
    request.setSuiteKey(Constant.SUITE_KEY);
    request.setSuiteSecret(Constant.SUITE_SECRET);
    request.setSuiteTicket("suiteTicket");

    OapiServiceGetSuiteTokenResponse response = client.execute(request);
    JSONObject jsonObject = JSONObject.parseObject(response.getBody());
    String suite_access_token = jsonObject.getString("suite_access_token");
    System.out.println("得到的suite_access_token===" + suite_access_token);
    
    //獲取永久授權碼
    DingTalkClient client1 = new DefaultDingTalkClient("https://oapi.dingtalk.com/service/get_permanent_code?suite_access_token=" + suite_access_token);
    OapiServiceGetPermanentCodeRequest req = new OapiServiceGetPermanentCodeRequest();
    req.setTmpAuthCode(authCode);
    OapiServiceGetPermanentCodeResponse rsp = client1.execute(req);
    System.out.println(rsp.getBody());
    JSONObject jsonObject1 = JSONObject.parseObject(rsp.getBody());
    String permanent_code = jsonObject1.getString("permanent_code");
    System.out.println("得到的永久授權碼===" + permanent_code);
    //String permanent_code = jsonObject1.getString("permanent_code");
    //啟用應用
    DingTalkClient client3 = new DefaultDingTalkClient("https://oapi.dingtalk.com/service/activate_suite?suite_access_token=" + suite_access_token);
    OapiServiceActivateSuiteRequest req3 = new OapiServiceActivateSuiteRequest();
    req3.setSuiteKey(Constant.SUITE_KEY);
    req3.setAuthCorpid(authCorpId);
    req3.setPermanentCode(permanent_code);
    OapiServiceActivateSuiteResponse rsp3 = client3.execute(req3);
    
    System.out.println("啟用應用結果===" + rsp.getBody());
    //todo: 實現審批的業務邏輯,如發訊息
} catch (ApiException e) {
    e.printStackTrace();
}

修改com.controller.IndexController.java類中的getSuiteTicket(String suiteKey)方法

private String getSuiteTicket(String suiteKey) {
    //返回釘釘推送來的Ticket值
    return Constant.TICKET;
}

6.2. 前端

下載釘釘小程式開發者工具IDE,安裝並開啟

開啟IDE後選擇您下載的前端專案eapp-isv-quick-start-fe資料夾,選擇開發的應用型別,

開啟後在右上角點選登入,出現掃碼登入介面,使用釘釘掃碼登入IDE。

注意:如果開發者已經開啟IDE,請關閉重新開啟,初次開啟才可以選擇開啟新工程。

選擇專案型別即要開發的應用型別。

點選右上角登入按鈕使用釘釘掃碼登入。

6.2.1. 修改前端配置

修改檔案eapp-isv-quick-start-fe/page/index/index.js。

IP埠為本機的IP和PORT,注意url中的IP或域名必須是開發者平臺中設定的本應用的安全域名。

let domain = "https://sakura.xxxxxxxxxx";//設定為內網穿透的地址就行

7. 新增體驗組織並開通應用

重要:面向企業的應用必須企業開通才能進行體驗,您需要建立專門的體驗組織併為此組織開通本應用。

請注意:此處新增的體驗組織是建立全新的測試組織,並不能新增已有組織為體驗組織-比如本應用所在的開發組織。

測試應用可以直接開通。而正式應用需要驗證回撥有效性並設定好回撥URL才能開通。本demo建議建立的是測試應用,因此可以暫時忽略驗證回撥有效性,可直接開通本應用。

新增一個非當前應用持有者的團隊,然後點選開通應用此時要保證你的伺服器端是開啟的

8. 專案管理釘釘遠端

然後啟動專案,如果獲取到使用者資訊userid則表示應用執行成功。