RuoYi-Vue-Plus 已完成与 sms4j
项目的整合,详细文档请参考 sms4j 官方文档。以下是配置步骤,具体的厂商配置可以参考 sms4j
文档。
sms:
# 配置源的类型,标识配置来源(例如:interface、yaml)
config-type: yaml
# 标记是否启用短信发送限制,接口配置不受该限制
restricted: true
# 单个手机号每分钟允许发送短信的最大次数,仅在开启拦截时生效
minute-max: 1
# 单个手机号每天允许发送短信的最大数量,仅在开启拦截时生效
account-max: 30
# 以下配置项来自于 com.ruoyi.sms4j.provider.config.BaseConfig 类
blends:
# 唯一配置ID,用于区分不同的短信服务账号,名称可以自定义
config1:
# 厂商标识,用于标识当前配置属于哪个短信服务商
supplier: alibaba
# 各大厂商的 accessKey 或 apiKey
access-key-id: 您的AccessKey
# 对应的密钥或 apiSecret
access-key-secret: 您的AccessKeySecret
# 短信签名
signature: 您的短信签名
sdk-app-id: 您的sdkAppId
config2:
# 另一个短信服务商的标识(如腾讯云)
supplier: tencent
access-key-id: 您的AccessKey
access-key-secret: 您的AccessKeySecret
signature: 您的短信签名
sdk-app-id: 您的sdkAppId
可参考 sms4j
文档中的各种使用方式。以下是 demo
模块的示例代码:
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/demo/sms")
public class SmsController {
/**
* 使用阿里云发送短信
*
* @param phones 接收短信的手机号
* @param templateId 短信模板ID
*/
@GetMapping("/sendAliyun")
public R<Object> sendAliyun(String phones, String templateId) {
LinkedHashMap<String, String> params = new LinkedHashMap<>();
params.put("code", "1234");
SmsBlend smsBlend = SmsFactory.getSmsBlend("config1");
SmsResponse response = smsBlend.sendMessage(phones, templateId, params);
return R.ok(response);
}
}
该版本支持通过 SPI 动态加载短信模块,支持 阿里云
、腾讯云
等多个厂商。要使用哪家短信服务,只需引入相应的依赖即可。以下是 ruoyi-demo
模块的 pom.xml
依赖示例:
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-sms</artifactId>
</dependency>
<!-- 使用阿里云短信服务 -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>dysmsapi20170525</artifactId>
</dependency>
sms:
enabled: true
# 短信功能开关
# 对应的厂商接口地址:阿里云(dysmsapi.aliyuncs.com),腾讯云(sms.tencentcloudapi.com)
endpoint: "sms.tencentcloudapi.com"
# API接口域名
accessKeyId: "yourAccessKeyId"
accessKeySecret: "yourAccessKeySecret"
# 短信服务的密钥
signName: "yourSignName"
# 短信签名
sdkAppId: "yourSdkAppId"
# 应用ID(腾讯云专用)
enabled
:控制短信功能是否开启。endpoint
:指定短信服务的接口域名,不同的厂商有不同的固定域名。accessKeyId
和 accessKeySecret
:用于 API 认证的密钥信息。signName
:短信签名,通常由服务商提供。sdkAppId
:应用ID,腾讯云专用。参考 demo
模块中的 SmsController
示例代码,通过 模板模式
动态加载不同厂商的短信模板进行操作:
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/demo/sms")
public class SmsController {
/**
* 使用阿里云发送短信
*
* @param phones 接收短信的手机号
* @param templateId 短信模板ID
*/
@GetMapping("/sendAliyun")
public R<Object> sendAliyun(String phones, String templateId) {
LinkedHashMap<String, String> params = new LinkedHashMap<>();
params.put("code", "1234");
SmsBlend smsBlend = SmsFactory.getSmsBlend("config1");
SmsResponse response = smsBlend.sendMessage(phones, templateId, params);
return R.ok(response);
}
/**
* 使用腾讯云发送短信
*
* @param phones 接收短信的手机号
* @param templateId 短信模板ID
*/
@GetMapping("/sendTencent")
public R<Object> sendTencent(String phones, String templateId) {
LinkedHashMap<String, String> params = new LinkedHashMap<>();
params.put("1", "1234");
SmsBlend smsBlend = SmsFactory.getSmsBlend("config2");
SmsResponse response = smsBlend.sendMessage(phones, templateId, params);
return R.ok(response);
}
}
powered by kaifamiao