短信服务
章节简介
本章节介绍如何在系统中发送短信,并详细介绍了SmsFacade接口的作用,以及其他短信平台接入的方式
统一SMS接口
项目在不同环境,不同时期使用的短信服务商是不一样的,比如开发环境用的是阿里云短信服务,测试环境和生产环境用的是腾讯云。项目后期客户又提供了自己的短信服务,这时又需要替换
如果让代码根据环境不同,或者按照需求动态切换短信服务商,则工作量非常大,且代码非常冗余,作为开发者,我们希望只需要调用一个方法即可发送短信。
此时框架提供了统一的SmsFacade门面类,让开发者无需关心底层实现,只需要调用SmsFacade即可发送短信
以下为SmsFacade门面类
- SmsFacadeResult是发送结果
- SmsFacadeMsg是短信内容
- 两个方法分别为单发和批量发送短信
- 如需项目需要实现自己的短信服务,则需要
implementSmsFacade接口,并实现发送短信的方法。
package com.fykj.scaffold.sms;
/**
* 短信门面接口
*/
public interface SmsFacade {
/**
* 给单一手机号发送短信
*/
SmsFacadeResult sendSms(String phoneNumber, SmsFacadeMsg message);
/**
* 批量发送短信
*/
List<SmsFacadeResult> sendSms(List<String> phoneNumber, SmsFacadeMsg message);
}
MockDev实现
由于开发时一般还没有接入真实的短信服务商,因此提供了一个Mock的实现类,模拟短信发送
发送后,短信内容会以红色字体显示在控制台中
移动云短信实现
公司申请了移动云的短信接口,且框架通过RanXinSmsImpl类集成,此方法会真实发送短信,会涉及到费用问题,请与项目经理沟通后使用
发送短信
- 确认短信配置 确认需要的实现类,确认签名
#短信配置,目前支持RanXinSms和MockDevSms两种方式。想要其他实现,自己写一个实现类即可
sms:
impl: MockDevSms
sign: 风云科技
- 创建模板
- 新建SmsTemplate类,继承SmsTemplate。
- 实现
setTemplateId和setTemplateContent方法。前者是模板ID,后者是模板内容。注意模板ID需要全局唯一
提示
部分短信平台需要的参数是模板ID,及参数。这时templateId应该与短信平台保持一致
- 可在此类内部新建
SmsItem内部类,用于定义短信发送参数 - 可以参考框架中已有的
LoginSmsTemplate类
- 调用SmsFacade发送短信
@Autowired
private SmsFacade smsFacade;
//BillPushCallSuccessSmsTemplate 自定义的模版
SmsFacadeMsg params =
SmsFacadeMsg
.createMsg(new BillPushCallSuccessSmsTemplate())
// 添加参数
.addItem(BillPushCallSuccessSmsTemplate.SmsItem.AMOUNT, amount.setScale(2, RoundingMode.HALF_UP)
.toString());
// 发送短信
smsFacade.sendSms(linkUser.getPhoneNumber(), params);
