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());
}
网友评论