获取微信接口各种信息

  1 package goshen.education.weichat;
  2 import java.io.BufferedReader;
  3 import java.io.DataInputStream;
  4 import java.io.DataOutputStream;
  5 import java.io.File;
  6 import java.io.FileInputStream;
  7 import java.io.InputStream;
  8 import java.io.InputStreamReader;
  9 import java.io.OutputStream;
 10 import java.net.HttpURLConnection;
 11 import java.net.URL;
 12 import java.util.Iterator;
 13 import java.util.List;
 14 import java.util.Map;
 15 import javax.activation.MimetypesFileTypeMap;
 16 import javax.servlet.http.HttpServletRequest;
 17 import org.slf4j.Logger;
 18 import org.slf4j.LoggerFactory;
 19 import org.springframework.ui.Model;
 20 import org.springframework.web.bind.annotation.RequestMapping;
 21 import org.springframework.web.servlet.ModelAndView;
 22 import goshen.education.utils.Tools;
 23 import goshen.education.web.StudentController;
 24 /**
 25  * @author cunli
 26  * 2016年8月23日 下午8:05:09
 27  * 微信
 28  */
 29 public class Weichat {
 30     private static final Logger log = LoggerFactory.getLogger(Weichat.class);
 31     private  URL url;
 32     private  HttpURLConnection httpURLConnection;
 33     public static final String APPID ="1234567";
 34     public static final String SECRET ="1234567";
 35     
 36 //    RNJm9LTbpazPD8Swd00eExw8i58nhHXz8vzFtxuYXGQ  消息加密密钥
 37     
 38     
 39     
 40     public static void main(String[] args){
 41         Weichat weichat = new Weichat();
 42         
 43         String accessToken = "eZe_B3a6H_3fRTUQVwHexoOcey82Q_rNRGfjzkH1fZ8mo7MbPlA4R-ncHvMYAbIEmuD4Wdv6tzg778UrKFRKvYBLpkmF75DAYN5vzxCLOb4IHYgAHADCT";
 44         
 45 //        log.info("************获取token************ "+weichat.accessToken());
 46         
 47 //        weichat.menus();//微信菜单
 48         
 49         
 50         String openid = "o4fZSwYiygaU-WzG5ZjnPAxWbQGg";//自己
 51         log.info("-------------获取用户信息------------- ");
 52         weichat.whoareyou(openid, accessToken);
 53         
 54         
 55         
 56 //        log.info("-------------获取关注者列表------------- "+weichat.customers(accessToken));
 57         
 58 //        String mediaId = "I5EAtAGd2ge-aq5OWlsRR0zhWEeNhJwmNKtwNNl_cEBZwfe01tFyVED3-bbCaUFu";
 59 //        String openIds = "oI3PGt6VbRrYsvGqAD-8t2qJzS0Y,oI3PGtx_NcIucQpJNw0qO5gT-An4";
 60 //        String[] ids = openIds.split(",");
 61 //        String lastIds = "";
 62 //        for (int i = 0; i < ids.length; i++) {
 63 //            lastIds+=ids[i].trim()+"\",\"";
 64 //        }
 65 //        String lastOpenIds = lastIds.substring(0,lastIds.length()-3);
 66 //        
 67 //        System.out.println(lastOpenIds);
 68 //        
 69 //        sendImgText(mediaId,lastIds,accessToken);
 70     }
 71     
 72     
 73     
 74     /**
 75      * @param request
 76      * @return 获取网页授权
 77      */
 78     public String userinfoByPage(HttpServletRequest request) {
 79         String code = request.getParameter("code");
 80         String urlStr = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="+APPID+"&secret="+SECRET+"&code="+code+"&grant_type=authorization_code";
 81         WeichatReturnCodes weichatReturnCodes =SendURLPost("", urlStr);
 82         String openid = weichatReturnCodes.getOpenid();
 83         return openid;
 84    
 85     }
 86     
 87     /**
 88      * @param scene_str 把当前用户openid,放到自己的二维码里面
 89      * @return 获取二维码
 90      */
 91     public String qrcode(String scene_str) {
 92          Qrcode qrcode = new Qrcode();
 93          ActionInfo action_info = new ActionInfo();
 94          Scene scene = new Scene();
 95          scene.setScene_str(scene_str);
 96          action_info.setScene(scene);
 97          qrcode.setAction_info(action_info);
 98         
 99          String qrcodeStr = Tools.toJson(qrcode);
100          System.out.println(qrcodeStr);
101         
102          String urlStr = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token="+accessToken();
103          WeichatReturnCodes token = SendURLPost(qrcodeStr,urlStr);
104         
105          String accessTokenIsInvaild = token.getErrcode();
106          log.info("WeichatController","------------错误信息-------------"+accessTokenIsInvaild);
107          log.info("WeichatController","------------二维码地址-------------"+token.getTicket());
108         return token.getTicket();
109     }
110     /** 
111      * 上传图片 
112      *  
113      * @param urlStr 
114      * @param textMap 
115      * @param fileMap 
116      * @return 
117      */  
118     @SuppressWarnings("rawtypes")
119     public static String formUpload(String urlStr,Map<String, String> fileMap) {  
120         String res = "";  
121         HttpURLConnection conn = null;  
122         String BOUNDARY = "---------------------------123821742118716"; //boundary就是request头和上传文件内容的分隔符  
123         try {  
124             URL url = new URL(urlStr);  
125             conn = (HttpURLConnection) url.openConnection();  
126             conn.setConnectTimeout(5000);  
127             conn.setReadTimeout(30000);  
128             conn.setDoOutput(true);  
129             conn.setDoInput(true);  
130             conn.setUseCaches(false);  
131             conn.setRequestMethod("POST");  
132             conn.setRequestProperty("Connection", "Keep-Alive");  
133             conn.setRequestProperty("User-Agent","Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.6)");  
134             conn.setRequestProperty("Content-Type","multipart/form-data; boundary=" + BOUNDARY);  
135   
136             OutputStream out = new DataOutputStream(conn.getOutputStream());  
137   
138             // file  
139             if (fileMap != null) {  
140                 Iterator iter = fileMap.entrySet().iterator();  
141                 while (iter.hasNext()) {  
142                     Map.Entry entry = (Map.Entry) iter.next();  
143                     String inputName = (String) entry.getKey();  
144                     String inputValue = (String) entry.getValue();  
145                     if (inputValue == null) {  
146                         continue;  
147                     }  
148                     File file = new File(inputValue);  
149                     String filename = file.getName();  
150                     String contentType = new MimetypesFileTypeMap()  
151                             .getContentType(file);  
152                     if (filename.endsWith(".tmp")) {  
153                         contentType = "image/tmp";  
154                     }  
155                     if (contentType == null || contentType.equals("")) {  
156                         contentType = "application/octet-stream";  
157                     }  
158   
159                     StringBuffer strBuf = new StringBuffer();  
160                     strBuf.append("\r\n").append("--").append(BOUNDARY).append(  
161                             "\r\n");  
162                     strBuf.append("Content-Disposition: form-data; name=\""  
163                             + inputName + "\"; filename=\"" + filename  
164                             + ".png\"\r\n");  
165                     strBuf.append("Content-Type:" + contentType + "\r\n\r\n");  
166   
167                     out.write(strBuf.toString().getBytes());  
168   
169                     DataInputStream in = new DataInputStream(  
170                             new FileInputStream(file));  
171                     int bytes = 0;  
172                     byte[] bufferOut = new byte[1024];  
173                     while ((bytes = in.read(bufferOut)) != -1) {  
174                         out.write(bufferOut, 0, bytes);  
175                     }  
176                     in.close();  
177                 }  
178             }  
179   
180             byte[] endData = ("\r\n--" + BOUNDARY + "--\r\n").getBytes();  
181             out.write(endData);  
182             out.flush();  
183             out.close();  
184   
185             // 读取返回数据  
186             StringBuffer strBuf = new StringBuffer();  
187             BufferedReader reader = new BufferedReader(new InputStreamReader(  
188                     conn.getInputStream()));  
189             String line = null;  
190             while ((line = reader.readLine()) != null) {  
191                 strBuf.append(line).append("\n");  
192             }  
193             res = strBuf.toString();  
194             reader.close();  
195             reader = null;  
196         } catch (Exception e) {  
197             System.out.println("发送POST请求出错。" + urlStr);  
198             e.printStackTrace();  
199         } finally {  
200             if (conn != null) {  
201                 conn.disconnect();  
202                 conn = null;  
203             }  
204         }  
205         return res;  
206     }  
207     
208     /**
209      * 群发(文本消息)
210      */
211     public void sendText(String accessToken){
212         
213         String context =  "{\"touser\": [\"oI3PGtx_NcIucQpJNw0qO5gT-An4\"], \"msgtype\": \"text\", \"text\": { \"content\": \"哈利路亚 halelujah\"}}";
214         String urlStr="https://api.weixin.qq.com/cgi-bin/message/mass/send?access_token="+accessToken;
215         SendURLPost(context,urlStr);
216         
217         System.out.println("***********群发(文本消息)*******已发送******");
218     }
219     
220     
221     
222     
223     
224     
225     /**
226      * 下载
227      */
228     public void download(String accessToken){
229                     
230     String mediaId="qppSqxO1FlBG2Ll3je-Od-aVdUkW7OZ0gHQ5mXoSbwkHT2HYIW59HhnGWlcl3BS8";
231     String urlStr="http://file.api.weixin.qq.com/cgi-bin/media/get?access_token="+accessToken+"&media_id="+mediaId;
232     SendURLPost("",urlStr);
233     
234     System.out.println("***********下载*************");
235     }
236     
237     
238     
239     /**
240      * 获取用户信息
241      */
242     public WeichatReturnCodes whoareyou(String openid,String accessToken){
243         
244             String urlStr ="https://api.weixin.qq.com/cgi-bin/user/info?access_token="+accessToken+"&openid="+openid+"&lang=zh_CN";
245             String context="";
246             WeichatReturnCodes weichatReturnCodes = SendURLPost(context,urlStr);
247             System.out.println("***********获取用户信息*************" +weichatReturnCodes.userInfo());
248             return weichatReturnCodes;
249             
250     }
251     /**
252      * 群发(图文消息)
253      */
254     public HelpPictureText sendImgText(String mediaId,String openIds,String accessToken){
255         
256         StringBuffer stringBuffer=new StringBuffer();
257         stringBuffer.append("{\"touser\":[\"");
258         stringBuffer.append(openIds);
259         stringBuffer.append("\"],\"mpnews\":{\"media_id\":\"");
260         stringBuffer.append(mediaId);
261         stringBuffer.append("\"}, \"msgtype\":\"mpnews\"}");
262         
263         String urlStr="https://api.weixin.qq.com/cgi-bin/message/mass/send?access_token="+accessToken;
264         WeichatReturnCodes weichatReturnCodes =SendURLPost(stringBuffer.toString(),urlStr);
265 //    String errcode = map.get("errcode").toString();
266         String errcode = "";
267 //    String errmsg = map.get("errmsg").toString();
268 //    String msgId = map.get("msg_id").toString();
269         String msgId = "";
270     
271     System.out.println();
272     
273     HelpPictureText helpPictureText=new HelpPictureText();
274     helpPictureText.setMsgId(msgId);
275     helpPictureText.setErrcode(errcode);
276     
277         return helpPictureText;
278     }
279     
280  /**
281  * 上传图文信息
282  */
283 public String uploadImgText(List<WechatMassMpnews> wechatPictureTexts,String accessToken){
284     
285     StringBuffer stringBuffer=new StringBuffer();
286     
287     for (WechatMassMpnews wechatPictureText2 : wechatPictureTexts) {
288     
289     stringBuffer.append("{\"thumb_media_id\":\"");
290     stringBuffer.append(wechatPictureText2.getThumbMediaId());
291     stringBuffer.append("\",\"author\":\"");
292     stringBuffer.append(wechatPictureText2.getAuthor());
293     stringBuffer.append("\",\"title\":\"");
294     stringBuffer.append(wechatPictureText2.getTitle());
295     stringBuffer.append("\",\"content_source_url\":\"");
296     stringBuffer.append(wechatPictureText2.getContentSourceUrl());
297     stringBuffer.append("\",\"content\":\"");
298     stringBuffer.append(wechatPictureText2.getContent().replaceAll("\\\\", "\\\\\\\\").replaceAll("\"", "\\\\\\\""));
299     stringBuffer.append("\",\"digest\":\"");
300     stringBuffer.append(wechatPictureText2.getDigest());
301     stringBuffer.append("\",\"show_cover_pic\":\"");
302     stringBuffer.append(wechatPictureText2.getShowCoverPic());
303     stringBuffer.append("\"}"+",");
304     
305     
306     }
307     
308     String wpt2=stringBuffer.substring(0,stringBuffer.length()-1);
309     String context ="{\"articles\": ["+wpt2+"]}";
310     
311     String urlStr="https://api.weixin.qq.com/cgi-bin/media/uploadnews?access_token="+accessToken;
312     WeichatReturnCodes weichatReturnCodes = SendURLPost(context,urlStr);
313 String mediaId = "";
314 //String mediaId = map.get("media_id").toString();
315 return mediaId;
316 }
317     /**
318      * 获取关注者列表
319      */
320     public String customers(String accessToken){
321         
322     String urlStr ="https://api.weixin.qq.com/cgi-bin/user/get?access_token="+accessToken+"&next_openid=";
323     String context="";
324     
325     WeichatReturnCodes weichatReturnCodes = SendURLPost(context,urlStr);
326 //        String data=map.get("data").toString();
327     UserList data = weichatReturnCodes.getData();
328     
329     log.info("-----------data------ "+data.toString());
330     
331     for (int i = 0; i < data.getOpenid().length; i++) {
332         log.info("-----------array------ "+data.getOpenid()[i]);
333     }
334     
335     
336 //        
337 //        JsonUtil jsonUtil=new JsonUtil();
338 //        Map<String, Object> map2=  JsonUtil.parseMapFromJsonString(data);
339 //        String openid=map2.get("openid").toString();
340 //         String openid1=openid.substring(1);
341 //         String openid2=openid1.substring(0,openid1.length()-1);
342 //         
343 //         String[] ids = openid2.split(",");
344 //         
345 //         String lastIds = "";
346 //            for (int i = 0; i < ids.length; i++) {
347 //                lastIds+=ids[i].trim()+"\",\"";
348 //            }
349 //            String lastOpenIds = lastIds.substring(0,lastIds.length()-3);
350     String lastOpenIds = "";
351         return lastOpenIds;
352     }
353     
354     
355     
356     /**
357      * 微信菜单
358      */
359     public void menus(String accessToken) {
360         WeichatMenu weichatMenu = new WeichatMenu();//主菜单
361         
362 //        -------------------------主菜单 1-----------------------------------
363         
364         WeiMenu weiMenu = new WeiMenu();//主菜单 1
365         weiMenu.setName("Goshen观");
366         weiMenu.setType("click");
367         
368         SubMenu subMenu11 = new SubMenu();//子菜单 1.1
369         subMenu11.setName("创新学院介绍");
370         subMenu11.setType("view");
371         subMenu11.setUrl("http://mp.weixin.qq.com/s?__biz=MzI0MzQzOTg0MQ==&mid=100000003&idx=1&sn=753f18a0d4db6d50a6661a6ad33aa28d&scene=0#wechat_redirect");
372         
373         SubMenu subMenu12 = new SubMenu();//子菜单 1.2
374         subMenu12.setName("关于高盛教育");
375         subMenu12.setType("view");
376         subMenu12.setUrl("http://mp.weixin.qq.com/s?__biz=MzI0MzQzOTg0MQ==&mid=100000029&idx=1&sn=772b3e381e134527b9e119ad9fb2ded9&scene=0#wechat_redirect");
377         
378         SubMenu subMenu13 = new SubMenu();//子菜单 1.3
379         subMenu13.setName("Goshen观点");
380         subMenu13.setType("view");
381         subMenu13.setUrl("http://wx.goshencn.com/");
382         
383         SubMenu subMenu14 = new SubMenu();//子菜单 1.4
384         subMenu14.setName("Goshen咨询");
385         subMenu14.setType("view");
386         subMenu14.setUrl("http://wx.goshencn.com/");
387         
388 SubMenu[] subMenus1 = {subMenu11,subMenu12,subMenu13,subMenu14};
389         
390         weiMenu.setSub_button(subMenus1);//子菜单 1,2,3,4
391         
392 //        -------------------------主菜单 1-----------------------------------
393         
394 //        -------------------------主菜单 2-----------------------------------
395         
396         WeiMenu weiMenu2 = new WeiMenu();//主菜单 2
397         weiMenu2.setName("Goshen圈");
398         
399         
400         SubMenu subMenu21 = new SubMenu();//子菜单 2.1
401         subMenu21.setName("Goshen公开课");
402         subMenu21.setType("view");
403         subMenu21.setUrl("http://wx.goshencn.com/");
404         
405         SubMenu subMenu22 = new SubMenu();//子菜单 2.2
406         subMenu22.setName("Goshen学子圈");
407         subMenu22.setType("view");
408         subMenu22.setUrl("http://wx.goshencn.com/");
409         
410         SubMenu subMenu23 = new SubMenu();//子菜单 2.3
411         subMenu23.setName("Goshen家长圈");
412         subMenu23.setType("view");
413         subMenu23.setUrl("http://v.qq.com/");
414         
415         SubMenu subMenu24 = new SubMenu();//子菜单 2.4
416         subMenu24.setName("交友 - 学习");
417         subMenu24.setType("view");
418         subMenu24.setUrl("http://v.qq.com/");
419         
420         SubMenu[] subMenus = {subMenu21,subMenu22,subMenu23,subMenu24};
421         
422         weiMenu2.setSub_button(subMenus);//子菜单 1,2,3,4
423         
424 //        -------------------------主菜单 2-----------------------------------
425         
426 //        -------------------------主菜单 3-----------------------------------
427         WeiMenu weiMenu3 = new WeiMenu();//主菜单 3
428         weiMenu3.setName("Goshen人");
429         weiMenu3.setType("click");
430         
431         SubMenu subMenu31 = new SubMenu();//子菜单 3.1
432         subMenu31.setName("注册 - 加入");
433         subMenu31.setType("view");
434         
435         String redirectUrl = "http://wx.goshencn.com/weichatLogin";
436         String url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid="+APPID+"&redirect_uri="+redirectUrl+"&response_type=code&scope=snsapi_base&state=haliluya#wechat_redirect";
437         subMenu31.setUrl(url);
438         
439         
440         
441         SubMenu subMenu32 = new SubMenu();//子菜单 3.2
442         subMenu32.setName("我的账户");
443         subMenu32.setType("view");
444         subMenu32.setUrl("http://wx.goshencn.com/");
445         
446         SubMenu subMenu33 = new SubMenu();//子菜单 3.3
447         subMenu33.setName("我的二维码");
448         subMenu33.setType("view");
449         subMenu33.setUrl("http://wx.goshencn.com/myQrcode");
450         
451         SubMenu subMenu34 = new SubMenu();//子菜单 3.4
452         subMenu34.setName("联系我们");
453         subMenu34.setType("view");
454         subMenu34.setUrl("http://mp.weixin.qq.com/s?__biz=MzI0MzQzOTg0MQ==&mid=100000029&idx=5&sn=78888945558437e44d3d1abf07b361f1&scene=0#wechat_redirect");
455         
456 SubMenu[] subMenus3 = {subMenu31,subMenu32,subMenu33,subMenu34};
457         
458         weiMenu3.setSub_button(subMenus3);//子菜单 1,2,3,4
459         
460 //        -------------------------主菜单 3-----------------------------------
461         
462         WeiMenu[] weiMenus = {weiMenu,weiMenu2,weiMenu3};
463         weichatMenu.setButton(weiMenus);//主菜单 1,2,3
464         
465         
466         String context = Tools.urlToJson(weichatMenu);
467 //        String context = Tools.toJson(weichatMenu);
468         
469         System.out.println("------------ "+context);
470         
471 //        accessToken = accessToken();//获取accessToken
472         
473         String urlStr=" https://api.weixin.qq.com/cgi-bin/menu/create?access_token="+accessToken;
474         
475         WeichatReturnCodes token = SendURLPost(context,urlStr);
476         
477         String accessTokenIsInvaild = token.getErrcode();
478         if ("42001".equals(accessTokenIsInvaild)) {//如果accessToken无效,重新获取
479             accessToken = accessToken();
480         }
481         
482         System.out.println("-----------微信菜单--------getErrcode---------- "+accessTokenIsInvaild);
483         System.out.println("-----------微信菜单--------getErrmsg---------- "+token.getErrmsg());
484     }
485     
486     
487     
488     /**
489      * 获取accessToken
490      */
491     public  String accessToken(){
492         
493         
494         String urlStr="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+APPID+"&secret="+SECRET;    
495         WeichatReturnCodes token = SendURLPost(APPID,urlStr);
496             
497     System.out.println("--------获取token时的错误码-----7200 正常------getExpires_in------ "+token.getExpires_in());
498     
499         return token.getAccess_token();
500     }
501     
502     /**
503      * @param articleId
504      * 发送信息
505      */
506     public  WeichatReturnCodes SendURLPost(String context,String urlStr)  {
507          StringBuilder sb = null;
508 //         String content = "";
509       try {
510         url = new URL(urlStr);
511          httpURLConnection = (HttpURLConnection) url.openConnection(); // 获取连接
512           httpURLConnection.setRequestMethod("POST"); // 设置请求方法为POST, 也可以为GET
513           httpURLConnection.setDoOutput(true);
514           OutputStream os = httpURLConnection.getOutputStream();
515           os.write(context.toString().getBytes("UTF-8"));
516           os.flush();
517           os.close();
518           InputStream is = httpURLConnection.getInputStream(
519                   );
520           BufferedReader br = new BufferedReader(new InputStreamReader(is,"utf-8"));
521            sb = new StringBuilder();
522           int b;
523           while ((b=br.read()) != -1) {
524            sb.append((char)b);
525           }
526 //          content = new String(sb.toString().getBytes("ISO8859-1"), "utf-8");
527 //          System.out.println(sb.toString());
528 //        sb.toString() =  {"access_token":"SpnkZdGB7Qy-cc8g1zmPiMj0eviJY72ZLimLLejeH8RGEhE8P8LQO5wayp0ehbL1VwrFtLi-Ex4u6YZPuRorsJ5pwpALY75oVrXqsd_NjedB5AHR-T8niG7uCRwTgWJ3JDRhABAWQE","expires_in":7200}
529           br.close();
530             } catch (Exception e) {
531                 e.printStackTrace();
532             }
533       return Tools.fromJson(sb.toString(), WeichatReturnCodes.class);
534           }
535     
536     
537 }

 

posted @ 2016-10-25 15:36  次序  阅读(4451)  评论(0编辑  收藏  举报