您的位置:首页 > 其它

短信机的封装

2018-03-13 00:00 10 查看
摘要: 不同短信机之间的参数可能不同,如何实现同一条短信在不同短信机之间切换后也能发送成功

背景

当前各个短信机对不同业务的发送速度,延迟时间和价格都各有不同.在某些项目中可能用到的短信机不止一个,如某些延迟低的短信适合发送短信验证码,但是相对价格会高些,对于某些实时性不高的短信(提现通知之类的)可以选择价格低的短信机.我现在的项目就有3个短信机.

有时候某个短信机崩溃了,我们得马上将使用这个短信机的接口切换到其他短信机进行过度.若不进行抽取封装,在切换的时候回比较麻烦,不方便.现在的目的则是抽取到可以只切换实现类就可切换短信机接口.

经过抽取封装我将他们分成了4类:

工厂类: 实现类的父类,里面会有一些常用的基本方法

实现类: 具体的短信机的实现类,当要新增短信机的时候,就新增实现类

工具类: 配置短信机信息和调用短信机的接口进行发送短信

枚举类: 配置不同短信机之间的模板的对应关系

AbstractSMSFactory

短信机工厂类,使用时new 一个它的实现类,即可使用实现类对应的短信机.当要使用其他短信机时,切换实现类即可.

Boolean send_msg(String phone,String type_flag,String params)

描述: 根据手机号和短信类型,发送短信

参数:

phone -- 手机号

type_flag -- 短信类型

params -- 短信参数

返回值:发送结果 true为成功 false为失败

Boolean send_msg(User user, String type_flag,String params)

描述: 根据手机号和短信类型,发送短信

参数:

user -- 用户(用户对象中必须有手机号)

type_flag -- 短信类型

params -- 短信参数

返回值:发送结果 true为成功 false为失败

实现类

阿里大于短信机

TB_SMS

此类继承于AbstractSMSFactory类

Boolean send_msg(String phone,String type_flag,String params)

见其父类

Boolean send_msg(User user, String type_flag,String params)

见其父类

getMsgByFlag(String flag)

描述:根据传入的短信类型调用枚举类获取对应的模板id

参数: flag -- 短信类型

返回值: 模板id(String类型)

SMS_TB_Utils

淘宝短信机信息配置和短信接口的调用

配置信息:

SMS_REQUEST_URL -- 短信接口的请求地址(有测试和正式之分)

APP_KEY -- 应用的key

APP_SECRET -- 应用的签名(密钥)

SMS_FREE_SIGN_NAME -- 短信签名

Appkey和app_secret查看的方法:前往阿里大于控制台 --> 进入应用管理的应用列表中 -- > 点击设置 --> 登录淘宝 --> 即可看到App证书,如下图





短信签名是自定义的,但必须前往配置管理中进行配置短信签名

sendMsg(String phone,String paramsString, String tempId)

描述:此方法是调用阿里大于短信机接口进行发送的方法

参数:

phone : 电话号码

paramsString : 参数字符串

tempId : 模板id

返回值: 短信发送的结果(Boolean类型) true -- 发送成功 false -- 发送失败

易回眸短信机

YM_SMS

此类继承于AbstractSMSFactory类

Boolean send_msg(String phone,String type_flag,String params)

见其父类

Boolean send_msg(User user, String type_flag,String params)

见其父类

getMsgByFlag(String flag)

描述:根据传入的短信类型调用枚举类获取对应的短信模板

参数: flag -- 短信类型

返回值: 短信模板(String类型)

YM_SMS_Utils

易回眸短信机信息配置和短信接口的调用

详细短信接口见: 北京易回眸科技有限公司短信通道接口文档

配置信息:

CPID: 企业id

md5: 接口签名

SMS_URL: 短信接口的请求地址

配置信息由接口方提供

send_msg(String phones,String msg)

描述:此方法是调用阿里大于短信机接口进行发送的方法

参数:

phones: 电话号码

msg: 短信内容

返回值: 短信发送的结果(String类型 -- json字符串)

中国网建短信机

WC_SMS

此类继承于AbstractSMSFactory类

Boolean send_msg(String phone,String type_flag,String params)

见其父类

Boolean send_msg(User user, String type_flag,String params)

见其父类

getMsgByFlag(String flag)

描述:根据传入的短信类型调用枚举类获取对应的短信模板

参数: flag -- 短信类型

返回值: 短信模板(String类型)

SMS_WC_Util

中国网建短信机信息配置和短信接口的调用

配置信息:

UID: 应用id

KEY: 应用签名

SMS_URL: 短信接口的请求地址

配置信息由接口方提供

sendSms(String mobile, String msg)

描述: 向指定的手机号发送短信(格式是gbk)

参数:

mobile -- 手机号

msg -- 验证码

返回值: 发送结果,字数字符串(String 类型)

sendSmsByCharset(String mobile, String msg,String charset)

描述: 向指定的手机号发送指定编码格式的短信

参数:

mobile -- 手机号

msg -- 短信内容

charset -- 编码格式gbk或者utf8 ,defualt是gbk

返回值:

短信发送后返回值
说 明
-1
没有该用户账户
-2
接口密钥不正确
不是账户登陆密码
-21
MD5接口密钥加密不正确
-3
短信数量不足
-11
该用户被禁用
-14
短信内容出现非法字符
-4
手机号格式不正确
-41
手机号码为空
-42
短信内容为空
-51
短信签名格式不正确
接口签名格式为:【签名内容】
-6
IP限制
大于0
短信发送数量

枚举类

SmsEnum

短信模板相关枚举类

String tb_tempId; //淘宝的短信模板id

String msg_temp; //普通短信的模板

getTb_tempId()

-- 获取淘宝模板id

getMsg_temp()

-- 获取短信模板

当需要增加短信模板相关信息,加个属性,每个枚举对象加个属性

附录:

Java代码具体见项目



觉得本文好的可以点个赞,觉得不好的可以提提建议或意见,一起进步,一起成长!!!

欢迎邮件来信讨论 490514142@qq.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  短信机 封装