开发步骤:
微信官网文档地址:https://developers.weixin.qq.com/miniprogram/dev/api/qrcode.html
1.要获取微信小程序码需要先获取accessToken
2.使用accessToken获取小程序码的图片流。 接口使用的是接口B小程序码没有数量限制
3.图片流下载
发送请求的代码https://blog.csdn.net/qq_34706514/article/details/82658380
/**
* 微信常量
* @Author: liangkesai
* @CreateDate: 2018/8/17 18:11
*/
public interface Wechat {
/**小程序唯一标识*/
String APPID = "*****";
/**小程序的 app secret*/
String APPSECRET = "******";
/**默认*/
String GRANTTYPE = "authorization_code";
/**根据code获取sessionKey和openId的url*/
String WX_CODE2OPENID_URL = "https://api.weixin.qq.com/sns/jscode2session";
/**获取access_token*/
String ACCESS_TOKEN = "https://api.weixin.qq.com/cgi-bin/token";
/**获取二维码图片*/
String WXACODEUNLIMIT = "https://api.weixin.qq.com/wxa/getwxacodeunlimit";
}
/**
* 从腾讯获取获取accessToken
*/
public static void getAccessToken(){
String param = "grant_type=client_credential&appid="+Wechat.APPID+"&secret="+Wechat.APPSECRET;
String result = UrlUtils.sendGet(Wechat.ACCESS_TOKEN,param);
JSONObject demoJson = JSONObject.parseObject(result);
String accessToken = demoJson.getString("access_token");
String expiresIn = demoJson.getString("expires_in");
Token token = Token.getInstance();
token.setAccessToken(accessToken);
//过期时间的毫秒数
token.setExpiryTime(System.currentTimeMillis()+1000*60*100L);
}
/**
* 获取小程序码
* @param jo
* @return
*/
public static InputStream getRQ(JSONObject jo) {
//这儿accessToken从腾讯自己获取
String accessToken = GetTokenUtil.getAccessToken();
if (accessToken != null) {
try {
if (jo == null) {
jo = new JSONObject();
jo.put("scene", "");
}
HttpResponse<InputStream> response = Unirest.post(Wechat.WXACODEUNLIMIT)
.header("Content-type", "application/json;charset=UTF-8")
.queryString("access_token", accessToken)
.body(jo.toJSONString())
.asBinary();
return response.getBody();
} catch (UnirestException e) {
e.printStackTrace();
throw new IllegalArgumentException("网络连接失败");
}
} else {
throw new IllegalArgumentException("获取token失败");
}
}
/**
* 小程序码下载到本地
*
* @param wechatQr
* @throws Exception
*/
private void getRQ(WechatQr wechatQr,String fileName, HttpServletResponse response) throws Exception {
String scene = wechatQr.getScene();
String page = wechatQr.getPage();
JSONObject jo = new JSONObject();
jo.put("scene", StringUtils.isBlank(scene) ? "" : scene);
jo.put("page", StringUtils.isBlank(page) ? "" : page);
// jo.put("width", 430); //二维码的宽度
// jo.put("is_hyaline", false); //是否需要透明底色, is_hyaline 为true时,生成透明底色的小程序码
InputStream inStream = WechatUtils.getRQ(jo);
String filename = fileName + ".jpg";
//当文件名不是英文名的时候,最好使用url解码器去编码一下,
filename = URLEncoder.encode(filename, "UTF-8");
//将响应的类型设置为图片
response.setContentType("image/jpeg");
response.setHeader("Content-Disposition", "attachment;filename=" + filename);
//好了 ,现在通过IO流来传送数据
OutputStream output = response.getOutputStream();
byte[] buff = new byte[1024 * 10];
int len = 0;
while ((len = inStream.read(buff)) > -1) {
output.write(buff, 0, len);
}
//关闭输入输出流
inStream.close();
output.close();
}