首页 > 其他分享 >企业微信自建应用如何获取用户信息

企业微信自建应用如何获取用户信息

时间:2022-12-22 10:34:28浏览次数:72  
标签:code 自建 accessToken 微信 access 获取 token

框架类型:spring boot框架

开发前提:企业微信开发者文档 https://developer.work.weixin.qq.com/document/path/90556


我们阅读企业微信开发文档发现,获取userid必需知道两个参数 access_tokencode

1. 如何获取 access_token 

  我们通过阅读开发文档发现 https://developer.work.weixin.qq.com/document/path/91039 获取 access_token 需要 corpid 和 corpsecret ,这两个参数可以直接在企业微信后台直接获取这里不再赘述

 

   我们发现该接口的access_token 有失效时间,所以我们需要 缓存该值。

2. 如何获取 code

  我们阅读文档发现 code 是通过构造网页授权链接而获得的,所以我们按照文档的方法去配置,真实的网页地址需要encode加码 详情配置请参考 https://developer.work.weixin.qq.com/document/path/91022

  

 

 3. 我们已经拿到 access_tokencode 就可以 获取当前登陆者 的信息,我们开始编写代码

 

代码示例:

  前端:

  

//在地址栏中获取code
getQueryString(name) {
      var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
      var url = decodeURI(decodeURI(location.search));
      var r = url.substr(1).match(reg);
      if (r != null) return unescape(r[2]);
      return null;
 },

//初始化函数
init() {var code = this.getQueryString("code");
  var url = "https://xxx.xxx.xxx" + code;
      get(url).then(
        function (res) {
          //成功 处理逻辑
        },
        function (err) {
          //报错 处理逻辑
        }
      );
},      

  

  后端:

/**
     * 获取企业微信的access_token
     * 保存到静态变量中
     */
    @Override
    public void getAccesstoken() {
        try{
            ResponseEntity<TokenForm> resp = restTemplate.getForEntity(workParam.getToken_url()+"?corpid="+workParam.getCorpId()+"&corpsecret="+workParam.getCorpSecret(),TokenForm.class);
            TokenForm token = resp.getBody();
            if(token.errcode != 0){
                throw new CglException(token.errmsg,500);
            }
            AccessToken.accessToken = token.access_token;
            AccessToken.expiresIn = token.expires_in;
            AccessToken.createTime = new Date();
        }catch (Exception e){
            throw  new CglException(e.getMessage(),500);
        }
    }

    /**
     * 1.获取企业微信用户信息时请求企业微信获取token接口
     * 2.根据code和token获取当前用户的userid
     * 3.根据userid和token获取用户成员信息
     * @param code
     * @return WorkUser
     */
    @Override
    public WorkUser getWorkUser(String code) {
        //1当不存在accessToken或者失效请求获取token
        if(StringUtils.isBlank(AccessToken.accessToken) || AccessToken.isTimeOut()){
            this.getAccesstoken();
        }
        //2根据code和token获取当前用户的userid
        CodeForm  codeForm = this.getUserId(code,AccessToken.accessToken);
        //3 根据userid和token获取用户成员信息
        return this.getUser(codeForm.UserId,AccessToken.accessToken);
    }

/**
     * 查询userid
     * @param code
     * @param accessToken
     * @return
     */
    private CodeForm getUserId(String code, String accessToken){
        try{
            ResponseEntity<CodeForm> resp = restTemplate.getForEntity(workParam.getCode_url()+"?access_token="+accessToken+"&code="+code,CodeForm.class);
            CodeForm codeForm = resp.getBody();
            if(codeForm.errcode != 0){
                throw new CglException(codeForm.errmsg,500);
            }
            return codeForm;
        }catch (Exception e){
            throw  new CglException(e.getMessage(),500);
        }
    }

/**
     * 查询企业微信用户信息
     * @param userId
     * @param accessToken
     * @return
     */
    private WorkUser getUser(String userId,String accessToken){
        try{
            ResponseEntity<WorkUser> resp = restTemplate.getForEntity(workParam.getWork_user_url()+"?access_token="+accessToken+"&userid="+userId,WorkUser.class);
            WorkUser workUser = resp.getBody();
            if(workUser.errcode != 0){
                throw new CglException(workUser.errmsg,500);
            }
            return workUser;
        }catch (Exception e){
            throw  new CglException(e.getMessage(),500);
        }
    }

 

 

 

  

  

 

标签:code,自建,accessToken,微信,access,获取,token
From: https://www.cnblogs.com/chen-guo-liang/p/16997839.html

相关文章