文章目录

  • 一、快速入门
    • 1. 开发文档
    • 2. 管控台
    • 3. 接口文档
    • 4. 参数获取
    • 5. api调试
  • 二、java实战
    • 2.1. 入口
    • 2.2. 核心方法
    • 2.3. 核心配置
    • 2.3. RestUtils 工具类
    • 2.5. token缓存策略
  • 三、源码分享
    • 3.1. 后端源码
    • 3.2. 前端源码
一、快速入门
1. 开发文档

企业内部开发文档:
https://developer.work.weixin.qq.com/document/path/91039

2. 管控台

企业微信管控台:
https://work.weixin.qq.com/wework_admin/frame#apps

3. 接口文档

获取access_token接口文档

4. 参数获取

corpid->获取企业ID

corpsecret->应用secret

5. api调试
  • postman调试
  • 官网调试
    https://developer.work.weixin.qq.com/resource/devtool
二、java实战
2.1. 入口
  // 1.通过corpId获取AccessTokenString accessToken = getAccessToken(corpId);
2.2. 核心方法
 /*** 通过corpId获取AccessToken** @param corpId 企业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;/*** 企业微信常量配置类** @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));}//在处理企业微信某些参数时有问题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);   //判断服务器返回状态码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);  //判断服务器返回状态码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);  //判断服务器返回状态码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("文件下载请求结果状态码:" + 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.如果不存在,则通过企业ID获取token存储redis过期时间设置为2小时
三、源码分享
3.1. 后端源码

后端:https://gitee.com/gblfy/qywx-inner-java

3.2. 前端源码

前端:https://gitee.com/gblfy/qywx-vuejs

企业微信_获取access_token相关推荐

  1. 企业微信授权获取access_token

    @Slf4j public class QiYeWeChatUtil {/*** 缓存企业微信accessToken*/public static final String QY_WX_TOKEN_k ...

  2. 企业微信_客户联系,获取客户及客户群列表及详情

    文章目录 一.调试接口 1. 阅读文档 2. 权限配置 3. 指定应用 二.POSTMAN调试接口 2.1. 获取配置了客户联系功能的成员列表 2.2. 获取客户列表 2.3. 获取客户详情 2.4. ...

  3. 企业微信_通讯录管理,获取部门列表部门成员及详情

    企业微信H5_通讯录管理,获取部门列表部门成员及详情 文章目录 一.POSTMAN调试 1. 获取access_token 2. 获取部门列表 3. 获取部门成员 4. 获取部门成员详情 5. 获取成 ...

  4. 企业微信_读取成员(获取用户详情)

    接上一篇:企业微信H5_身份验证,H5应用网页授权登录获取身份 这篇获取用户详情信息,是在上一篇(我们已经获取到用户的简要信息)基础上做的. 文章目录 一.官网文档 1. 阅读官网文档 2. 接口地址 ...

  5. VBA实现企业微信API获取考勤数据,解析JSON数据格式。

    '通过微信API接口发送和获取数据 Function weixinAPI(starttime As String, endtime As String) As StringDim access_tok ...

  6. 【企业微信】获取token 发送应用消息

    企业微信获取token 存入redis 设置时长2小时 && 发送企业应用消息接口 1.常量类 package com.ruoyi.common.constant;/*** 微信常用常 ...

  7. 微信开发获取access_token(凭证)接口的详解

    在微信开发中,就有一些接口会涉及到获取接口凭证的接口,开发文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp142114018 ...

  8. 企业微信一聊天连不上服务器,企业微信_访问频率限制

    访问频率限制 当你获取到AccessToken时,你的应用就可以成功调用企业微信后台所提供的各种接口以管理或访问企业微信后台的资源或给企业微信成员发消息. 为了防止企业应用的程序错误而引发企业微信服务 ...

  9. pywinauto WXWork(企业微信) 获取工作台中的信息

    需求1:家里有一个小店,需要订烟,中秋节前夕订烟日期调整,业务经理提前3天通知了,但是忘记了,然后就错过了,所以我要获取订烟时间,然后通过腾讯的sms,发送到几部手机上 需求2:某丝丽企业微信群需要每 ...

最新文章

  1. Spring MVC拦截器
  2. Android开发者珍藏必备【学习资料篇】
  3. web安全之文件上传漏洞攻击与防范方法
  4. 【JS第34期】BOM-window对象
  5. 函数伪代码_Excel常用函数
  6. 用9种办法解决 JS 闭包经典面试题之 for 循环取 i
  7. qemu+linux+x86+64,qemu以64位跟32位的方式跑busybox
  8. bootloader功能介绍/时钟初始化设置/串口工作原理/内存工作原理/NandFlash工作原理...
  9. orika java_使用orika进行对象间Mapping
  10. 解决FastCGI 进程超过了配置的活动超时时限的问题
  11. 阿里云服务器加快下载github
  12. 刘万祥老师讲如何利用条件格式色阶制作数据地图
  13. php5.6安装php-gd,centos73下php5.6安装GD库
  14. 2021SC@SDUSC Zxing开源代码(十一)Data Matrix二维码(四)
  15. JAVA内存泄漏原因和检测工具
  16. php青蛙跳井代码,初八葬一青蛙跳井怪穴------行龙点劲!
  17. 微型计算机的基本储存单位,计算机内存储器中的基本存储单位是什么
  18. C/C++实现文件加密器
  19. linux wifi关闭5g,双频路由器怎么关掉5G频段无线信号?
  20. 常用损失函数:交叉熵损失

热门文章

  1. 重磅:2020年度国家科技奖初评结果出炉!
  2. 4位院士的4个正确决定,成功扭转疫情!建议人人都该知道
  3. Nature:给博士研究生的四条箴言Four golden lessons,颜宁:写的真好!
  4. 陶哲轩对数学学习的一些建议
  5. 科大讯飞回应同传造假:人机耦合才是未来发展之道
  6. python if and函数_逻辑函数And,OR,IF
  7. python正则表达式使用
  8. 4982亿背后的前端技术—2020天猫双11前端体系大揭秘
  9. 使用Blink CEP实现差值聚合计算
  10. 最佳实践 | 数据库迁云解决方案选型 流程全解析