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