使用移动代理服务器发送长短信
(使用软件包jtp.jar
软件的名称:MAS2.0
软件开发者:神州数码思特奇信息技术股份有限公司
)
问题描述:
按照demo写出发短信程序无问题,
短信内容超过70汉字,发送后服务器无发送成功响应。短信接收不到。
解决过程:
查阅资料,网上大多数在讲CMPP协议,加协议头,拆分。=没有效果。
经过对jar源码的反编译,发现此段代码:
public static String sendSMS(SUBMIT mt)
{
SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
int containCount = Integer.parseInt(config.getDefault_poolNum());
if(powerFlag.getConnFlag() == 1)
{
logger.error("connection was not prepared!");
return "2";
}
if(!judgeFluxSms.judge())
{
logger.error("the flux was over stander!");
return "3";
}
if("".equals(mt.getServiceID()) || "0".equals(mt.getServiceID()))
mt.setServiceID(config.getINTERSERVICEID());
String msgContent = mt.getMsgContent();
boolean acsiiFlag = isPureAscii(msgContent);
int msgLength1 = mt.getMsgContent().length();
int msgLength = 0;
try
{
msgLength = mt.getMsgContent().getBytes("gbk").length;
}
catch(UnsupportedEncodingException e1)
{
logger.error(e1);
}
mt.head.setSeqno(getSequence1());
String sendId = (new StringBuilder(String.valueOf(df.format(new Date())))).append((new Integer(mt.head.getSeqno())).toString()).toString();
mt.setSendId(sendId);
int normalSmsLen = Integer.parseInt(config.getNormalSmsLen());
String nullStr = " ";
if(msgLength1 > normalSmsLen && msgLength1 < 67)
{
mt.setMsgContent((new StringBuilder(String.valueOf(mt.getMsgContent()))).append(nullStr.substring(0, (67 - msgLength1) + 1)).toString());
msgContent = (new StringBuilder(String.valueOf(mt.getMsgContent()))).append(nullStr.substring(0, (67 - msgLength1) + 1)).toString();
msgLength1 = mt.getMsgContent().length();
try
{
msgLength = mt.getMsgContent().getBytes("gbk").length;
}
catch(UnsupportedEncodingException e1)
{
logger.error(e1);
}
}
if(msgLength1 <= normalSmsLen)
{
mt.head.commandid = 3;
mt.setMessageType(0);
mt.setMsgLength((byte)msgLength);
mt.setPkTotal((byte)1);
mt.setPkNumber((byte)1);
mt.setDestType((byte)0);
mt.setFeeTerminalType((byte)0);
mt.setFeeUserType((byte)0);
mt.setFeeTerminalID(mt.getDestID());
if(acsiiFlag)
mt.setMsgFmt((byte)0);
else
mt.setMsgFmt((byte)15);
if(smsPool.getSubmitSize() < containCount && smsPool.getSubmitSavePoolSize() < containCount)
{
smsPool.addSUBMIT(mt);
return mt.getSendId();
} else
{
logger.error("the SubmitPool was full.");
return "1";
}
}
int configLen = Integer.parseInt(config.getLongSms_Len());
if(msgLength1 < configLen)
{
int total = msgLength1 / 67;
if(msgLength1 % 67 != 0)
total++;
String msgStr[] = new String[total];
for(int i = 0; i < total; i++)
{
int contentLength = i != total - 1 ? 67 : msgLength1 - i * 67;
msgStr[i] = msgContent.substring(i * 67, i * 67 + contentLength);
}
lSmsFlag++;
if(lSmsFlag == 99)
lSmsFlag = 0;
for(int i = 0; i < total; i++)
{
SUBMIT smt = new SUBMIT();
smt.setFlag("1");
smt.setSrcID(mt.getSrcID());
smt.setDestID(mt.getDestID());
smt.setFeeType(mt.getFeeType());
smt.setFeeCode(mt.getFeeCode());
smt.setLinkID(mt.getLinkID());
if(acsiiFlag)
mt.setMsgFmt((byte)0);
else
smt.setMsgFmt((byte)8);
smt.setServiceID(mt.getServiceID());
smt.head.commandid = 3;
smt.setMessageType(0);
smt.setPkTotal((byte)total);
smt.setPkNumber((byte)(i + 1));
byte msgHead[] = new byte[6];
msgHead[0] = 5;
msgHead[1] = 0;
msgHead[2] = 3;
msgHead[3] = (byte)lSmsFlag;
msgHead[4] = (byte)total;
msgHead[5] = (byte)(i + 1);
smt.setLongmsgHead(msgHead);
smt.setMsgContent(msgStr[i]);
smt.setMsgLength((byte)(msgStr[i].length() * 2 + 6));
smt.setDestType((byte)0);
smt.setFeeTerminalType((byte)0);
smt.setFeeUserType((byte)0);
smt.setFeeTerminalID(mt.getDestID());
if(smsPool.getSubmitSize() > containCount || smsPool.getSubmitSavePoolSize() > containCount)
return "1";
smt.head.setSeqno(getSequence1());
smt.setSendId(mt.getSendId());
smsPool.addSUBMIT(smt);
}
} else
{
return "4";
}
return mt.getSendId();
}
说明在提供的封装程序中已经包含对是否是长短信的支持,只要在对应配置文件中加上或者更改
normalSmsLen的值即可
我参考源码给的值是70,
经过测试可以正常发送长短信。
分享到:
相关推荐
MAS_HTTPS短信接口文档1
云MAS提供webservice服务,接收客户端向云MAS平台发送请求,带上相应的请求参数,云MAS平台接收请求,并进行验证,验证通过后进行短信发送。
移动MAS短信开发手册,-DB-webservers
中国移动短信MAS系统开发接口API(JAVAapi)
利用mas短信机webservice接口, 发送短信和接收回执,附件包含代码和JAR包 利用mas短信机webservice接口, 发送短信和接收回执,附件包含代码和JAR包
中间附带移动云开发所需所有文档,自取使用吧 示例代码中间带了需要的jar包,【只限HTTP!】 绝对良心!绝对良心!绝对良心!绝对良心!绝对良心!绝对良心!
java编写发送短信有好几种方法,其中一种就是直接与mas机连接发送。这份源码也就是用这种方法实现
移动MAS短信开发Demo(ASP) 根据移动所给的接口开发短信发送平台
集中式MAS服务平台WebService-短信接口开发手册 (支持长短信返回标识)
移动MAS短信接口文档,总共有4个压缩包
MAS短信发送代码可以免费发短信,些代码只用于学习!
中国移动集团政企云MAS平台短信SDK接口文档.zip
Java+Demo对接中国移动 云MAS短信发送-Jar
接口是外部文件和MAS通信的接口,主要应用于企业系统与MAS经由数据库共享数据进行信息交互的情况。共享的数据库(表)可以是企业侧数据库(表),也可以是MAS侧数据库。本接口由MAS自动调用轮询共享的数据表,实现两方...
MAS2短信开发接口 DB版
中国移动集团政企云MAS平台短信SDK接口文档,中国移动集团政企云MAS平台短信SDK接口文档
移动代理服务器MAS短信API2.2开发手册及问题列表及DEMO,包括ASP,VB,JAVA,C/C++,PB,DELPHI,.NET等
中国移动集团政企云MAS平台短信SDK接口文档-V1.0.1-HTTP,接口、文档、DEMO
移动代理服务器MAS短信API2.2 1.包含多种方式的开发说明文档API:java、.net、c++、db,以及常见错误排错说明。 2.包含各语言开发示例代码
MAS短信服务接口 用winform写的服务接口,用于对接移动短信接口的客户端程序