3、 下行短信发送WebService
开发一个WebService,供第三方系统调用,用于发送短信。WebService接收数据后,将信息存储入数据库的短信发送数据表中。
WebService参数包括:应用标识、手机号码(字符串数组类型)、短信内容、扩展码(3-8位数字)、优先级(数字1至5)、定时发送时间(可null为即时发送)、发送人ID(内部机构人员管理系统的ID)、发送人全路径。
同时开发另一个WebService,与原有旧系统接口完全相同,用于调用旧短信平台的第三方系统无缝切换到新短信平台。
Webservice实现如下:
/// <summary> /// 发送短信服务 /// 成功:返回MsgGroup,格式为"success:" + MsgGroup /// 异常:返回异常信息 /// </summary> /// <param name="appCode">应用标识</param> /// <param name="mobiles">手机号</param> /// <param name="smsContent">短信内容</param> /// <param name="addSerial">扩展码</param> /// <param name="smsPriority">优先级</param> /// <param name="isMo">是否允许回复</param> /// <param name="scheduleTime">定时时间</param> /// <param name="sendUserId">发送人</param> /// <param name="sendUserFullPath">发送人全路径</param> /// <returns></returns> [WebMethod] public string SendSMSWithSuccess(string appCode, string[] mobiles, string smsContent, string addSerial, int smsPriority = 1, bool isMo = true, DateTime? scheduleTime = null, string sendUserId = "", string sendUserFullPath = "") { //执行校验和入库 string result = … return result; }
其中MsgGroup为移动要求提供的32位的唯一编码,后续返回的提交报告、状态报告都以此为对应依据。
WebService内部逻辑首先是校验,包括应用是否注册、号码数量、号码组是否包括重复号码、号码是否具有非法字符、扩展码长度等内容。然后将校验过的数据存入数据库。
下行短信数据表:
SMS_MT_DATA_INFO 短信信息表 |
|||||
字段代码 |
字段名称 |
字段类型 |
可空 |
标识 |
主键 |
MSG_GROUP |
批次号 |
varchar(32) |
N |
N |
Y |
APP_CODE |
应用标识 |
varchar(64) |
N |
N |
N |
MOBILES |
手机号码组 |
varchar(max) |
N |
N |
N |
SMS_CONTENT |
短信内容 |
varchar(max) |
N |
N |
N |
ADD_SERIAL |
扩展码 |
varchar(32) |
Y |
N |
N |
SMS_PRIORITY |
优先级 |
int |
N |
N |
N |
IS_MO |
是否需要上行 |
bit |
N |
N |
N |
SCHEDULE_TIME |
定时时间 |
datetime |
Y |
N |
N |
SEND_USER_ID |
发信人 |
varchar(36) |
Y |
N |
N |
SEND_USER_FULL_PATH |
发信人全路径 |
varchar(512) |
Y |
N |
N |
CREATE_TIME |
创建时间 |
datetime |
N |
N |
N |
SMS_MT_DATA_HIS_INFO 短信信息历史表 |
|||||
字段代码 |
字段名称 |
字段类型 |
可空 |
标识 |
主键 |
MSG_GROUP |
批次号 |
varchar(32) |
N |
N |
Y |
APP_CODE |
应用标识 |
varchar(64) |
N |
N |
N |
MOBILES |
手机号码组 |
varchar(max) |
N |
N |
N |
SMS_CONTENT |
短信内容 |
varchar(max) |
N |
N |
N |
ADD_SERIAL |
扩展码 |
varchar(32) |
N |
N |
N |
SMS_PRIORITY |
优先级 |
int |
N |
N |
N |
IS_MO |
是否需要上行 |
bit |
N |
N |
N |
SCHEDULE_TIME |
定时时间 |
datetime |
Y |
N |
N |
SEND_USER_ID |
发信人 |
varchar(36) |
Y |
N |
N |
SEND_USER_FULL_PATH |
发信人全路径 |
varchar(512) |
Y |
N |
N |
CREATE_TIME |
创建时间 |
datetime |
N |
N |
N |
SEND_RESULT |
返回状态 |
int |
N |
N |
N |
SEND_TIME |
发送时间 |
datetime |
N |
N |
N |
HAS_MO |
是否有回复 |
bit |
N |
N |
N |
4、 下行短信发送服务
一个WindowsService,定时访问数据库,若有数据则调用云MAS组件发送短信,然后将发送过的短信移入短信发送历史数据表。
由于云MAS平台需要登录后使用,登录只能进行一次,因此需要对SDK进行单例模式的封装。
移动云MAS平台内部有一定的处理逻辑,具体的我也不知道,猜测如下:首先接收数据后移动对短信信息进行审核,然后将审核过的短信提交到内部的发送系统,此过程会产生提交报告;内部判定如果是移动的手机号,则由自己的系统发送短信,此处会有白名单限制,白名单之外的短信无法发送,如果是联通或电信手机号,则调用相应的接口交由相应系统发送短信,此时移动自己的白名单无效,此过程会产生状态报告。
HTTP版本中云MAS平台和Http客户端数据交互流程如下,供参考。