跳至主要內容

🪛API详解

wind大约 5 分钟

前言

很多人提问过同一个问题,sms4j不支持同一个厂商多个模板使用吗?
错!请仔细阅读以下文档,其实在配置中的模板id和模板变量仅仅是为了大家在单模板的场景下使用更加方便而已
sendMessage方法存在多个重载,其中有自定义模板ID和模板变量的,在以下的文档中,我们列出了所有支持方法的签名
大家可以通过以下文档,快速的学习到sms4j的调用

🪚工厂获取

在2.2.0版本中,可以获取多租户实例
以下仅为示例

@RestController
public class Demo{
    /** 获取单租户模式实例*/
    private final SmsBlend huaweiSms = SmsFactory.createSmsBlend(SupplierType.HUAWEI);
    /** 获取多租户模式实例
     * 如果要获取一个多租户实例,则需要将配置信息传递到第二个参数中,这种情况下,框架将不再持有这个配置对象和所获取的实例对象
     * 需要用户自己去持有,单租户和多租户并不冲突,可以同时使用
     * */
    private final SmsBlend huaweiSms = SmsFactory.createSmsBlend(SupplierType.HUAWEI,huaweiConfig );
    
}

提示

在实际使用中并不建议提前在属性中声明,因为spring的注入可能会先注入项目中的内容再注入其他的,
有些厂商的SDK(比如阿里)内部的变量并不会随外部改变,所以可能会导致配置未获取到,如果出现这样的情况,请调用一次刷新方法即可
或在方法内部使用工厂获取短信实现对象

工厂枚举

public enum SupplierType {
    /** 阿里云*/
    ALIBABA("阿里云短信"),
    /** 华为云*/
    HUAWEI("华为云短信"),
    /** 云片*/
    YUNPIAN("云片短信"),
    /** 腾讯云*/
    TENCENT("腾讯云短信"),
    /** 合一短信*/
    UNI_SMS("合一短信"),
    /** 京东云短信 */
    JD_CLOUD("京东云短信"),
    /** 容联云短信 */
    CLOOPEN("容联云短信"),
    /** 亿美软通短信 */
    EMAY("亿美软通短信"),
    /** 天翼云 */
    CTYUN("天翼云短信"),
    /** 网易云短信 */
    NETEASE("网易云短信");
}

📨标准短信

发送固定消息模板短信

此方法将使用配置文件中预设的短信模板进行短信发送
该方法指定的模板变量只能存在一个(配置文件中)
如使用的是腾讯的短信,参数字符串中可以同时存在多个参数,使用 & 分隔例如:您的验证码为{1}在{2}分钟内有效,可以传为 message="1234"+"&"+"5"

SmsResponse sendMessage(String phone,String message);

使用自定义模板发送短信

使用自定义模板进行短信发送,templateId为模板ID,messages为短信内容,在messages中可以存在一个或多个变量,取决于模板
key为模板的变量名称,value为模板变量的值

SmsResponse sendMessage(String phone, String templateId, LinkedHashMap<String,String> messages);

群发短信,固定模板短信

此方法使用配置文件中预设的短信模板进行短信发送
该方法指定的模板变量只能存在一个(配置文件中)
phones 为要群发的手机号

SmsResponse massTexting(List<String> phones, String message);

注意

考虑到性能和大部分的厂商支持,不建议一次性发送超过1000个手机号
如果有大量短信需要进行群体发送,建议使用异步群发短信或分批次多次发送

使用自定义模板群发短信

与单体自定义模板短信类似,区别为此方法是群发短信,可以同时向多个手机号进行发送

SmsResponse massTexting(List<String> phones,String templateId, LinkedHashMap<String, String> messages);

🥾异步短信

异步发送固定模板短信

此方法使用配置文件中预设的短信模板进行短信发送
该方法指定的模板变量只能存在一个(配置文件中)

void sendMessageAsync(String phone, String message, CallBack callBack);

提示

callBack为发送结果回调,可以使用lambda表达式进行接收
如果不关注发送结果,该方法有一个不接收回调的重载方法
例如:

sms.sendMessageAsync("18888888888", "123456", e->log.info(e.toString()));

该回调方法中接收的参数为 SmsResponse

异步发送自定义模板短信

该方法与发送自定义模板短信的方法使用一致,区别在于末尾接收一个callBack回调参数用于接收短信的发送结果
如果不关注发送结果,可以使用重载方法

void sendMessageAsync(String phone, String templateId, LinkedHashMap<String,String> messages, CallBack callBack);

⏱延时短信

在项目中,有时会用到延时短信,在日常中通常会选择定时任务或中间件的方式进行,这也导致了简简单单的一个需求,却充斥着大量的代码支撑
为了方便日常使用,减少冗余的代码,我们在工具中添加了延迟短信的支持。

注意

在当前的版本中,考虑到延迟短信本身在异步的定时队列中等待执行,所以并没有设置回调等方式去接收短信的发送结果。
在后续的版本中我们将考虑用其他的方式去获取到短信的发送结果

使用固定模板发送延时短信

使用配置文件中定义的模板和变量发送延时短信,delayedTime为延迟时间,单位为毫秒

void delayedMessage(String phone ,String message,Long delayedTime);

使用自定义模板发送延时短信

该方法使用方式与标准方法中的自定义模板发送方式一致,末尾添加了一个delayedTime延迟时间参数,单位为毫秒

void delayedMessage(String phone ,String templateId, LinkedHashMap<String,String> messages,Long delayedTime);

群发固定模板延迟短信

void delayMassTexting(List<String> phones, String message,Long delayedTime);

群发自定义模板延迟短信

void delayMassTexting(List<String> phones,String templateId, LinkedHashMap<String, String> messages,Long delayedTime);