评论

java springboot环境下,处理获取小程序码返回的Buffer数据

Java获取小程序码

文档链接:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/qr-code/wxacode.getUnlimited.html

注意请求成功时,只会返回buffer数据
可以用字节数组接收返回数据。当字节数组长度比较小时,判断为请求失败。

/**
     * 获取小程序码 base64编码
     *
     * @param scene 小程序码中的参数
     * @param page  小程序页面
     * @return 小程序码 base64编码数据
     */
    public String getMiniProgramCode(String scene, String page) {
        Object val = redisService.getValue(ACCESS_TOKEN_REDIS_KEY);
        String accessToken = Optional.ofNullable(val).map(String::valueOf).orElse(null);
        if (StringUtils.isBlank(accessToken)) {
            accessToken = getAccessToken();
        }
        HashMap<String, Object> body = new HashMap<>();
        body.put("scene", scene);
        body.put("page", page);
        body.put("env_version", miniProgramConfig.getEnvVersion());
        body.put("width", 114);
        HttpEntity<HashMap<String, Object>> httpEntity = new HttpEntity<>(body, null);
        ResponseEntity<byte[]> entity = restTemplate.exchange(GET_MINI_PROGRAM_CODE_URL + "?access_token=" + accessToken, HttpMethod.POST, httpEntity, byte[].class);
        byte[] buffer = entity.getBody();
        // 成功时微信服务直接返回小程序码的二进制数据,字节数组的长度会很大(大概是60000多)
        if (entity.getStatusCode() != HttpStatus.OK || buffer == null || buffer.length < 200) {
            log.error("请求获取小程序码失败, response: {}", Optional.ofNullable(buffer).map(String::new).orElse("response is null"));
            throw new InternalErrorException(BusinessCode.NOT_IMPLEMENTED);
        }
        return Base64.getEncoder().encodeToString(buffer);
    }
最后一次编辑于  2021-12-30  
点赞 0
收藏
评论

4 个评论

  • Mr.Zhao
    Mr.Zhao
    发表于移动端
    2021-12-30
    可以判断content-type
    2021-12-30
    赞同 1
    回复
  • undefined
    undefined
    2022-07-17

    感谢老铁的代码


    2022-07-17
    赞同
    回复
  • xxx
    xxx
    2022-06-10

    如果你的token 过期了呢 请问你用什么参数接收返回

    2022-06-10
    赞同
    回复
  • 于于于于于
    于于于于于
    2022-04-07
    restTemplate这个类,球球了
    
    2022-04-07
    赞同
    回复
登录 后发表内容