开发喵星球

RuoYi-Vue-Plus 短信模块配置指南(328)

1. 版本要求: v5.1.0及以上

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);
    }
}

2. 版本要求: v4.2.0 短信模块介绍

该版本支持通过 SPI 动态加载短信模块,支持 阿里云腾讯云 等多个厂商。要使用哪家短信服务,只需引入相应的依赖即可。以下是 ruoyi-demo 模块的 pom.xml 依赖示例:

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(腾讯云专用)

重点配置说明

功能使用

参考 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);
    }
}
   
分类:Java/OOP 作者:无限繁荣, 吴蓉 发表于:2024-09-12 00:32:33 阅读量:160
<<   >>


powered by kaifamiao