java生成微信小程序二维码并保存/返回给前端
直接使用,postman返回图片
/**
* @param 用于获取access_token
* @param apiKey 小程序id
* @param secretKey 小程序密钥
* @return access_token
* @throws Exception
*/
@RequestMapping(value = "/postToken")
public static String postToken(Integer scene,HttpServletResponse response) throws Exception {
String apiKey = "";//小程序id
String secretKey = "";//小程序密钥
String requestUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+apiKey+"&secret="+secretKey;
URL url = new URL(requestUrl);
// 打开和URL之间的连接
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
// 设置通用的请求属性
connection.setRequestProperty("Content-Type", "application/json");
connection.setRequestProperty("Connection", "Keep-Alive");
connection.setUseCaches(false);
connection.setDoOutput(true);
connection.setDoInput(true);
// 得到请求的输出流对象
DataOutputStream out = new DataOutputStream(connection.getOutputStream());
out.writeBytes("");
out.flush();
out.close();
// 建立实际的连接
connection.connect();
// 定义 BufferedReader输入流来读取URL的响应
BufferedReader in = null;
if (requestUrl.contains("nlp")) {
in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "GBK"));
} else {
in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
}
String result = "";
String getLine;
while ((getLine = in.readLine()) != null) {
result += getLine;
}
in.close();
JSONObject jsonObject = JSON.parseObject(result);
String accesstoken=jsonObject.getString("access_token");
String s = postMiniqrQr(accesstoken, scene, response);
return s ;
}
/**
* 生成带参小程序二维码
* @param scene 要输入的内容
* @param accessToken token
*/
public static String postMiniqrQr(String accessToken,Integer scene,HttpServletResponse response) {
// String accessToken="37_Tewt2QzuEC7zEczS-eZkHCJ7ZxaUzGkKANaJDhQ1ZvxeQWXJmnXdNNL6bS33jw_rU0AF61l4NtHrsI7TIAm3QH97BNoHR9tO8uVPeQ9C14_6vpWL-7nUrtGB1bZIQP8-0Bb12qlo3qRLM8E2PPKaAIAJJE";
try{
URL url = new URL("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="+accessToken);
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
// conn.setConnectTimeout(10000);//连接超时 单位毫秒
// conn.setReadTimeout(2000);//读取超时 单位毫秒
// 发送POST请求必须设置如下两行
httpURLConnection.setDoOutput(true); // 打开写入属性
httpURLConnection.setDoInput(true); // 打开读取属性
httpURLConnection.setRequestMethod("POST");// 提交方式
// 不得不说一下这个提交方式转换!!真的坑。。改了好长时间!!一定要记得加响应头
httpURLConnection.setRequestProperty("Content-Type", "application/x-javascript; charset=UTF-8");// 设置响应头
// 获取URLConnection对象对应的输出流
PrintWriter printWriter = new PrintWriter(httpURLConnection.getOutputStream());
// 发送请求参数
JSONObject paramJson = new JSONObject();
paramJson.put("scene", scene); // 你要放的内容
paramJson.put("path", "pages/index/index");
paramJson.put("width", 430); // 宽度
paramJson.put("auto_color", true);
printWriter.write(paramJson.toString());
// flush输出流的缓冲
printWriter.flush();
BufferedInputStream bis = new BufferedInputStream(httpURLConnection.getInputStream());
//创建一个空文件
OutputStream os = new FileOutputStream(new File("F:/test/test.jpg"));
//ByteArrayOutputStream os = new ByteArrayOutputStream();
int len;
byte[] arr = new byte[1024];
while ((len = bis.read(arr)) != -1)
{
os.write(arr, 0, len);
os.flush();
}
os.close();
//实现了生成二维码并保存在本地电脑的硬盘中。
File file = new File("F:/test/test.jpg");
FileInputStream fis = new FileInputStream(file);
long size = file.length();
byte[] temp = new byte[(int) size];
fis.read(temp, 0, (int) size);
fis.close();
byte[] data = temp;
response.setContentType("image/png");
OutputStream out = response.getOutputStream();
out.write(data);
out.flush();
out.close();
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}