3、 下行短信发送WebService
开发一个WebService,供第三方系统调用,用于发送短信。WebService接收数据后,将信息存储入数据库的短信发送数据表中。
WebService参数包括:应用标识、手机号码(字符串数组类型)、短信内容、扩展码(3-8位数字)、优先级(数字1至5)、定时发送时间(可null为即时发送)、发送人ID(内部机构人员管理系统的ID)、发送人全路径。
同时开发另一个WebService,与原有旧系统接口完全相同,用于调用旧短信平台的第三方系统无缝切换到新短信平台。
Webservice实现如下:
////// 发送短信服务 /// 成功:返回MsgGroup,格式为"success:" + MsgGroup /// 异常:返回异常信息 /// /// 应用标识 /// 手机号 /// 短信内容 /// 扩展码 /// 优先级 /// 是否允许回复 /// 定时时间 /// 发送人 /// 发送人全路径 ///[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客户端数据交互流程如下,供参考。