微信获取小程序码java

1,822 阅读1分钟

微信小程序获取小程序码的无限制接口是返回二进制内容

MxzZ8g.png
MxzVPS.png

请求微信接口获取字节数组byte[]

 public byte[] getQrCodeUnlimited(String scene,String page){
		// 获取access_token 请自己封装
        String accessToken = getAccessToken();
        Map<String,String> params = new HashMap<>(3);
        params.put("scene",scene);
        params.put("page",page);
        try {
            byte[] buffer = HttpClientUtil.doJsonPostRawResponse("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + accessToken, null, params);
            return buffer;
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }
// 此处的httpUtil是我自己封装的,你也可以使用[wxJava](https://github.com/Wechat-Group/WxJava)里面的小程序获取byte数组的方法获取,第二种没有尝试过

通过springmvc输出出去

@RequestMapping("/qrcode")
@RestController
public class QrCodeController {
    @Autowired
    private WechatUtil wechatUtil;

    // 这个方法可以实现,十分简单
    @RequestMapping("/unlimted")
    public void getQrcodeUnlimted(@RequestParam(value = "page",required = false)String page,@RequestParam(value = "sid",required = false)String sid, HttpServletResponse response) throws IOException {
        sid = URLDecoder.decode(sid,"UTF-8");
        String scene = sid;
        byte[] buffer =  wechatUtil.getQrCodeUnlimited(scene,page);
        response.setContentType("image/jpeg");
        OutputStream outputStream = response.getOutputStream();
        outputStream.write(buffer);
        outputStream.flush();
        outputStream.close();
    }

    // 下面这个方法,也可以实现
    @RequestMapping("/unlimted2")
    public ResponseEntity<byte[]> getQrcodeUnlimted2(@RequestParam(value = "page",required = false)String page, @RequestParam(value = "sid",required = false)String sid, HttpServletResponse response) throws IOException {
        sid = URLDecoder.decode(sid,"UTF-8");
        String scene = sid;
        byte[] buffer =  wechatUtil.getQrCodeUnlimited(scene,page);
        HttpHeaders headers = new HttpHeaders();
        headers.setCacheControl(CacheControl.noCache().getHeaderValue());
        headers.setContentType(MediaType.IMAGE_JPEG);
        ResponseEntity<byte[]> responseEntity = new ResponseEntity<byte[]>(buffer,headers,HttpStatus.OK);
        return responseEntity;
    }
}

前端可以通过修改src里面的值来修改

<img src="data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAUA
    AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
        9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot" />

具体可以参考base64图片中的高分答案

总结

这终究是以IO操作,返回流时,加了头部信息image/jpeg

不多bb,我去当社畜了,如果有需要工具包的可以评论。