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();
}
}
}