微信永久二维码生成和换取

 1 import java.io.BufferedInputStream;
 2 import java.io.File;
 3 import java.io.FileOutputStream;
 4 import java.net.URL;
 5 import java.util.Date;
 6 
 7 import javax.net.ssl.HttpsURLConnection;
 8 
 9 import net.sf.json.JSONObject;
10 
11 /**
12  * 二维码生成和读的工具类
13  * 
14  */
15 public class QRcode {
16     /**
17      * 永久二维码
18      * 
19      * @param accessToken
20      * @param sceneId场景iD 1~10000
21      * @return
22      */
23     public static String createForeverTicket(String accessToken, String barId) {
24         String ticke = null;
25         // 拼接请求地址
26         String requestUrl = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN";
27         requestUrl = requestUrl.replace("TOKEN", accessToken);
28         // 需要提交json数据
29         //String jsonmsg = "{\"action_name\": \"QR_LIMIT_STR_SCENE\",\"action_info\":{\"scene\":{\"scene_id\":%d}}}";
30         String jsonmsg = "{\"action_name\": \"QR_LIMIT_STR_SCENE\", \"action_info\": {\"scene\": {\"scene_str\": \""+barId+"\"}}}";
31         // 创建永久带参二维码
32         JSONObject jsonObject = WeixinUtil.httpRequest(requestUrl, "POST", String.format(jsonmsg, barId));
33         if (null != jsonObject) {
34             try {
35                 ticke = jsonObject.getString("ticket");
36                 System.out.println("永久带参二维码ticket成功=" + ticke);
37             } catch (Exception e) {
38                 int err = jsonObject.getInt("errcode");
39                 String errormsg = jsonObject.getString("errmsg");
40                 System.out.println("永久带参二维码ticket失败失败errcode=" + err + "errmsg=" + errormsg);
41             }
42         }
43         return ticke;
44     }
45 
46     public static String getRQcode(String ticket, String savepath) {
47         String filepath = null;
48         String requestUrl = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET";
49         requestUrl = requestUrl.replace("TICKET", ticket);
50         try {
51             URL url = new URL(requestUrl);
52             HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
53             conn.setDoInput(true);
54             conn.setRequestMethod("GET");
55             if (!savepath.endsWith("/")) {
56                 savepath += "/";
57             }
58             // 将ticket 作为文件名
59             filepath = savepath + ticket + new Date().getTime() + ".jpg";
60             // 将微信服务器返回的输入流写入文件
61             BufferedInputStream bis = new BufferedInputStream(conn.getInputStream());
62             FileOutputStream fos = new FileOutputStream(new File(filepath));
63             byte[] buf = new byte[8096];
64             int size = 0;
65             while ((size = bis.read(buf)) != -1)
66                 fos.write(buf, 0, size);
67             fos.close();
68             bis.close();
69             System.out.println(conn);
70             conn.disconnect();
71             System.out.println("根据ticket换取二维码成功");
72         } catch (Exception e) {
73             filepath = null;
74             System.out.println("根据ticket换取二维码失败" + e);
75         }
76         return filepath;
77     }
78     
79     public static void main(String[] args) {
80         String assesstoken = WeixinUtil.getAccessToken(appid, secret);
81         String ticket = createForeverTicket(assesstoken, "你要携带的参数");
82         String path = "d:/workspace/userfiles/ticket";
83         getRQcode(ticket, path);
84     }
85 
86 }
1 public static String getAccessToken(String appid, String secret) {
2   String accessTokenUrl = "https://api.weixin.qq.com/cgi-bin/token?" + "grant_type=client_credential" +
3      // 此处填写你自己的appid
4       "&appid=" + appid +
5       // 此处填写你自己的appsecret
6       "&secret=" + secret;
7    JSONObject jsonObject = httpUtils.httpsRequest(accessTokenUrl, "GET", null);
8    return (String) jsonObject.get("access_token");
9 }
 1 /**
 2  * 发起https请求并获取结果
 3   * 
 4   * @param requestUrl    请求地址
 5   * @param requestMethod 请求方式(GET、POST)
 6   * @param outputStr     提交的数据
 7   * @return JSONObject(通过JSONObject.get(key)的方式获取json对象的属性值)
 8*/
 9  public static JSONObject httpRequest(String requestUrl, String requestMethod, String outputStr) {
10     JSONObject jsonObject = null;
11     StringBuffer buffer = new StringBuffer();
12      try {
13        // 创建SSLContext对象,并使用我们指定的信任管理器初始化
14         TrustManager[] tm = { new MyX509TrustManager() };
15         SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
16         sslContext.init(null, tm, new java.security.SecureRandom());
17         // 从上述SSLContext对象中得到SSLSocketFactory对象
18         SSLSocketFactory ssf = sslContext.getSocketFactory();
19
20         URL url = new URL(requestUrl);
21         HttpsURLConnection httpUrlConn = (HttpsURLConnection) url.openConnection();
22         httpUrlConn.setSSLSocketFactory(ssf);
23 
24         httpUrlConn.setDoOutput(true);
25         httpUrlConn.setDoInput(true);
26         httpUrlConn.setUseCaches(false);
27         // 设置请求方式(GET/POST)
28         httpUrlConn.setRequestMethod(requestMethod);
29 
30         if ("GET".equalsIgnoreCase(requestMethod))
31           httpUrlConn.connect();
32 
33            // 当有数据需要提交时
34            if (null != outputStr) {
35              OutputStream outputStream = httpUrlConn.getOutputStream();
36               // 注意编码格式,防止中文乱码
37               outputStream.write(outputStr.getBytes("UTF-8"));
38               outputStream.close();
39            }
40 
41            // 将返回的输入流转换成字符串
42            InputStream inputStream = httpUrlConn.getInputStream();
43            InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
44            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
45 
46            String str = null;
47            while ((str = bufferedReader.readLine()) != null) {
48              buffer.append(str);
49            }
50            bufferedReader.close();
51            inputStreamReader.close();
52            // 释放资源
53            inputStream.close();
54            inputStream = null;
55            httpUrlConn.disconnect();
56            jsonObject = JSONObject.fromObject(buffer.toString());
57       } catch (ConnectException ce) {
58          log.error("Weixin server connection timed out.");
59       } catch (Exception e) {
60          log.error("https request error:{}", e);
61       }
62    return jsonObject;
63  }

 

posted @ 2019-05-06 16:41  抟鹏  阅读(1063)  评论(0编辑  收藏  举报