获取二维码流程如下,重新整理总结:(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();
- // 获取所有响应头字段
- Map<String, List<String>> 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")
- @ResponseBody
- public 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();
- Map<String, Object> map = new HashMap<String, 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;
- }
- }