详解Java如何实现企业微信审批流程
目录
- 实现步骤
- 代码示例
- 核心参数解释
- 注意事项
最近的一个项目中,用到企业微信的审批流程,整理出来分享给大家。在企业微信中实现审批流程可以通过调用企业微信的开放API完成,企业微信提供了审批应用接口,用于创建审批模板、发起审批流程以及获取审批实例详情。下面 V 哥用一个Java示例代码,来展示如何在企业微信中实现审批流程。
实现步骤
- 获取企业微信Access Token:每次访问企业微信API接口前需要先获取Access Token。
- 创建审批模板(如已有模板则跳过此步骤)。
- 发起审批流程:通过指定的模板ID发编程客栈起审批请求。
- 查询审批结果:获取审批的状态和详细信息。
以下代码使用HttpClient
发起HTTP请求来调用企业微信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 { //下面三个常量定义,需要用你自己的(企业微信开放平台) 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() thrwww.devze.comows IOException { String url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + CORP_ID + "&corpsecret=" + CORP_SECRET; try (CloseableHttpClient client = HttpClients.createDefault()) { js 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(); } } } // 发起审批流程 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(); // 返回审批单编号 } } } // 查询审批流程状态 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. 发起审批流程 Map<String, Object> approvalData = new HashMap<>(); approvalData.put("approver", new Objectjavascript[] { 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("审批单号: " + spNo); // 3. 查询审批状态 Map<String, Object> approvalDetail = getApprovalDetail(accessToken, spNo); System.out.println("审批详情: " + approvalDetail); } catch (IOException e) { e.printStackTrace(); } } }
代码说明
- 获取Access Token:通过
getAccessToken
方法获取企业微信的access_token
,用于后续接口调用。 - 发起审批流程:
initiateApproval
方法通过oa/applyevent
接口发起审批流程,传入审批模板ID和审批表单数据(如审批人、申请数据和摘要等)。 - 查询审批流程状态:
getApprovalDetail
方法通过oa/getapprovaldetail
接口查询审批详情,包括审批状态和各环节的处理结果。
核心参数解释
template_id
:审批模板ID,由企业微信审批应用中创建。
approver
:审批人信息,可以指定具体审批人或审批人角色。
apply_data
:审批申请数据,包含表单控件的数据内容。
summary_list
:摘要信息,用于在审批列表显示申请概要信息。
sp_no
:审批单编号,用于查询审批状态。
注意事项
权限问题:确保调用接口的应用具有审批权限,且已配置了企业微信API调用权限。
审批模板ID:模板ID需要在企业微信管理后台中创建审批模板时获取。
审批人配置:审批人需要是企业微信用户,并确保在审批模板中有相关配置。
到此这篇关于详解Java如何实现企业微信审批流程的文章就介绍到这了,更多相关Java实现企业微信审批内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!
精彩评论