package com.hehenian.biz.facade.notify.montnets.mwgate.httppost; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.apache.http.HttpEntity; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.protocol.HTTP; import org.apache.http.util.EntityUtils; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import com.hehenian.biz.facade.notify.montnets.mwgate.common.StaticValue; /** * 后台获取连接处理请求的类 * @author Administrator * */ public class SmsUtil { private String host = "http://"+StaticValue.ip+":"+StaticValue.port; private String url = "/MWGate/wmgw.asmx/"; /** * 获取上行/状态报告等 * 返回值:   null 无信息 接收信息内容列表(最高维数为500)格式说明: 信息类型(上行标志0),日期,时间,上行源号码,上行目标通道号,*,*,上行信息内容 或 信息类型(状态报告标志1),日期,时间,信息编号,通道号,手机号,MongateSendSubmit时填写的MsgId,*,状态值,详细错误原因 例如: 1,2008-01-23 15:43:34,15986756631,10657302056780408,*,*,上行信息内容1 2,2008-01-23 15:43:34,0518153837115735,10657302056780408,13265661403,456123457895210124, *,0,DELIVRD 注:格式中的*号是备用字段 第一标志位的0表示上行和状态报告,1表示上行,2表示状态报告 */ public String[] MongateGetDeliverForPost(Params params, boolean bKeepAlive, Object connection){ String[] Result = null; List<String> Lists = new ArrayList<String>(); try { String Message =null; if(!bKeepAlive){ Message = executePost(params, host+url+"MongateGetDeliver"); }else{ Message = executePost(params, host+url+"MongateGetDeliver",(HttpClient)connection); } if(Message != null && Message !="" && Message.contains("<string>")) { Document doc=DocumentHelper.parseText(Message); Element el = doc.getRootElement(); Iterator it = el.elementIterator(); while(it.hasNext()) { Element elm = (Element) it.next(); Lists.add(elm.getText()); } if(Lists != null && Lists.size() >0) { Result = new String[Lists.size()]; for(int i=0;i<Lists.size();i++) { Result[i]= Lists.get(i); } } } else { return null; } } catch (Exception e) { e.printStackTrace(); } return Result; } /** * 查询余额接口 * 返回值:正数或0:帐户可发送条数 -1:登陆失败 其他错误见附录 */ public Integer MongateQueryBalanceForPost(Params params, boolean bKeepAlive, Object connection) { Integer result =null; try { String Message=null; if(!bKeepAlive){ Message = executePost(params, host+url+"MongateQueryBalance"); }else{ Message = executePost(params, host+url+"MongateQueryBalance",(HttpClient)connection); } if(Message != null && Message != "") { Document doc=DocumentHelper.parseText(Message); Element el = doc.getRootElement(); result = Integer.parseInt(el.getText()); } } catch (Exception e) { e.printStackTrace(); } return result; } /** * 短信息发送接口 * 返回值:错误描述对应说明 发送成功:信息编号,如:-8485643440204283743或1485643440204283743 错误返回:-1 参数为空。信息、电话号码等有空指针,登陆失败 -2 电话号码个数超过100 -10 申请缓存空间失败 -11 电话号码中有非数字字符 -12 有异常电话号码 -13 电话号码个数与实际个数不相等 -14 实际号码个数超过100 -101 发送消息等待超时 -102 发送或接收消息失败 -103 接收消息超时 -200 其他错误 -999 web服务器内部错误 */ public String MongateSendSubmitForPost(Params params, boolean bKeepAlive, Object connection) { String result =null; try { String Message=null; if(!bKeepAlive){ Message = executePost(params, host+url+"MongateSendSubmit"); }else{ Message = executePost(params, host+url+"MongateSendSubmit",(HttpClient)connection); } if(Message != null && Message != "") { Document doc=DocumentHelper.parseText(Message); Element el = doc.getRootElement(); result = el.getText(); } } catch (Exception e) { e.printStackTrace(); } return result; } /** * 短信息发送接口(不同内容群发,可自定义不同流水号,自定义不同扩展号) * 注意:由于单个短信结构体中各元素间,以及短信包中各个短信结构体间采用的分隔符分隔,所以要求短信结构体中各元素的值中不能包含分隔符(,和/),否则将导致解析错误。 短信包中最大包含200个短信结构体,超过200个时200个以后的将丢失。 返回值: 错误描述对应说明 发送成功:信息编号,如:-8485643440204283743或1485643440204283743 错误返回: -1 参数为空。信息、电话号码等有空指针,登陆失败 -11 电话号码中有非数字字符 -12 有异常电话号码 -101 发送消息等待超时 -102 发送或接收消息失败 -103 接收消息超时 -200 其他错误 -999 web服务器内部错误 */ public String MongateMULTIXSendForPost(Params params, boolean bKeepAlive, Object connection) { String result =null; try { String Message=null; if(!bKeepAlive){ Message = executePost(params, host+url+"MongateMULTIXSend"); }else { Message = executePost(params, host+url+"MongateMULTIXSend",(HttpClient)connection); } if(Message != null && Message != "") { Document doc=DocumentHelper.parseText(Message); Element el = doc.getRootElement(); result = el.getText(); } } catch (Exception e) { e.printStackTrace(); } return result; } /** * 使用post请求 * @param obj * @param httpUrl * @return * @throws Exception */ private String executePost(Object obj, String httpUrl) throws Exception { String result = ""; Class cls = obj.getClass(); Field[] fields = cls.getDeclaredFields(); List<BasicNameValuePair> params = new ArrayList<BasicNameValuePair>(); String fieldName = null; String fieldNameUpper = null; Method getMethod = null; String value = null; for (int i = 0; i < fields.length; i++) { fieldName = fields[i].getName(); fieldNameUpper = Character.toUpperCase(fieldName.charAt(0)) + fieldName.substring(1); getMethod = cls.getMethod("get" + fieldNameUpper); value = (String) getMethod.invoke(obj); if(value != null) { params.add(new BasicNameValuePair(fieldName, value)); } } HttpPost httppost = new HttpPost(httpUrl); // 设置参数的编码UTF-8 httppost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); HttpClient httpclient = new DefaultHttpClient(); HttpEntity entity = httpclient.execute(httppost).getEntity(); if(entity != null && entity.getContentLength() != -1) { result=EntityUtils.toString(entity); } httpclient.getConnectionManager().shutdown(); return result; } /** * 使用post请求 * @param obj * @param httpUrl * @return * @throws Exception */ private String executePost(Object obj, String httpUrl,HttpClient httpclient) throws Exception { String result = ""; Class cls = obj.getClass(); Field[] fields = cls.getDeclaredFields(); List<BasicNameValuePair> params = new ArrayList<BasicNameValuePair>(); String fieldName = null; String fieldNameUpper = null; Method getMethod = null; String value = null; for (int i = 0; i < fields.length; i++) { fieldName = fields[i].getName(); fieldNameUpper = Character.toUpperCase(fieldName.charAt(0)) + fieldName.substring(1); getMethod = cls.getMethod("get" + fieldNameUpper); value = (String) getMethod.invoke(obj); if(value != null) { params.add(new BasicNameValuePair(fieldName, value)); } } HttpPost httppost = new HttpPost(httpUrl); //设置为长连接,服务端判断有此参数就不关闭连接。 httppost.setHeader("Connection", "Keep-Alive"); // 设置参数的编码UTF-8 httppost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); //连接从方法中传入 //HttpClient httpclient = new DefaultHttpClient(); HttpEntity entity = httpclient.execute(httppost).getEntity(); if(entity != null && entity.getContentLength() != -1) { result=EntityUtils.toString(entity); } //长连接不需要关闭连接 //httpclient.getConnectionManager().shutdown(); return result; } }