HTTPS 调用
请求地址
POST https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=ACCESS_TOKEN
一定要一个字一个字的看仔细
属性 类型 默认值 必填 说明 access_token string 是 接口调用凭证 path string 是 扫码进入的小程序页面路径,最大长度 128 字节,不能为空;对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar",即可在 wx.getLaunchOptionsSync 接口中的 query 参数获取到 {foo:"bar"}。 width number 430 否 二维码的宽度,单位 px。最小 280px,最大 1280px 返回值 Buffer 返回的图片 Buffer 异常返回 Object JSON 属性 类型 说明 errcode number 错误码 errmsg string 错误信息 errcode 的合法值 值 说明 最低版本 45029 生成码个数总和到达最大个数限制 返回值说明 如果调用成功,会直接返回图片二进制内容,如果请求失败,会返回 JSON 格式的数据。 注意 POST 参数需要转成 JSON 字符串,不支持 form 表单提交。 接口只能生成已发布的小程序的二维码。开发版的带参二维码可以在开发者工具预览时生成。 与 wxacode.get 总共生成的码数量限制为 100,000,请谨慎调用。 示例 请求 { "path":"page/index/index", "width":430 } 返回 { "errcode": 0, "errmsg": "ok", "contentType": "image/jpeg", "buffer": Buffer }
获取小程序码 (开箱即用)
getaccesstoken()中的 HttpServletResponse responsec 与getUserData()中的 HttpServletResponse responsec 这里没有用到可直接去掉
//获取WX小程序token @GetMapping("/token") public ApiResult getaccesstoken(HttpServletRequest request ,HttpServletResponse responsec) throws Exception { String scene = request.getParameter("scene"); String k = "share:"+scene; String o =null; try{ o = redisTemplate.opsForValue().get(k).toString(); }catch (Exception e){ } if(o != null && !o.equals("") ){ return new ApiResult().setCode(200).setMessage("操作成功").setData(o); } HttpGet httpGet = new HttpGet("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+appid+"&secret="+secret); CloseableHttpClient httpclient = HttpClients.createDefault(); String s = null; CloseableHttpResponse response = null; response = httpclient.execute(httpGet); String retname = ""; // 判断返回状态是否为200 if (response.getStatusLine().getStatusCode() == 200) { s = EntityUtils.toString(response.getEntity()); JSONObject objects = JSONObject.parseObject(s); retname = getUserData(request,objects.get("access_token").toString(),responsec); } return new ApiResult().setCode(200).setData(retname).setMessage("操作成功"); } //获取小程序码 public String getUserData(HttpServletRequest request, String token ,HttpServletResponse responsec) { // 创建Httpclient对象 String url = ""; String page = request.getParameter("page"); String width = request.getParameter("width"); String scene = request.getParameter("scene"); CloseableHttpClient httpclient = HttpClients.createDefault(); String resultString = ""; CloseableHttpResponse response = null; try { // 创建uri URIBuilder builder = new URIBuilder("https://api.weixin.qq.com/wxa/getwxacodeunlimit"+"?access_token="+token); // builder.addParameter("",acctoken); //参数添加 // // builder.addParameter("width",width); //参数添加 // builder.addParameter("page",page); //参数添加 URI uri = builder.build(); // 创建http GET请求 HttpPost httpPost = new HttpPost(uri); httpPost.addHeader("Content-Type", "application/json; charset=UTF-8"); String postParams ="{\"page\":\""+page+"\",\"width\":\""+width+"\",\"scene\":\""+scene+"\"}"; System.out.println(postParams); HttpEntity httpEntity = new StringEntity(postParams); ((HttpPost) httpPost).setEntity(httpEntity); // 执行请求 response = httpclient.execute(httpPost); // 判断返回状态是否为200 if (response.getStatusLine().getStatusCode() == 200) { //System.out.println("我的状态是200了!"); String fileName = response.getHeaders("Content-Disposition")[0].getValue().split("filename=")[1]; //System.out.println("-------------->>>>我的名字是 "+fileName); if (response.getStatusLine().getStatusCode() == 200) { //得到实体 HttpEntity entity = response.getEntity(); byte[] data = EntityUtils.toByteArray(entity); InputStream inputStream = new ByteArrayInputStream(data); String uid = UUIDUtil.getUuid()+".jpg"; //上传到图片服务器 ossClientService.uploadFile2OSS(inputStream,uid,"路径"); url = "https://网址/路径/"+uid; //==================保存到redis========== String k = "share:"+scene;//保存到redis (图片地址) try{ redisTemplate.opsForValue().set(k,url); }catch (Exception e){ } //==================保存到redis END========== //存入磁盘 //...... } else { throw new Exception("文件下载失败!Http状态码为" + response.getStatusLine().getStatusCode()); } } } catch (Exception e) { e.printStackTrace(); } finally { try { if (response != null) { response.close(); } httpclient.close(); } catch (IOException e) { e.printStackTrace(); } } //imgShow(url,responsec); //可调用下方接口直接转发到调用者 return url; } /** * 将获取到的图片发到自己目标地址上 * @param url * @param * @param response */ // @GetMapping("/show") public void imgShow( String url ,HttpServletResponse response) { InputStream fis = null; OutputStream os = null; try { String [] urls = url.split("\\\\"); File files = new File(url); String filePath = files.getCanonicalPath(); fis = new FileInputStream(url);//本地图片地址 os = response.getOutputStream(); int count = 0; byte[] buffer = new byte[1024 * 8]; while ((count = fis.read(buffer)) != -1) { os.write(buffer, 0, count); os.flush(); } } catch (Exception e) { e.printStackTrace(); } finally { try { fis.close(); os.close(); } catch (IOException e) { e.printStackTrace(); } } }