手机短信开发,首先要选择短信平台服务商,如选择了大汉三通作为短信服务商,选择好后,达成使用或二次开发相关协议后,可以注册一个短信帐号,做二次开发,短信平台服务商会提供一些开发接口源码或程序包,及其相关技术接口文档。下面介绍一下我的一些开发经验和技巧。

        我们先来了解一些基本常识,使用短信发送接口发送短信后,短信平台会响应一个序列号,这个序列号表明短信已经发送给短信平台了,但不等于短信已经发送成功,短信平台需要继续转发到目标手机上,最终发送成功与失败保存在短信平台的状态报告记录中,一般保留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)发送彩信标题大小限制没有太大;