zoukankan      html  css  js  c++  java
  • 微信 模拟登陆 公众平台模拟登陆 获取图文 上传图片

    package com.li.wei.xin;
     
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.URLEncoder;
    import java.nio.charset.Charset;
    import java.security.KeyManagementException;
    import java.security.NoSuchAlgorithmException;
    import java.util.HashMap;
    import java.util.List;
     
    import org.apache.commons.codec.digest.DigestUtils;
    import org.apache.commons.httpclient.HttpStatus;
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.entity.mime.HttpMultipartMode;
    import org.apache.http.entity.mime.MultipartEntity;
    import org.apache.http.entity.mime.content.FileBody;
    import org.apache.http.entity.mime.content.StringBody;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.util.EntityUtils;
     
    import com.alibaba.fastjson.JSON;
     
    public class WeiXin {
       
        private String loginUrl = "https://mp.weixin.qq.com/cgi-bin/login?lang=zh_CN";
        private final String HOST_NAME = "Host";
        private final String HOST_VALUE = "mp.weixin.qq.com";
        private final String HOME_URL = "https://mp.weixin.qq.com/";
        private boolean isLogin ;
        private String cookie;
        private final String USER_AGENT_VALUE="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0";
        private final String USER_AGENT_NAME="User-Agent";
        private final String CONTENT_TYPE_NAME="Content-Type";
        private final String CONTENT_TYPE_VALUE="application/x-www-form-urlencoded; charset=UTF-8";
        private final String REFERER_NAME="Referer";
        private int    RETURN_SUCCESS = 0;
        private String userName;
        private String password;
        private final String COOKIE_NAME="Cookie";
        private String personalHomeUrl ;
        private String ticket_id;
        private String ticket;
        private String token;
        private String uplaodImageUrl;
        private final String BOUNDARY = "----------ThIs_Is_tHe_bouNdaRY_$";
        private final String UPLOAD_SINGLE_PHOTO_URL  = "https://mp.weixin.qq.com/cgi-bin/operate_appmsg";
        private final String REMOVE_IMAGE_FILE_URL = "https://mp.weixin.qq.com/cgi-bin/modifyfile";
         
        public WeiXin(String userName,String password){
            this.userName = userName;
            this.password = password;
        }
         
        /**
         * 加载Tock信息
         * @throws KeyManagementException
         * @throws ClientProtocolException
         * @throws NoSuchAlgorithmException
         * @throws IOException
         */
        public void loadTicket() throws KeyManagementException, ClientProtocolException, NoSuchAlgorithmException, IOException{
             
            HashMap<String, String> headers = new HashMap<String, String>();
            headers.put(HOST_NAME, HOST_VALUE);
            headers.put(REFERER_NAME, HOME_URL);
            headers.put(USER_AGENT_NAME, USER_AGENT_VALUE);
            headers.put(COOKIE_NAME, cookie);
            Result result  = SendRequest.sendGet(personalHomeUrl, headers, null, "utf-8",true);
            String responseText = EntityUtils.toString(result.getHttpEntity());
             
            token = TextParse.prase(responseText, "t:["][\d]+?["]", 1).get(0).split(":")[1];
            token = token.substring(1,token.length()-1);
            ticket = TextParse.prase(responseText, "ticket:["][\dA-Za-z]+?["]", 1).get(0).split(":")[1];
            ticket = ticket.substring(1,ticket.length()-1);
            ticket_id = TextParse.prase(responseText, "user_name:["].+?["]", 1).get(0).split(":")[1];
            ticket_id = ticket_id.substring(1,ticket_id.length()-1);
            this.cookie = result.getCookie();
        }
         
        /**
         * 登录
         * @return
         * @throws KeyManagementException
         * @throws ClientProtocolException
         * @throws NoSuchAlgorithmException
         * @throws IOException
         */
        public LoginReurnInfo login() throws KeyManagementException, ClientProtocolException, NoSuchAlgorithmException, IOException{
            HashMap<String, String> headers = new HashMap<String, String>();
            headers.put(CONTENT_TYPE_NAME, CONTENT_TYPE_VALUE);
            headers.put(HOST_NAME, HOST_VALUE);
            headers.put(REFERER_NAME, HOME_URL);
            headers.put(USER_AGENT_NAME, USER_AGENT_VALUE);
            HashMap<String, String> param = new HashMap<String, String>();
            param.put("lang", "zh_CN");
            param.put("f", "json");
            param.put("imagecode", "");
            param.put("username", this.userName);
            param.put("pwd", DigestUtils.md5Hex(this.password.getBytes()));
            Result result  = SendRequest.sendPost(loginUrl, headers, param, "utf-8",true);
            String responseText = EntityUtils.toString(result.getHttpEntity());
            LoginReurnInfo  loginReurnInfo  =JSON.parseObject(responseText,LoginReurnInfo.class);
            if(loginReurnInfo.getErrCode()==0){
                isLogin = true;
                cookie = result.getCookie();
                personalHomeUrl = HOME_URL+loginReurnInfo.getErrMsg();
                loadTicket();
                uplaodImageUrl  = HOME_URL+"cgi-bin/filetransfer?action=upload_material&f=json&ticket_id="+ticket_id+"&ticket="+ticket+"&token="+token+"&lang=zh_CN";
            }
            return loginReurnInfo;
        }
         
        /**
         * 文件上传
         * @param path
         * @return
         * @throws KeyManagementException
         * @throws ClientProtocolException
         * @throws NoSuchAlgorithmException
         * @throws IOException
         */
        public UplaodFIleReturnInfo fileUpload(String path) throws KeyManagementException, ClientProtocolException, NoSuchAlgorithmException, IOException {
         
            if(!isLogin){
                   if(login().getErrCode()!=RETURN_SUCCESS){
                       return null;
                   }
               }
            HttpPost request = new HttpPost(uplaodImageUrl);    
            File uploadFile = new File(path);
            FileBody file = new FileBody(uploadFile,"image/jpg"); 
            MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE,BOUNDARY, Charset.defaultCharset()); 
            multipartEntity.addPart("Upload",new StringBody("Submit Query", Charset.forName("UTF-8")));   
            multipartEntity.addPart("folder",new StringBody("/cgi-bin/uploads",Charset.forName("UTF-8")));   
            multipartEntity.addPart("file",file);
              
            request.setEntity(multipartEntity); 
            request.addHeader(CONTENT_TYPE_NAME,"multipart/form-data; boundary="+BOUNDARY);
            request.addHeader(COOKIE_NAME,cookie);
            request.addHeader(USER_AGENT_NAME, USER_AGENT_VALUE);
            request.addHeader(HOST_NAME,HOST_VALUE);
            
            DefaultHttpClient httpClient = new DefaultHttpClient(); 
            HttpResponse response =httpClient.execute(request); 
             
            if(HttpStatus.SC_OK==response.getStatusLine().getStatusCode()){ 
            HttpEntity entity = response.getEntity(); 
            if (entity != null) { 
                String responseText =  EntityUtils.toString(entity);
                return JSON.parseObject(responseText,UplaodFIleReturnInfo.class);
               } 
             }
         return null;
       } 
         
        /**
         * 更新图文
         * @param appMsgId
         * @param singlePhotoAll
         * @return
         * @throws KeyManagementException
         * @throws ClientProtocolException
         * @throws NoSuchAlgorithmException
         * @throws IOException
         */
       public BaseResp updateSinglePhoto(String appMsgId,SinglePhoto...singlePhotoAll) throws KeyManagementException, ClientProtocolException, NoSuchAlgorithmException, IOException{
         
           if(!isLogin){
               if(login().getErrCode()!=RETURN_SUCCESS){
                   return null;
               }
           }
            HashMap<String, String> headers = new HashMap<String, String>();
            headers.put(CONTENT_TYPE_NAME, CONTENT_TYPE_VALUE);
            headers.put(HOST_NAME, HOST_VALUE);
            headers.put(USER_AGENT_NAME, USER_AGENT_VALUE);
            headers.put(COOKIE_NAME,cookie );
            headers.put(REFERER_NAME, "https://mp.weixin.qq.com/cgi-bin/appmsg?t=media/appmsg_edit&action=edit&type=10&isMul=0&isNew=1&lang=zh_CN&token="+token);
            HashMap<String, String> param = new HashMap<String, String>();
            int i=0;
            for (SinglePhoto singlePhoto : singlePhotoAll) {
                param.put("title"+i, singlePhoto.getTitle());
                param.put("digest"+i, singlePhoto.getDigest());
                param.put("author"+i, singlePhoto.getAuthor());
                param.put("fileid"+i, fileUpload(singlePhoto.getFilePath()).getContent());
                param.put("show_cover_pic"+i, singlePhoto.isDisplayCover()?"1":"0");
                param.put("content"+i,singlePhoto.getContent());
                param.put("sourceurl"+(i++), singlePhoto.getSourceurl());
            }
             
            if(appMsgId!=null){
                param.put("AppMsgId",appMsgId);
                param.put("sub", "update");
            }else{
                param.put("sub", "create");
            }
            param.put("count",String.valueOf(singlePhotoAll.length));
            param.put("ajax", "1");
            param.put("token", token);
            param.put("lang", "zh_CN");
            param.put("random", "0.7844814438014191");
            param.put("f", "json");
            param.put("t", "ajax-response");
            param.put("type", "10");
            Result result  = SendRequest.sendPost(UPLOAD_SINGLE_PHOTO_URL, headers, param, "utf-8",true);
            String responseText = EntityUtils.toString(result.getHttpEntity());
            return JSON.parseObject(responseText,BaseResp.class);
       }
       public BaseResp addSinglePhoto(SinglePhoto...singlePhotoAll) throws KeyManagementException, ClientProtocolException, NoSuchAlgorithmException, IOException{
           return updateSinglePhoto(null, singlePhotoAll);
       }
        
       /**
        * 删除单图文
        * @param appMsgId
        * @return
        * @throws KeyManagementException
        * @throws ClientProtocolException
        * @throws NoSuchAlgorithmException
        * @throws IOException
        */
       public BaseResp removeSinglePhoto(String appMsgId) throws KeyManagementException, ClientProtocolException, NoSuchAlgorithmException, IOException{
            
           if(!isLogin){
               if(login().getErrCode()!=RETURN_SUCCESS){
                   return null;
               }
           }
            
            HashMap<String, String> headers = new HashMap<String, String>();
            headers.put(CONTENT_TYPE_NAME, CONTENT_TYPE_VALUE);
            headers.put(HOST_NAME, HOST_VALUE);
            headers.put(USER_AGENT_NAME, USER_AGENT_VALUE);
            headers.put(COOKIE_NAME,cookie );
            headers.put("x-requested-with","XMLHttpRequest" );
            headers.put(REFERER_NAME,"https://mp.weixin.qq.com/cgi-bin/appmsg?begin=0&count=10&t=media/appmsg_list&type=10&action=list&token="+token+"&lang=zh_CN");
        
            HashMap<String, String> param = new HashMap<String, String>();
            param.put("AppMsgId", appMsgId);
            param.put("token",token);
            param.put("lang", "zh_CN");
            param.put("random", "0.5512174578492246");
            param.put("f", "json");
            param.put("ajax", "1");
            param.put("sub", "del");
            param.put("t", "ajax-response");
            Result result  = SendRequest.sendPost(UPLOAD_SINGLE_PHOTO_URL, headers, param, "utf-8",true);
            String responseText = EntityUtils.toString(result.getHttpEntity());
            return JSON.parseObject(responseText,BaseResp.class);
        
       }
        
       /**
        * 删除已经上传的文件
        * @param fileid
        * @return
        * @throws KeyManagementException
        * @throws ClientProtocolException
        * @throws NoSuchAlgorithmException
        * @throws IOException
        */
       public BaseResp removeImage(String fileid) throws KeyManagementException, ClientProtocolException, NoSuchAlgorithmException, IOException{
            
           if(!isLogin){
               if(login().getErrCode()!=RETURN_SUCCESS){
                   return null;
               }
           }
            
            HashMap<String, String> headers = new HashMap<String, String>();
            headers.put(CONTENT_TYPE_NAME, CONTENT_TYPE_VALUE);
            headers.put(HOST_NAME, HOST_VALUE);
            headers.put(USER_AGENT_NAME, USER_AGENT_VALUE);
            headers.put(COOKIE_NAME,cookie );
            headers.put("x-requested-with","XMLHttpRequest" );
            headers.put(REFERER_NAME,"https://mp.weixin.qq.com/cgi-bin/filepage?type=2&begin=0&count=10&t=media/list&token="+token+"&lang=zh_CN");
            HashMap<String, String> param = new HashMap<String, String>();
            param.put("fileid",fileid);
            param.put("token", token);
            param.put("lang", "zh_CN");
            param.put("random", "0.7610577117156507");
            param.put("f", "json");
            param.put("ajax", "1");
            param.put("oper", "del");
            param.put("t", "ajax-response");
             
            Result result  = SendRequest.sendPost(REMOVE_IMAGE_FILE_URL, headers, param, "utf-8",true);
            String responseText = EntityUtils.toString(result.getHttpEntity());
            return JSON.parseObject(responseText,BaseResp.class);
       }
        
       /**
        * 获得已经上传的文件
        * @return
        * @throws KeyManagementException
        * @throws ClientProtocolException
        * @throws NoSuchAlgorithmException
        * @throws IOException
        */
       public List<MaterialInfo>  getUploadFileInfo() throws KeyManagementException, ClientProtocolException, NoSuchAlgorithmException, IOException{
           if(!isLogin){
               if(login().getErrCode()!=RETURN_SUCCESS){
                   return null;
               }
           }
            HashMap<String, String> headers = new HashMap<String, String>();
            headers.put(CONTENT_TYPE_NAME, CONTENT_TYPE_VALUE);
            headers.put(HOST_NAME, HOST_VALUE);
            headers.put(USER_AGENT_NAME, USER_AGENT_VALUE);
            headers.put(COOKIE_NAME,cookie );
             
            Result result  = SendRequest.sendGet("https://mp.weixin.qq.com/cgi-bin/filepage?type=2&begin=0&count=100000000000000000&t=media/list&token="+token+"&lang=zh_CN", headers, null, "utf-8",true);
            String responseText = EntityUtils.toString(result.getHttpEntity());
            responseText = TextParse.prase(responseText,"\[[{]"file_id".+?\]").get(0);
            return JSON.parseArray(responseText, MaterialInfo.class);
       }
        
       /**
        * 下载图片
        * @param path
        * @param materialInfoAll
        * @throws KeyManagementException
        * @throws ClientProtocolException
        * @throws NoSuchAlgorithmException
        * @throws IOException
        */
       public void downloadImage(String path,MaterialInfo...materialInfoAll) throws KeyManagementException, ClientProtocolException, NoSuchAlgorithmException, IOException{
            
           if(!isLogin){
               if(login().getErrCode()!=RETURN_SUCCESS){
                   return ;
               }
           }
            HashMap<String, String> headers = new HashMap<String, String>();
            headers.put(CONTENT_TYPE_NAME, CONTENT_TYPE_VALUE);
            headers.put(HOST_NAME, HOST_VALUE);
            headers.put(USER_AGENT_NAME, USER_AGENT_VALUE);
            headers.put(COOKIE_NAME,cookie );
            
           for (MaterialInfo materialInfo : materialInfoAll) {
               String downloadAddress = "https://mp.weixin.qq.com/cgi-bin/getimgdata?token="+token+"&"+ URLEncoder.encode(("msgid={msgid}"),"utf-8")+"&mode=small&source=file&fileId="+materialInfo.getFile_id()+"&ow=-1";
               Result result  = SendRequest.sendGet(downloadAddress,headers, null, "utf-8",true);
               svaeFile(result.getHttpEntity().getContent(),path+"/"+materialInfo.getName());
           }
       }
        
       private void svaeFile(InputStream input,String savePath) throws IOException{
           int b = 0;
           FileOutputStream output = new FileOutputStream(new File(savePath));
           while((b=input.read())!=-1){
               output.write(b);
           }
           output.close();
           input.close();
       }
    }
  • 相关阅读:
    智能家居项目(3):编译工具makefile
    9、Cocos2dx 3.0游戏开发找小三之工厂方法模式与对象传值
    Redis于windows在安装
    Gray Code -- LeetCode
    hdu 1575 Tr A(矩阵高速电源输入)
    phpstorm快捷键
    Reverse Linked List II -- LeetCode
    程序猿的故事-注定奉献给节目
    poj2112 Optimal Milking --- 最大流量,二分法
    POJ 3356 AGTC(最长公共子)
  • 原文地址:https://www.cnblogs.com/Mwsoft/p/3981468.html
Copyright © 2011-2022 走看看