框架类型:spring boot框架
开发前提:企业微信开发者文档 https://developer.work.weixin.qq.com/document/path/90556
我们阅读企业微信开发文档发现,获取userid必需知道两个参数 access_token 和 code
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_token 和 code 就可以 获取当前登陆者 的信息,我们开始编写代码
代码示例:
前端:
//在地址栏中获取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