代码:java 目的:记录、梳理短信接入 分为:下行短信、上行短信、状态报告
下行:
//1 Http请求参数:
Map<String, Object> params = new HashMap<String, Object>();
params.put("userId", smsIssuer.getAccount());
params.put("password", smsIssuer.getPwd());
params.put("pszMobis", mobileNos);
if (object != null && object.containsKey("urlencode") && object.getBoolean("urlencode")) {
params.put("pszMsg", URLEncoder.encode(smsInfo.getContent()));
} else {
params.put("pszMsg", (smsInfo.getContent()));
}
params.put("iMobiCount", mobiles.length);
params.put("pszSubPort", "*");
//2 将以上参数根据梦网接入的接口,发起Http POST请求至梦网URL
上行: //1 参数处理:自接收到梦网上行推送之后
//需对帐号密码做校验
String userName = request.get("userid");
String passWord = request.get("pwd");
String cmd = request.get("cmd");
String seqid = request.get("seqid");
String mos = request.get("mos");
String[] mosArray = mos.split(",");
List<SmsInfo> smsInfos = new ArrayList<SmsInfo>(mosArray.length);
smsMerchantReceiveSmsResponse.setSmsInfos(smsInfos);
if (mosArray != null && mosArray.length > 0) {
for (String moss : mosArray) {
try {
String[] arr = moss.split("\\|");
String moTime = arr[0];// 上行时间
String moSeq = arr[1]; // 上行流水号
String mobileNo = arr[2];// 手机号
String upNo = arr[3];// 通道号
String extNo = arr[4];// 扩展号
String codeType = arr[5];// 上行信息编码
String content = arr[6];// 上行信息内容
if ("15".equals(codeType)) { // 15:GBK编码 8:UNICODE编码
content = new String(Base64.decodeBase64(content), "GBK");
} else if ("8".equals(codeType)) {
content = decodeUnicode(content);
}
SmsInfo smsInfo = new SmsInfo();
smsInfo.setContent(content);
smsInfo.setMobileNo(mobileNo);
smsInfo.setReportDate(DateUtils.parseDate(moTime, "yyyy-MM-dd HH:mm:ss"));
smsInfo.setExtend("mos=" + moSeq + ",upn=" + upNo + ",exn=" + extNo + ",cot=" + codeType);
smsInfos.add(smsInfo);
} catch (Exception e) {
logger.error("", e);
} finally {
logger.debug("receive-sms:" + moss);
}
}
}
//生成梦网响应串
Map<String, String> params = new LinkedHashMap<String, String>();
params.put("cmd", "MO_RESP");
params.put("seqid", seqid);
params.put("ret", "0");
String responseData = generateMengwReturnString(params);
状态报告接收: //1 参数处理:自接收到梦网状态报告推送之后
//需对帐号密码做校验
String userName = request.get("userid");
String passWord = request.get("pwd");
String cmd = request.get("cmd");
String seqid = request.get("seqid");
String rpts = request.get("rpts");
String[] rptsArray = rpts.split(",");
List<SmsInfo> smsInfos = new ArrayList<SmsInfo>(rptsArray.length);
smsMerchantSendReportResponse.setSmsInfos(smsInfos);
if (rptsArray != null && rptsArray.length > 0) {
for (String moss : rptsArray) {
try {
String[] arr = moss.split("\\|");
String moTime = arr[0];// 状态报告时间
String moSeq = arr[1];// 短信平台流水号
String moSmsSeq = arr[2];// 自编流水号
String mobileNo = arr[3];// 手机号
String upNo = arr[4];// 通道号
String extNo = arr[5];// 扩展号
String state = arr[6];// 接收状态 0:成功 2:发送失败
String errormsg = arr[7];// 7个字节错误码。DELIVRD为成功,其他为失败。
SmsInfo smsInfo = new SmsInfo();
// smsInfo.setMobileNo(mobileNo);
smsInfo.setReportDate(DateUtils.parseDate(moTime, "yyyy-MM-dd HH:mm:ss"));
smsInfo.setExtend("m=" + mobileNo + ",wns=" + moSmsSeq + ",upn=" + upNo + ",exn=" + extNo + ",em=" + errormsg + ",st=" + state);
smsInfo.setMsgId(moSeq);
smsInfo.setReportState("0".equals(state) ? errormsg : (state + "-" + errormsg));
smsInfos.add(smsInfo);
} catch (Exception e) {
logger.error("", e);
} finally {
logger.debug("report-state:" + moss);
}
}
}
//生成梦网响应串
Map<String, String> params = new LinkedHashMap<String, String>();
params.put("cmd", "RPT_RESP");
params.put("seqid", seqid);
params.put("ret", "0");
String responseData = generateMengwReturnString(params);
以上公共类定义:
//SmsInfo 短信记录
/* */ private long id;
/* */ private long appId;
/* */ private String appIp;
/* */ private String appType;
/* */ private String clientIp;
/* */ private long issuerId;
/* */ private String type;
/* */ private String mobileNo;
/* */ private String content;
/* */ private String handleState;
/* */ private String msgId;
/* */ private int chargeCount;
/* */ private String reportState;
/* */ private Date reportDate;
/* */ private int reportCheckSt;
/* */ private Date create;
/* */ private String extend;
/* */ private boolean longMsg;
/* */ private int totalCount;
/* */ private int currentCount;
/* */ private String remoteIp;
/* */ private long actIssuerId;
//SmsIssuer 短信运营商
/* */ private long id;
/* */ private String name;
/* */ private String account;
/* */ private String pwd;
/* */ private String seed;
/* */ private String signature;
/* */ private String smsSuffix;
/* */ private int priority;
/* */ private int probability;
/* */ private int support;
/* */ private String netType;
/* */ private String limitIp;
/* */ private String reportType;
/* */ private String balanceUrl;
/* */ private String balanceInfo;
/* */ private String reportUrl;
/* */ private String reportInfo;
/* */ private String upUrl;
/* */ private String upInfo;
/* */ private String downUrl;
/* */ private String downInfo;
/* */ private String state;
/* */ private Date create;
/* */ private Date update;
/* */ private String extend;