1、引用:access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效!
2、从公众平台获取账号的AppID和AppSecret;token获取并解析存储执行体;采用任务调度每隔两小时执行一次token获取执行体;
3、packagecom.cuiyongzhi.wechat.util;importjava.io.Buffered朐袁噙岿InputStream;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.io.OutputStreamWriter;importjava.net.MalformedURLException;importjava.net.URI;importjava.net.URL;importjava.net.URLConnection;importjava.util.ArrayList;importjava.util.List;importjava.util.Map;importjava.util.Set;importjava.util.zip.GZIPInputStream;importorg.apache.http.HttpResponse;importorg.apache.http.NameValuePair;importorg.apache.http.client.ClientProtocolException;importorg.apache.http.client.HttpClient;importorg.apache.http.client.entity.UrlEncodedFormEntity;importorg.apache.http.client.methods.HttpGet;importorg.apache.http.client.methods.HttpPost;importorg.apache.http.entity.StringEntity;importorg.apache.http.impl.client.DefaultHttpClient;importorg.apache.http.message.BasicNameValuePair;importorg.apache.http.protocol.HTTP;importorg.apache.http.util.EntityUtils;/***ClassName:HttpUtils**@Description:http请求工具类*@authordapengniao*@date2016年3月10日下午3:57:14*/@SuppressWarnings("deprecation")publicclassHttpUtils{/***@Description:httpget请求共用方法*@param@paramreqUrl*@param@paramparams*@param@return*@param@throwsException*@authordapengniao*@date2016年3月10日下午3:57:39*/@SuppressWarnings("resource")publicstaticStringsendGet(StringreqUrl,Map<String,String>params)throwsException{InputStreaminputStream=null;HttpGetrequest=newHttpGet();try{Stringurl=buildUrl(reqUrl,params);HttpClientclient=newDefaultHttpClient();request.setHeader("Accept-Encoding","gzip");request.setURI(newURI(url));HttpResponseresponse=client.execute(request);inputStream=response.getEntity().getContent();Stringresult=getJsonStringFromGZIP(inputStream);returnresult;}finally{if(inputStream!=null){inputStream.close();}request.releaseConnection();}}/***@Description:httppost请求共用方法*@param@paramreqUrl*@param@paramparams*@param@return*@param@throwsException*@authordapengniao*@date2016年3月10日下午3:57:53*/@SuppressWarnings("resource")publicstaticStringsendPost(StringreqUrl,Map<String,String>params)throwsException{try{Set<String>set=params.keySet();List<NameValuePair>list=newArrayList<NameValuePair>();for(Stringkey:set){list.add(newBasicNameValuePair(key,params.get(key)));}if(list.size()>0){try{HttpClientclient=newDefaultHttpClient();HttpPostrequest=newHttpPost(reqUrl);request.setHeader("Accept-Encoding","gzip");request.setEntity(newUrlEncodedFormEntity(list,HTTP.UTF_8));HttpResponseresponse=client.execute(request);InputStreaminputStream=response.getEntity().getContent();try{Stringresult=getJsonStringFromGZIP(inputStream);returnresult;}finally{inputStream.close();}}catch(Exceptionex){ex.printStackTrace();thrownewException("网络连接失败,请连接网络后再试");}}else{thrownewException("参数不全,请稍后重试");}}catch(Exceptionex){ex.printStackTrace();thrownewException("发送未知异常");}}/***@Description:httppost请求json数据*@param@paramurls*@param@paramparams*@param@return*@param@throwsClientProtocolException*@param@throwsIOException*@authordapengniao*@date2016年3月10日下午3:58:15*/publicstaticStringsendPostBuffer(Stringurls,Stringparams)throwsClientProtocolException,IOException{HttpPostrequest=newHttpPost(urls);StringEntityse=newStringEntity(params,HTTP.UTF_8);request.setEntity(se);//发送请求@SuppressWarnings("resource")HttpResponsehttpResponse=newDefaultHttpClient().execute(request);//得到应答的字符串,这也是一个JSON格式保存的数据StringretSrc=EntityUtils.toString(httpResponse.getEntity());request.releaseConnection();returnretSrc;}/***@Description:http请求发送xml内容*@param@paramurlStr*@param@paramxmlInfo*@param@return*@authordapengniao*@date2016年3月10日下午3:58:32*/publicstaticStringsendXmlPost(StringurlStr,StringxmlInfo){//xmlInfoxml具体字符串try{URLurl=newURL(urlStr);URLConnectioncon=url.openConnection();con.setDoOutput(true);con.setRequestProperty("Pragma:","no-cache");con.setRequestProperty("Cache-Control","no-cache");con.setRequestProperty("Content-Type","text/xml");OutputStreamWriterout=newOutputStreamWriter(con.getOutputStream());out.write(newString(xmlInfo.getBytes("utf-8")));out.flush();out.close();BufferedReaderbr=newBufferedReader(newInputStreamReader(con.getInputStream()));Stringlines="";for(Stringline=br.readLine();line!=null;line=br.readLine()){lines=lines+line;}returnlines;//返回请求结果}catch(MalformedURLExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}return"fail";}privatestaticStringgetJsonStringFromGZIP(InputStreamis){StringjsonString=null;try{BufferedInputStreambis=newBufferedInputStream(is);bis.mark(2);//取前两个字节byte[]header=newbyte[2];intresult=bis.read(header);//reset输入流到开始位置bis.reset();//判断是否是GZIP格式intheaderData=getShort(header);//Gzip流的前两个字节是0x1f8bif(result!=-1&&headerData==0x1f8b){//LogUtil.i("HttpTask","useGZIPInputStream");is=newGZIPInputStream(bis);}else{//LogUtil.d("HttpTask","notuseGZIPInputStream");is=bis;}InputStreamReaderreader=newInputStreamReader(is,"utf-8");char[]data=newchar[100];intreadSize;StringBuffersb=newStringBuffer();while((readSize=reader.read(data))>0){sb.append(data,0,readSize);}jsonString=sb.toString();bis.close();reader.close();}catch(Exceptione){e.printStackTrace();}returnjsonString;}privatestaticintgetShort(byte[]data){return(data[0]<<8)|data[1]&0xFF;}/***构建get方式的url**@paramreqUrl*基础的url地址*@paramparams*查询参数*@return构建好的url*/publicstaticStringbuildUrl(StringreqUrl,Map<String,String>params){StringBuilderquery=newStringBuilder();Set<String>set=params.keySet();for(Stringkey:set){query.append(String.format("%s=%s&",key,params.get(key)));}returnreqUrl+"?"+query.toString();}}
4、packagecom.cuiyongzhi.web.start;importjavax.servlet.ServletConfig;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;/***ClassName:InterfaceUrlIntiServlet*@Description:项目启动初始化servlet*@authordapengniao*@date2016年3月10日下午4:08:43*/publicclassInterfaceUrlIntiServletextendsHttpServlet{privatestaticfinallongserialVersionUID=1L;@Overridepublicvoidinit(ServletConfigconfig)throwsServletException{InterfaceUrlInti.init();}}
5、packagecom.cuiyongzhi.web.start;importjava.io.IOExceptio荏鱿胫协n;importjava.io.InputStream;importjava.util.Properties;importcom.cuiyongzhi.web.util.GlobalConstants;/***ClassName:InterfaceUrlInti*@Description:项目启动初始化方法*@authordapengniao*@date2016年3月10日下午4:08:21*/publicclassInterfaceUrlInti{publicsynchronizedstaticvoidinit(){ClassLoadercl=Thread.currentThread().getContextClassLoader();Propertiesprops=newProperties();if(GlobalConstants.interfaceUrlProperties==null){GlobalConstants.interfaceUrlProperties=newProperties();}InputStreamin=null;try{in=cl.getResourceAsStream("interface_url.properties");props.load(in);for(Objectkey:props.keySet()){GlobalConstants.interfaceUrlProperties.put(key,props.get(key));}props=newProperties();in=cl.getResourceAsStream("wechat.properties");props.load(in);for(Objectkey:props.keySet()){GlobalConstants.interfaceUrlProperties.put(key,props.get(key));}}catch(IOExceptione){e.printStackTrace();}finally{if(in!=null){try{in.close();}catch(IOExceptione){e.printStackTrace();}}}return;}}