一、快速入门
1. 开发文档2. 管控台3. 接口文档4. 参数获取5. api调试 二、java实战
2.1. 入口2.2. 核心方法2.3. 核心配置2.3. RestUtils 工具类2.5. token缓存策略2.6. 源码分享
一、快速入门 1. 开发文档企业内部开发文档:
https://developer.work.weixin.qq.com/document/path/91039
企业微信管控台:
https://work.weixin.qq.com/wework_admin/frame#apps
获取access_token接口文档
corpid->获取企业ID
corpsecret->应用secret
postman调试
官网调试
https://developer.work.weixin.qq.com/resource/devtool
二、java实战
2.1. 入口
// 1.通过corpId获取AccessToken String accessToken = getAccessToken(corpId);2.2. 核心方法
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;
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/91039
public 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 urlParams){
return get(urlToUri(url,urlParams));
}
//在处理企业微信某些参数时有问题
public static JSonObject get(String url){
return get(URI.create(url));
}
private static JSonObject get(URI uri){
ResponseEntity responseEntity =restTemplate.getForEntity(uri,JSONObject.class);
serverIsRight(responseEntity); //判断服务器返回状态码
return responseEntity.getBody();
}
public static JSonObject post(String url,Map urlParams,JSonObject json){
//组装url
return post(urlToUri(url,urlParams),json);
}
public static JSonObject post(String url,JSonObject json){
//组装urL
return 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 request = new HttpEntity(json, headers);
ResponseEntity responseEntity = restTemplate.postForEntity(uri,request,JSONObject.class);
serverIsRight(responseEntity); //判断服务器返回状态码
return responseEntity.getBody();
}
private static URI urlToUri(String url,Map urlParams){
//设置提交json格式数据
UriComponentsBuilder uriBuilder = UriComponentsBuilder.fromHttpUrl(url);
for(Map.Entry 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> request = new HttpEntity<>(formParams, headers);
ResponseEntity responseEntity = restTemplate.postForEntity(url,request,JSONObject.class);
serverIsRight(responseEntity); //判断服务器返回状态码
return responseEntity.getBody();
}
public static String download(String url,String targetPath) throws IOException {
ResponseEntity 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 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小时 2.6. 源码分享
https://gitee.com/gblfy/qywx-inner-java-api



