手机短信开发,首先要选择短信平台服务商,如选择了大汉三通作为短信服务商,选择好后,达成使用或二次开发相关协议后,可以注册一个短信帐号,做二次开发,短信平台服务商会提供一些开发接口源码或程序包,及其相关技术接口文档。下面介绍一下我的一些开发经验和技巧。
我们先来了解一些基本常识,使用短信发送接口发送短信后,短信平台会响应一个序列号,这个序列号表明短信已经发送给短信平台了,但不等于短信已经发送成功,短信平台需要继续转发到目标手机上,最终发送成功与失败保存在短信平台的状态报告记录中,一般保留3天记录就会删除的,短信平台提供查询状态报告的接口,需要请求状态报告接口才能得到状态报告。一般短信收费都是按已发送给短信平台的次数来收费的,有时因访问量过大可能会出现没有发送成功的状况。短信平台还提供查询余额接口。下面给出具体实例
手机短信工具类
此工具类提供了发送短信、查询短信余额的功能。
public class SmsUtils {
private String sms_url = "http://procommsserver.300.cn:9090/ctc-oss/services/SmsOperator";//短信服务商提供url接口
/**
* 发送短信,调用短信提供商短信服务
*@author yandk
*/
public static String senderSms(String account,String password,String phones,String content) throws BizException{
String resultMsg="";
ISmsService4EmaProxy smsService4EmaProxy = new ISmsService4EmaProxy(sms_url);//短信服务商接口代理类
MtResponse[] responses = null;
MtMessage message = new MtMessage();
message.setContent(content);
message.setPhoneNumber(phones);
try {
responses=smsService4EmaProxy.sendSms(account,SmsUtils.MD5Encode(password),message);
} catch (RemoteException e) {
throw new BizException("手机发短信异常:"+e.getMessage());
}
if(responses==null){
throw new BizException("手机发短信错误,响应信息为空");
}
List<SmsResponse> smsResponseList = convertToSmsReport(responses);
resultMsg= smsResponseListToJson(smsResponseList);
return resultMsg;
}
/**
* 取得短信余额(剩余条数)
*/
public static int getSmsBalance(String account,String password) throws BizException{
int smsBalance=0;
ISmsService4EmaProxy smsService4EmaProxy = new ISmsService4EmaProxy(sms_url);//短信服务商短信接口代理类
Balance balance = null;
try {
balance = smsService4EmaProxy.getBalance(account, SmsUtils.MD5Encode(password));
} catch (RemoteException e) {
throw new BizException("取得短信剩余条数异常:"+e.getMessage());
}
smsBalance= balance.getSmsBalance();
return smsBalance;
}
}
手机短信并发的处理
并发情况下发送短信,一般想到用多线程方式发送短信,但是有个问题,我们一般使用一个短信账号(短信服务商提供)来发送短信,比如同时发送短信,或者定时短信在同一时刻触发,因为手机短信在同一时刻只能一次发送一条,这时可能会出问题。这种情况的解决方法,可以使用队列,每次发送短信都从队列中取出发送请求进行发送,即时同一时刻,队列也是有先后次序的,这样就能保证同一时刻发送短信的并发问题。java程序可以使用JMS。下面详细说一下具体作法。
短信选型对比分析
大汉三通
1.正确率:不能及时收到,有个别中文乱码现象;
2.反映速度:延迟收到时间较长,有时1-2小时才能收到;
3.短信内容关键词限制:有关键词如“账号”的限制;
4.短信内容中是否含有提供商签名:有,签名为‘信息通’;
5.短信内容是否允许重复发送:允许重复发送;
国都
1.正确率:100%,没有中文乱码现象;
2.反映速度:都在3秒以内;
3.短信内容关键词限制:没有对关键词如“账号”的限制;
4.短信内容中是否含有提供商签名:没有;
5.短信内容是否允许重复发送:不能发送与上次完全重复内容的短信,即同天内相同内容不能重复发;
创世漫道
1.正确率:100%,没有中文乱码现象;
2.反映速度:在6秒左右;
3.短信内容关键词限制:有关键词如“账号”的限制;
4.短信内容中是否含有提供商签名:没有;
5.短信内容是否允许重复发送:允许重复发送,“禁止相同的内容多个手机号连续一条一条提交. 否则禁用帐号,由此带来损失由客户自行负责”;
手机彩信接口
国都彩信接口调研
彩信最大支持100k,程序中对彩信分帧最大为20帧,每帧内容最多有3种类型:文本(.txt)、图片(.gif,.jpg)、声音(mid)。但有一点,彩信显示顺序为先显示图片,后显示文本,若改变顺序,必须在程序中分帧(及文本一帧、图片一帧)。目前淘宝、58同城都在使用。
彩信选型对比分析
创世漫道
1.账号问题:短信、彩信使用一个账号(软件序列号)
2.签名问题:彩信存在签名,如"来自【漫道科技】"
3.彩信容量限制:每条彩信大小的限制是50k
4.发送反应速度:比较慢,2分钟左右,有时会延迟很长(1小时多),不够稳定,彩信发送后,需要审核,”审核是人工的所以短信高峰期会慢一点“
5.中文乱码问题:彩信标题出现乱码还未解决;
6.支持内容格式问题:不支持vcard
7.其他问题:
1)发送彩信响应为成功码(如271208361778941233),但发送内容审核未通过,仍也不能正常收到彩信,如“标题如果解析为乱码”、”标题不能超过10个汉字“,不能正常接收。
2)收到彩信正文格式正常
国都
1.账号问题:短信、彩信使用不同的账号,即使是同一客户也需要分别购买账号;
2.签名问题:收到彩信中文字符显示正常,没有乱码,没有公司签名;
3.彩信容量限制:彩信最大支持100k,程序中对彩信分帧最大为20帧,每帧内容最多有3种类型:文本(.txt)、图片(.gif,.jpg)、声音(mid)。
4.发送反应速度:1分钟左右,比较稳定。
5.中文乱码问题:无乱码问题
6.支持内容格式问题:不支持vcard
7.其他问题:
1)彩信显示顺序为先显示图片,后显示文本,若改变顺序,必须在程序中分帧(及文本一帧、图片一帧);
2)收到彩信页面空白部分显示间隔太大,不便阅读;
3)发送彩信标题大小限制没有太大;