获取二维码流程如下,重新整理总结:(java)
转自 :http://www.wxapp-union.com/forum.php?mod=viewthread&tid=3584&extra=1.后台向微信发送请求,返回的为图片流
2.将微信返回的图片保存到服务器
3.将图片的地址返回到前台
4.前台处理就相当于处理 获取服务器的普通图片文件
如果图片有文件
可能是token失效(2个小时) ,参数传递失败等
HttpClientConnectionManager 自定义工具类
package cn.edu.hbcf.plugin.wx.utils;import java.io.BufferedReader;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.URL;import java.net.URLConnection;import java.net.URLEncoder;import java.util.List;import java.util.Map;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.client.methods.HttpPost;import org.apache.http.entity.StringEntity;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.message.BasicHeader;import org.apache.http.protocol.HTTP; public class HttpClientConnectionManager { /** * @param reqUrl * 基础的url地址 * @param params * 查询参数 * @return 构建好的url */ public static String httpPostWithJSON(String url, String json,String id) throws Exception { String result = null; // 将JSON进行UTF-8编码,以便传输中文 String encoderJson = URLEncoder.encode(json, HTTP.UTF_8); DefaultHttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(url); httpPost.addHeader(HTTP.CONTENT_TYPE, "application/json"); StringEntity se = new StringEntity(json); se.setContentType("application/json"); se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,"UTF-8")); httpPost.setEntity(se); // httpClient.execute(httpPost); HttpResponse response = httpClient.execute(httpPost); if (response != null) { HttpEntity resEntity = response.getEntity(); if (resEntity != null) { InputStream instreams = resEntity.getContent(); // ResourceBundle systemConfig = ResourceBundle.getBundle("config/system", Locale.getDefault()); // String uploadSysUrl = systemConfig.getString("agentImgUrl")+id+"/"; // File saveFile = new File(uploadSysUrl+id+".jpg"); String uploadSysUrl = "D:\upload"+"/"; File saveFile = new File(uploadSysUrl+id+".jpg"); // 判断这个文件(saveFile)是否存在 if (!saveFile.getParentFile().exists()) { // 如果不存在就创建这个文件夹 saveFile.getParentFile().mkdirs(); } saveToImgByInputStream(instreams, uploadSysUrl, id+".jpg"); } } return result; } /* @param instreams 二进制流 * @param imgPath 图片的保存路径 * @param imgName 图片的名称 * @return * 1:保存正常 * 0:保存失败 */ public static int saveToImgByInputStream(InputStream instreams,String imgPath,String imgName) throws FileNotFoundException{ int stateInt = 1; File file=new File(imgPath,imgName);//可以是任何图片格式.jpg,.png等 FileOutputStream fos=new FileOutputStream(file); if(instreams != null){ try { byte[] b = new byte[1024]; int nRead = 0; while ((nRead = instreams.read(b)) != -1) { fos.write(b, 0, nRead); } } catch (Exception e) { stateInt = 0; e.printStackTrace(); } finally { try { fos.flush(); fos.close();} catch (IOException e) {e.printStackTrace();} } } return stateInt; } public static boolean exists(String imgPath){ File saveFile = new File(imgPath); if (!saveFile.getParentFile().exists()) { return false; }else{ //如果存在判断这个文件的大小 if(saveFile.length()0){ System.out.println("--------------------------------"+saveFile.length()); return true; }else{ return false; } } } /** * 向指定URL发送GET方法的请求 * * @param url * 发送请求的URL * @param param * 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 * @return URL 所代表远程资源的响应结果 */ public static String sendGet(String url, String param) { String result = ""; BufferedReader in = null; try { String urlNameString = url + "?" + param; System.out.println(urlNameString+"........"); URL realUrl = new URL(urlNameString); // 打开和URL之间的连接 URLConnection connection = realUrl.openConnection(); // 设置通用的请求属性 connection.setRequestProperty("accept", "*/*"); connection.setRequestProperty("connection", "Keep-Alive"); connection.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); // 建立实际的连接 connection.connect(); // 获取所有响应头字段 MapString, ListString map = connection.getHeaderFields(); // 遍历所有的响应头字段 for (String key : map.keySet()) { System.out.println(key + "---" + map.get(key)); } // 定义 BufferedReader输入流来读取URL的响应 in = new BufferedReader(new InputStreamReader( connection.getInputStream())); String line; while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { System.out.println("发送GET请求出现异常!" + e); e.printStackTrace(); } // 使用finally块来关闭输入流 finally { try { if (in != null) { in.close(); } } catch (Exception e2) { e2.printStackTrace(); } } return result; } public static Object httpPostWithJSON2(String url, String json,String id) throws Exception { // 将JSON进行UTF-8编码,以便传输中文 InputStream instreams = null; String encoderJson = URLEncoder.encode(json, HTTP.UTF_8); DefaultHttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(url); httpPost.addHeader(HTTP.CONTENT_TYPE, "application/json"); StringEntity se = new StringEntity(json); se.setContentType("application/json"); se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,"UTF-8")); httpPost.setEntity(se); // httpClient.execute(httpPost); HttpResponse response = httpClient.execute(httpPost); if (response != null) { HttpEntity resEntity = response.getEntity(); if (resEntity != null) { instreams = resEntity.getContent(); } } return instreams; } }调用工具类中的方法 获取图片 参数需要前台传给
/** * 获取微信二维码 * @param path * @param width 二维码的宽度 * @param access_token * @return */@RequestMapping(value = "/createwxaqrcode")@ResponseBodypublic Object createwxaqrcode(String access_token,String path,String width, String id ){AgentDTO agentDTO = new AgentDTO();String URL = "https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode"; //二维码图片位置String agentImgDownloadUrl = "D:\upload"; try { AgentReqView agentResView = new AgentReqView(); MapString, Object map = new HashMapString, Object(); map.put("path", path); map.put("width", width); JSONObject json = JSONObject.fromObject(map); HttpClientConnectionManager.httpPostWithJSON(URL+"?access_token="+ access_token, json.toString(),id ); String downloadUrl = agentImgDownloadUrl+ id+ "/"; //返回给前端的后台服务器文件下载路径 String downloadfileUrl = downloadUrl + id + ".jpg"; agentResView.setDownloadfileUrl(downloadfileUrl); agentDTO.setResultCode("200"); agentDTO.setDesc("成功"); agentDTO.setBody(agentResView); } catch (Exception e) { e.printStackTrace(); } return agentDTO;}以下为返回值格式定义,可自由定义
import java.util.List;public class AgentDTO {private String resultCode;private String desc;private AgentReqView body;public AgentDTO (){}public AgentDTO (String resultCode,String desc){this.setResultCode(resultCode);this.setDesc(desc);}public String getResultCode() {return resultCode;}public void setResultCode(String resultCode) {this.resultCode = resultCode;}public String getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}public AgentReqView getBody() {return body;}public void setBody(AgentReqView body) {this.body = body;}}public class AgentReqView {private String downloadfileUrl;public String getDownloadfileUrl() {return downloadfileUrl;}public void setDownloadfileUrl(String downloadfileUrl) {this.downloadfileUrl = downloadfileUrl;}}













