美文网首页
微信小程序生成二维码返回buff处理

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

作者: 半日孤独 | 来源:发表于2020-08-14 15:38 被阅读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());
        }
    

    相关文章

      网友评论

          本文标题:微信小程序生成二维码返回buff处理

          本文链接:https://www.haomeiwen.com/subject/fsigdktx.html