企业微信_获取access_token
生活随笔
收集整理的這篇文章主要介紹了
企业微信_获取access_token
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 一、快速入門
- 1. 開發(fā)文檔
- 2. 管控臺
- 3. 接口文檔
- 4. 參數獲取
- 5. api調試
- 二、java實戰(zhàn)
- 2.1. 入口
- 2.2. 核心方法
- 2.3. 核心配置
- 2.3. RestUtils 工具類
- 2.5. token緩存策略
- 三、源碼分享
- 3.1. 后端源碼
- 3.2. 前端源碼
一、快速入門
1. 開發(fā)文檔
企業(yè)內部開發(fā)文檔:
https://developer.work.weixin.qq.com/document/path/91039
2. 管控臺
企業(yè)微信管控臺:
https://work.weixin.qq.com/wework_admin/frame#apps
3. 接口文檔
獲取access_token接口文檔
4. 參數獲取
corpid->獲取企業(yè)ID
corpsecret->應用secret
5. api調試
- postman調試
- 官網調試
https://developer.work.weixin.qq.com/resource/devtool
二、java實戰(zhàn)
2.1. 入口
// 1.通過corpId獲取AccessTokenString accessToken = getAccessToken(corpId);2.2. 核心方法
/*** 通過corpId獲取AccessToken** @param corpId 企業(yè)ID* @return*/public String getAccessToken(String corpId) {String result = "";String accessTokenUrl = String.format(QywxInnerConfig.ACCESS_TOKEN_URL, corpId, AGENT_SECRET);Map response = RestUtils.get(accessTokenUrl);//獲取錯誤日志if (response.containsKey("errcode") && (Integer) response.get("errcode") != 0) {logger.error(response.toString());} else {result = (String) response.get("access_token");}return result;}2.3. 核心配置
package com.gblfy.qywxin.config;/*** 企業(yè)微信常量配置類** @author gblfy* @date 2022-01-12*/ public class QywxInnerConfig {public static final String BASE_URL = "https://qyapi.weixin.qq.com/cgi-bin/";//獲取access_token//https://open.work.weixin.qq.com/api/doc/90000/90135/91039public static final String ACCESS_TOKEN_URL = BASE_URL + "gettoken?corpid=%s&corpsecret=%s"; } @Value("${qywx.agentSecret}")private String AGENT_SECRET;2.3. RestUtils 工具類
package com.gblfy.qywxin.utils;import com.alibaba.fastjson.JSONObject; import org.springframework.context.annotation.Configuration; import org.springframework.http.*; import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder;import java.io.IOException; import java.net.URI; import java.nio.file.Files; import java.nio.file.Paths; import java.util.Map; import java.util.Objects;@Configuration public class RestUtils {private static final RestTemplate restTemplate = new RestTemplate();public static JSONObject get(String url, Map<String,String> urlParams){return get(urlToUri(url,urlParams));}//在處理企業(yè)微信某些參數時有問題public static JSONObject get(String url){return get(URI.create(url));}private static JSONObject get(URI uri){ResponseEntity<JSONObject> responseEntity =restTemplate.getForEntity(uri,JSONObject.class);serverIsRight(responseEntity); //判斷服務器返回狀態(tài)碼return responseEntity.getBody();}public static JSONObject post(String url,Map<String,String> urlParams,JSONObject json){//組裝urlreturn post(urlToUri(url,urlParams),json);}public static JSONObject post(String url,JSONObject json){//組裝urLreturn post(URI.create(url),json);}private static JSONObject post(URI uri,JSONObject json){//組裝url//設置提交json格式數據HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_JSON);HttpEntity<JSONObject> request = new HttpEntity(json, headers);ResponseEntity<JSONObject> responseEntity = restTemplate.postForEntity(uri,request,JSONObject.class);serverIsRight(responseEntity); //判斷服務器返回狀態(tài)碼return responseEntity.getBody();}private static URI urlToUri(String url,Map<String,String> urlParams){//設置提交json格式數據UriComponentsBuilder uriBuilder = UriComponentsBuilder.fromHttpUrl(url);for(Map.Entry<String,String> entry : urlParams.entrySet()) {uriBuilder.queryParam((String)entry.getKey(), (String) entry.getValue()) ;}return uriBuilder.build(true).toUri();}public static JSONObject upload(String url,MultiValueMap formParams){//設置表單提交HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.MULTIPART_FORM_DATA);HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(formParams, headers);ResponseEntity<JSONObject> responseEntity = restTemplate.postForEntity(url,request,JSONObject.class);serverIsRight(responseEntity); //判斷服務器返回狀態(tài)碼return responseEntity.getBody();}public static String download(String url,String targetPath) throws IOException {ResponseEntity<byte[]> rsp = restTemplate.getForEntity(url, byte[].class);if(rsp.getStatusCode() != HttpStatus.OK){System.out.println("文件下載請求結果狀態(tài)碼:" + rsp.getStatusCode());}// 將下載下來的文件內容保存到本地Files.write(Paths.get(targetPath), Objects.requireNonNull(rsp.getBody()));return targetPath;}public static byte[] dowload(String url){ResponseEntity<byte[]> rsp = restTemplate.getForEntity(url, byte[].class);return rsp.getBody();}private static void serverIsRight(ResponseEntity responseEntity){if(responseEntity.getStatusCodeValue()==200){ // System.out.println("服務器請求成功:{}"+responseEntity.getStatusCodeValue());}else {System.out.println("服務器請求異常:{}"+responseEntity.getStatusCodeValue());}} }2.5. token緩存策略
建議使用redis,說一下具體實現流程:
- 1.獲取token,根據token_key 查詢redis中是否存在
- 2.如果存在,就獲取token直接用
- 3.如果不存在,則通過企業(yè)ID獲取token存儲redis過期時間設置為2小時
三、源碼分享
3.1. 后端源碼
后端:https://gitee.com/gblfy/qywx-inner-java
3.2. 前端源碼
前端:https://gitee.com/gblfy/qywx-vuejs
總結
以上是生活随笔為你收集整理的企业微信_获取access_token的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JsonData工具类
- 下一篇: Warning: Missing cha