官方文档:获取二维码
这里使用其中的接口B:
字段含义写的很清楚,需要注意的是page是小程序中已发布页面,且不能携带参数,参数放在scene中。请求成功的话微信服务器返回的是输入流,需要自行保存,以下看代码:
public class Test
{
public static void main(String[] args)
{
try
{
URL url = new URL("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=你的access_token");
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setRequestMethod("POST");// 提交模式
// conn.setConnectTimeout(10000);//连接超时 单位毫秒
// conn.setReadTimeout(2000);//读取超时 单位毫秒
// 发送POST请求必须设置如下两行
httpURLConnection.setDoOutput(true);
httpURLConnection.setDoInput(true);
// 获取URLConnection对象对应的输出流
PrintWriter printWriter = new PrintWriter(httpURLConnection.getOutputStream());
// 发送请求参数
JSONObject paramJson = new JSONObject();
paramJson.put("scene", "a=1234567890");
paramJson.put("page", "pages/index/index");
paramJson.put("width", 430);
paramJson.put("auto_color", true);
/**
* line_color生效
* paramJson.put("auto_color", false);
* JSONObject lineColor = new JSONObject();
* lineColor.put("r", 0);
* lineColor.put("g", 0);
* lineColor.put("b", 0);
* paramJson.put("line_color", lineColor);
* */
printWriter.write(paramJson.toString());
// flush输出流的缓冲
printWriter.flush();
//开始获取数据
BufferedInputStream bis = new BufferedInputStream(httpURLConnection.getInputStream());
OutputStream os = new FileOutputStream(new File("/Users/Xxxx/Music/abc.png"));
int len;
byte[] arr = new byte[1024];
while ((len = bis.read(arr)) != -1)
{
os.write(arr, 0, len);
os.flush();
}
os.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
---------------------
/**
* 获取小程序的token_access
*
* @param token
* @param create_time
* @param secret
* @param user_name
* @return
*/
@ResponseBody
@RequestMapping(value = "getWXACodeUnlimit")
public ResultCode getWXACodeUnlimit(
@RequestParam(value = "scene", required = false) String scene,
HttpServletRequest request) {
System.out.println("111=====" + new Date());
// 缺少参数
if (StringUtils.isBlank(scene)) {
return ResultCodeDataStr.ERROR("invalid argument");
}
String md5 = MD5Util.string2MD5(scene);
// System.out.println(System.getProperty("user.dir"));
String imageStorage = PropertiesUtil.getProperties_1(
"resources/project.properties", "data.storage");
String imageDomain = PropertiesUtil.getProperties_1(
"resources/project.properties", "images.domain");
// String pic = request.getRealPath("/") + "\\images\\qrcode\\" + md5
// + ".png";
// System.out.println(request.getRealPath("/"));
String pic = imageStorage + "/images/qrcode/" + md5 + ".png";
String pic1 = imageDomain + "/images/qrcode/" + md5 + ".png";
/*
* String tempImage = imageStorage + "/images/qrcode"; File tempFile =
* new File(tempImage); if (!tempFile.exists()) { tempFile.mkdirs(); }
*/
String expires_in = redisDBService.GET("qrcode:accessToken");
String res = null;
if (expires_in == null) {
res = tokenServiceImpl.getAccessToken();
redisDBService.SET("qrcode:accessToken", res, 7000);
} else {
res = expires_in;
}
System.out.println("start=====" + new Date());
try {
URL url = new URL(
"https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="
+ res);
HttpURLConnection httpURLConnection = (HttpURLConnection) url
.openConnection();
httpURLConnection.setRequestMethod("POST");// 提交模式
// conn.setConnectTimeout(10000);//连接超时 单位毫秒
// conn.setReadTimeout(2000);//读取超时 单位毫秒
// 发送POST请求必须设置如下两行
httpURLConnection.setDoOutput(true);
httpURLConnection.setDoInput(true);
// 获取URLConnection对象对应的输出流
PrintWriter printWriter = new PrintWriter(
httpURLConnection.getOutputStream());
// 发送请求参数
JSONObject paramJson = new JSONObject();
paramJson.put("scene", scene);
// paramJson.put("width", 430);
// paramJson.put("auto_color", true);
/**
* line_color生效 paramJson.put("auto_color", false); JSONObject
* lineColor = new JSONObject(); lineColor.put("r", 0);
* lineColor.put("g", 0); lineColor.put("b", 0);
* paramJson.put("line_color", lineColor);
* */
printWriter.write(paramJson.toString());
// flush输出流的缓冲
printWriter.flush();
// 开始获取数据
BufferedInputStream bis = new BufferedInputStream(
httpURLConnection.getInputStream());
// String res = request.getContextPath();
// System.out.println(pic);
OutputStream os = new FileOutputStream(new File(pic));
int len;
byte[] arr = new byte[1024];
while ((len = bis.read(arr)) != -1) {
os.write(arr, 0, len);
os.flush();
}
os.close();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("end=====" + new Date());
return ResultCodeDataStr.SUCCESS(pic1);
}