admin管理员组文章数量:1794759
企业微信请求接口之替换token丢失,报错invalid access
1.使用spring原生restTemplate请求接口 // GET 获取部门列表 GET_DEPARTMENT_URL("qyapi.weixin.qq/cgi-bin/department/list?access_token=ACCESS_TOKEN&id=ID") String urlValue = QyaApiEnum.GET_DEPARTMENT_URL.getUrlValue(); String accessToken = tokenUtil.getAccessToken(); String url = urlValue.replace("ACCESS_TOKEN", accessToken).replace("ID", id); ResponseEntity<String> forEntity = restTemplate.getForEntity(url, String.class); log.info("获取部门列表:" + forEntity.getBody()); 2.由于企业微信根据企业ID和凭证密钥获取的access_token长度过长,在测试过程中,发现获取的token与替换之后请求的token由于使用replace替换出现字符串丢失 // 根据qyapi.weixin.qq/cgi-bin/gettoken?corpid=ID&corpsecret=SECRET获取的的token为 // ******************NukGFk6AIDnmLC9KRSngNkPr38IzAaE8feZKlgviBrSM67ayjpR9T0zWQOO7QlujPA String url = urlValue.replace("ACCESS_TOKEN", accessToken).replace("ID", id); // 替换后的token为******************NukGFk6A1nmLC9KRSngNkPr38IzAaE8feZKlgviBrSM67ayjpR9T0zWQOO7QlujPA 3.在调用的时候,还重新获取token比对了一下,最后发现是替换丢失,报错信如下 // 获取token的有效期是7200秒。如果出现token超时也会报此错误。 // 当时使用postman测试此token请求接口是正常的。 { "errcode": 40014, "errmsg": "invalid access_token", "department": [] } 4.后来采用UriComponentsBuilder进行拼接请求参数,也可以使用map进行传参 /** * 拼接url请求参数 * * @param httpUrl 请求url * @param accessToken 调用接口凭证 * @param departmentId 获取的部门id * @param fetchChild 是否递归获取子部门下面的成员:1-递归获取,0-只获取本部门 * @return */ public static String handUrlParam(String httpUrl, String accessToken, String departmentId, String fetchChild) { UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(httpUrl) .queryParam("access_token", accessToken) .queryParam("department_id", departmentId) .queryParam("fetch_child", fetchChild); return builder.build().encode().toUriString(); } 5.总结
因为之前使用restTemplate调用http请求是map传参,由于get请求传参较少,当时就直接在url拼接替换,未考虑字符串过长出现丢失的情况。最后经过网上查看企业微信官方社区,然后查找代码发现问题。
版权声明:本文标题:企业微信请求接口之替换token丢失,报错invalid access 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686962227a122745.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论