最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Java如何實(shí)現(xiàn)企業(yè)微信審批流程

 更新時(shí)間:2024年11月01日 11:44:05   作者:威哥愛編程  
這篇文章主要使用了一個(gè)Java示例代碼,來向大家展示如何在企業(yè)微信中實(shí)現(xiàn)審批流程,文中的示例代碼簡潔易懂,有需要的小伙伴可以參考下

最近的一個(gè)項(xiàng)目中,用到企業(yè)微信的審批流程,整理出來分享給大家。在企業(yè)微信中實(shí)現(xiàn)審批流程可以通過調(diào)用企業(yè)微信的開放API完成,企業(yè)微信提供了審批應(yīng)用接口,用于創(chuàng)建審批模板、發(fā)起審批流程以及獲取審批實(shí)例詳情。下面 V 哥用一個(gè)Java示例代碼,來展示如何在企業(yè)微信中實(shí)現(xiàn)審批流程。

實(shí)現(xiàn)步驟

  • 獲取企業(yè)微信Access Token:每次訪問企業(yè)微信API接口前需要先獲取Access Token。
  • 創(chuàng)建審批模板(如已有模板則跳過此步驟)。
  • 發(fā)起審批流程:通過指定的模板ID發(fā)起審批請求。
  • 查詢審批結(jié)果:獲取審批的狀態(tài)和詳細(xì)信息。

以下代碼使用HttpClient發(fā)起HTTP請求來調(diào)用企業(yè)微信API接口。

代碼示例

import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class WeChatApproval {
    //下面三個(gè)常量定義,需要用你自己的(企業(yè)微信開放平臺(tái))
    private static final String CORP_ID = "你的corp_id";
    private static final String CORP_SECRET = "你的corp_secret";
    private static final String APPROVAL_TEMPLATE_ID = "你的template_id"; // 審批模板ID

    // 獲取 Access Token
    public static String getAccessToken() throws IOException {
        String url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + CORP_ID + "&corpsecret=" + CORP_SECRET;
        try (CloseableHttpClient client = HttpClients.createDefault()) {
            HttpGet request = new HttpGet(url);
            try (CloseableHttpResponse response = client.execute(request)) {
                String responseBody = EntityUtils.toString(response.getEntity());
                Map<String, Object> map = new ObjectMapper().readValue(responseBody, Map.class);
                return map.get("access_token").toString();
            }
        }
    }

    // 發(fā)起審批流程
    public static String initiateApproval(String accessToken, Map<String, Object> approvalData) throws IOException {
        String url = "https://qyapi.weixin.qq.com/cgi-bin/oa/applyevent?access_token=" + accessToken;
        try (CloseableHttpClient client = HttpClients.createDefault()) {
            HttpPost post = new HttpPost(url);
            post.setHeader("Content-Type", "application/json");

            Map<String, Object> requestMap = new HashMap<>();
            requestMap.put("template_id", APPROVAL_TEMPLATE_ID);
            requestMap.put("use_template_approver", 1); // 使用模板中的審批人
            requestMap.put("approver", approvalData.get("approver"));
            requestMap.put("apply_data", approvalData.get("apply_data"));
            requestMap.put("summary_list", approvalData.get("summary_list"));

            String json = new ObjectMapper().writeValueAsString(requestMap);
            post.setEntity(new StringEntity(json, "UTF-8"));

            try (CloseableHttpResponse response = client.execute(post)) {
                String responseBody = EntityUtils.toString(response.getEntity());
                Map<String, Object> map = new ObjectMapper().readValue(responseBody, Map.class);
                return map.get("sp_no").toString(); // 返回審批單編號(hào)
            }
        }
    }

    // 查詢審批流程狀態(tài)
    public static Map<String, Object> getApprovalDetail(String accessToken, String spNo) throws IOException {
        String url = "https://qyapi.weixin.qq.com/cgi-bin/oa/getapprovaldetail?access_token=" + accessToken;
        try (CloseableHttpClient client = HttpClients.createDefault()) {
            HttpPost post = new HttpPost(url);
            post.setHeader("Content-Type", "application/json");

            Map<String, Object> requestMap = new HashMap<>();
            requestMap.put("sp_no", spNo);

            String json = new ObjectMapper().writeValueAsString(requestMap);
            post.setEntity(new StringEntity(json, "UTF-8"));

            try (CloseableHttpResponse response = client.execute(post)) {
                String responseBody = EntityUtils.toString(response.getEntity());
                return new ObjectMapper().readValue(responseBody, Map.class);
            }
        }
    }

    public static void main(String[] args) {
        try {
            // 1. 獲取Access Token
            String accessToken = getAccessToken();
            System.out.println("Access Token: " + accessToken);

            // 2. 發(fā)起審批流程
            Map<String, Object> approvalData = new HashMap<>();
            approvalData.put("approver", new Object[] { 
                Map.of("attr", 1, "userid", new String[] { "approver_userid" }) 
            });
            approvalData.put("apply_data", Map.of(
                "contents", new Object[] {
                    Map.of("control", "Text", "id", "Text-1", "value", Map.of("text", "請假事由")),
                    Map.of("control", "Date", "id", "Date-1", "value", Map.of("date", "2024-11-01"))
                }
            ));
            approvalData.put("summary_list", new Object[] {
                Map.of("summary_info", Map.of("text", "請假申請"))
            });
            String spNo = initiateApproval(accessToken, approvalData);
            System.out.println("審批單號(hào): " + spNo);

            // 3. 查詢審批狀態(tài)
            Map<String, Object> approvalDetail = getApprovalDetail(accessToken, spNo);
            System.out.println("審批詳情: " + approvalDetail);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

代碼說明

  • 獲取Access Token:通過getAccessToken方法獲取企業(yè)微信的access_token,用于后續(xù)接口調(diào)用。
  • 發(fā)起審批流程initiateApproval方法通過oa/applyevent接口發(fā)起審批流程,傳入審批模板ID和審批表單數(shù)據(jù)(如審批人、申請數(shù)據(jù)和摘要等)。
  • 查詢審批流程狀態(tài)getApprovalDetail方法通過oa/getapprovaldetail接口查詢審批詳情,包括審批狀態(tài)和各環(huán)節(jié)的處理結(jié)果。

核心參數(shù)解釋

template_id:審批模板ID,由企業(yè)微信審批應(yīng)用中創(chuàng)建。

approver:審批人信息,可以指定具體審批人或?qū)徟私巧?/p>

apply_data:審批申請數(shù)據(jù),包含表單控件的數(shù)據(jù)內(nèi)容。

summary_list:摘要信息,用于在審批列表顯示申請概要信息。

sp_no:審批單編號(hào),用于查詢審批狀態(tài)。

注意事項(xiàng)

權(quán)限問題:確保調(diào)用接口的應(yīng)用具有審批權(quán)限,且已配置了企業(yè)微信API調(diào)用權(quán)限。

審批模板ID:模板ID需要在企業(yè)微信管理后臺(tái)中創(chuàng)建審批模板時(shí)獲取。

審批人配置:審批人需要是企業(yè)微信用戶,并確保在審批模板中有相關(guān)配置。

到此這篇關(guān)于詳解Java如何實(shí)現(xiàn)企業(yè)微信審批流程的文章就介紹到這了,更多相關(guān)Java實(shí)現(xiàn)企業(yè)微信審批內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • IDEA GIT 忽略文件的最佳方式推薦

    IDEA GIT 忽略文件的最佳方式推薦

    這篇文章主要介紹了IDEA GIT 忽略文件的最佳方式推薦,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • Java 方法重載Overload常見誤區(qū)及注意事項(xiàng)

    Java 方法重載Overload常見誤區(qū)及注意事項(xiàng)

    Java方法重載允許同一類中同名方法通過參數(shù)類型、數(shù)量、順序差異實(shí)現(xiàn)功能擴(kuò)展,提升代碼靈活性,核心條件為參數(shù)列表不同,不涉及返回類型、訪問修飾符等,本文給大家介紹Java 方法重載Overload常見誤區(qū)及注意事項(xiàng),感興趣的朋友一起看看吧
    2025-07-07
  • SpringBoot2.0整合tk.mybatis異常解決

    SpringBoot2.0整合tk.mybatis異常解決

    本文主要介紹了SpringBoot2.0整合tk.mybatis異常,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 使用Spring自定義命名空間

    使用Spring自定義命名空間

    這篇文章主要介紹了使用Spring自定義命名空間方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Javaweb實(shí)現(xiàn)上傳下載文件的多種方法

    Javaweb實(shí)現(xiàn)上傳下載文件的多種方法

    本篇文章主要介紹了Javaweb實(shí)現(xiàn)上傳下載文件,有多種實(shí)現(xiàn)方式,需要的朋友可以參考下。
    2016-10-10
  • eclipse報(bào)錯(cuò) eclipse啟動(dòng)報(bào)錯(cuò)解決方法

    eclipse報(bào)錯(cuò) eclipse啟動(dòng)報(bào)錯(cuò)解決方法

    本文將介紹eclipse啟動(dòng)報(bào)錯(cuò)解決方法,需要了解的朋友可以參考下
    2012-11-11
  • Java IO之字節(jié)輸入輸出流詳解

    Java IO之字節(jié)輸入輸出流詳解

    這篇文章主要為大家介紹了Java IO之字節(jié)輸入輸出流,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • springboot jpa 延遲加載問題的2種解決

    springboot jpa 延遲加載問題的2種解決

    這篇文章主要介紹了springboot jpa 延遲加載問題的2種解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java數(shù)組的遍歷與求和知識(shí)點(diǎn)

    Java數(shù)組的遍歷與求和知識(shí)點(diǎn)

    本篇文章給大家總計(jì)了Java數(shù)組的遍歷與求和的知識(shí)點(diǎn)以及需要注意的地方,需要的朋友參考學(xué)習(xí)下。
    2018-02-02
  • SpringBoot事務(wù)源碼從注解到數(shù)據(jù)庫的全解析

    SpringBoot事務(wù)源碼從注解到數(shù)據(jù)庫的全解析

    本文深度解析SpringBoot事務(wù)源碼:從@Transactional注解觸發(fā)AOP代理,到TransactionInterceptor攔截,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2026-03-03

最新評論

迁西县| 错那县| 盐山县| 临邑县| 仁怀市| 麟游县| 周口市| 阿尔山市| 巴楚县| 定结县| 精河县| 固镇县| 临湘市| 穆棱市| 丰都县| 龙门县| 定结县| 永州市| 报价| 太原市| 兴山县| 巴塘县| 女性| 枝江市| 晋城| 兰溪市| 新泰市| 会理县| 永川市| 喜德县| 瑞丽市| 皋兰县| 页游| 长宁区| 阿拉善右旗| 定西市| 西和县| 津市市| 永定县| 淮北市| 南和县|