栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

企业微信 获取access

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

企业微信 获取access

文章目录

一、快速入门

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

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获取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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/703880.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号