微信小程序生成二维码返回buff处理

2020-08-14  本文已影响0人  半日孤独

1.官方文档

https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/qr-code/wxacode.createQRCode.html

2.出错点

接口后面的access_token参数不能丢失
requestUrl = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=ACCESS_TOKEN";
requestUrl = requestUrl.replace("ACCESS_TOKEN", accessToken.toString());
必须返回byte[],如果返回字符串,会解析不到数据
byte[] responseContent = null;
try {
            // 创建默认的httpClient实例
            httpClient = HttpClients.createDefault();
            // 执行请求
            response = httpClient.execute(httpPost);
            entity = response.getEntity();
            responseContent = EntityUtils.toByteArray(entity);
 } catch (Exception e) {}
返回base64字符串时,必须使用org.apache.tomcat包下的
byte[] imageContent = wechatService.findAccessToken(jsonObject);
return Base64.encodeBase64String(imageContent);

3.具体代码

3.1 controller

//jsonObject具体参数请查看小程序官方文档
@RequestMapping(value = "/getShareCode", method = RequestMethod.POST)
    public String getShareCode(@RequestBody JSONObject jsonObject) {
        try {
            byte[] imageContent = wechatService.findAccessToken(jsonObject);
            final HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.IMAGE_PNG);
            return Base64.encodeBase64String(imageContent);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("status", false);
            jsonObject.put("msg", "调用失败");
        }
        return null;
    }

3.2 service

 public byte[] findAccessToken(JSONObject jsonObject) {
        String requestUrl;
        String responseContent;
        JSONObject parseObject;
        //防止多次获取accessToken
        Object accessToken = redisTemplate.opsForValue().get("accessToken");
        if (accessToken == null) {
            requestUrl = HttpParame.ACCESS_TOKEN_URL;
            requestUrl = requestUrl.replace("APPID", appid);
            requestUrl = requestUrl.replace("APPSECRET", appSecret);
            responseContent = HttpClientUtil.getInstance().sendHttpGet(requestUrl);
            parseObject = JSONObject.parseObject(responseContent);
            accessToken = parseObject.getString("access_token");
            //设置redis,防止重复申请
            redisTemplate.opsForValue().set("accessToken", accessToken, 2, TimeUnit.HOURS);
        }
        requestUrl = "https://api.weixin.qq.com/wxa/getwxacode?access_token=ACCESS_TOKEN";
        requestUrl = requestUrl.replace("ACCESS_TOKEN", accessToken.toString());
        return HttpClientUtil.getInstance().sendHttpPostByte(requestUrl, jsonObject.toJSONString());
    }
上一篇下一篇

猜你喜欢

热点阅读