### 1. 官网地址
获取不限制的小程序码 | 微信开放文档
### 2. Java 代码实现
@Autowired RestTemplate restTemplate
/** * 获取小程序码,接口:getUnlimitedQRCode - 测试 * 1. 先获取token * 2. 获取图片 * @return */ @GetMapping('/getUnlimitedQRCodeImageBase64') def getUnlimitedQRCodeImageBase64(@RequestParam @RequestBody Map<String, String> params) { String token = testService.getAccessTokenTest() // log.info("mini.token : " + token) String imageUrlBase64 = testService.getwxacodeunlimitMini(token) log.info("imageUrlBase64 : " + imageUrlBase64) return success(imageUrlBase64) }
/** * 测试获取小程序码 token */ String getAccessTokenTest() { // 拼接url发起请求到微信认证服务器获取token String tokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET" .replace("APPID", "your_id") .replace("APPSECRET", "your_scret"); // 发送请求获取access_token Map<String, String> responseBody = restTemplate.exchange(tokenUrl, HttpMethod.GET, null, new ParameterizedTypeReference<Map<String, String>>() {}).getBody(); if (responseBody == null || responseBody.get("errcode") != null) { // 获取失败 System.out.println("getAccessToken失败:" + (responseBody == null ? "null" : responseBody.toString())); return null; } return responseBody.get("access_token"); }
/** * 返回base64 图片 * @return */ String getwxacodeunlimitMini(String token) { // 获取小程序码 String codeUrl = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=ACCESS_TOKEN".replace("ACCESS_TOKEN", token) Map<String, Object> map = new HashMap<>(); try { // 设置路径参数,类似 https://xxx.com?a=1&b=2,请求路径问号后面的参数,得用encodeURIComponent进行转码,前端用decodeURIComponent方法即可还原 // map.put("scene1", URLEncoder.encode("a=1&b=2", "utf-8")); map.put("scene", "a=1&b=2"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } // 跳转路径 map.put("page", "pages/index"); // 是否强制验证路径是否存在 map.put("check_path", false); // 当前环境:正式版为 "release",体验版为 "trial",开发版为 "develop"。默认是正式版。 默认下面这句代码是注释的,发布版本上生产环境时要注释这句代码 if(Holder.prod()){ map.put("env_version", "release"); //默认 }else { map.put("env_version", "trial"); } try { // 请求方法返回字节数组,转成base64格式返回前端 String base64 = Base64.getEncoder().encodeToString(getWechatQrcodeByRestTemplate(codeUrl, map)); return base64; // return getWechatQrcodeByRestTemplate(codeUrl , map) } catch (Exception e) { e.printStackTrace(); return null; } }
public byte[] getWechatQrcodeByRestTemplate(String url, Map<String, Object> body) { return restTemplate.exchange(url, HttpMethod.POST, new HttpEntity<>(body, null), byte[].class).getBody(); }