SpringBoot实现阿里云短信发送的示例代码

  

下面是详细讲解“SpringBoot实现阿里云短信发送的示例代码”的完整攻略,包含示例说明:

1. 注册阿里云短信服务

  • 首先需要在阿里云官网上注册一个账号,进入控制台后选择开通短信服务。
  • 开通短信服务后,获取AccessKey ID和AccessKey Secret。

2. 添加阿里云短信依赖

在SpringBoot项目中,使用Maven或Gradle添加阿里云短信依赖。以Maven为例,添加如下依赖:

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-sms</artifactId>
    <version>1.0.0</version>
</dependency>

3. 配置阿里云短信服务信息

在application.yml或application.properties文件中配置阿里云短信的AccessKey ID和AccessKey Secret等信息。

aliyun:
  access-key-id: 你的AccessKey ID
  access-key-secret: 你的AccessKey Secret
  sms:
    sign-name: 你的短信签名
    template-code: 你的短信模板代码

4. 编写阿里云短信发送服务类

在SpringBoot项目中,创建一个短信发送服务类,用于调用阿里云短信API发送短信。示例代码如下:

@Service
public class SmsService {

    @Value("${aliyun.sms.sign-name}") // 从配置文件中获取短信签名
    private String signName;

    @Value("${aliyun.sms.template-code}") // 从配置文件中获取短信模板代码
    private String templateCode;

    /**
     * 发送短信
     *
     * @param phoneNumbers 手机号码,多个号码用逗号隔开
     * @param params       短信参数,格式为{"key1":"value1","key2":"value2"}
     * @return 发送是否成功
     */
    public boolean sendSms(String phoneNumbers, Map<String, String> params) {
        try {
            // 实例化阿里云短信服务的API请求对象
            DefaultProfile profile = DefaultProfile.getProfile("default", accessKeyId, accessKeySecret);
            IAcsClient client = new DefaultAcsClient(profile);
            CommonRequest request = new CommonRequest();
            request.setMethod(MethodType.POST);
            request.setDomain("dysmsapi.aliyuncs.com");
            request.setVersion("2017-05-25");
            request.setAction("SendSms");
            request.putQueryParameter("PhoneNumbers", phoneNumbers);
            request.putQueryParameter("SignName", signName);
            request.putQueryParameter("TemplateCode", templateCode);
            request.putQueryParameter("TemplateParam", JSON.toJSONString(params));

            // 发送短信
            CommonResponse response = client.getCommonResponse(request);
            return response.getHttpResponse().isSuccess() && response.getData().contains("\"Code\":\"OK\"");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }
}

在sendSms方法中,调用阿里云短信API发送短信。其中,phoneNumbers参数表示要发送短信的手机号码,params参数表示短信模板中的参数,格式为JSON字符串。

5. 使用短信发送服务类发送短信

在需要发送短信的地方,注入短信发送服务类,调用sendSms方法发送短信。示例代码如下:

@RestController
public class SmsController {

    @Autowired
    private SmsService smsService;

    @PostMapping("/send/sms")
    public boolean sendSms(@RequestParam("phoneNumbers") String phoneNumbers,
                           @RequestParam("code") String code) {
        Map<String, String> params = new HashMap<>();
        params.put("code", code);
        return smsService.sendSms(phoneNumbers, params);
    }
}

在sendSms方法中,调用smsService.sendSms方法发送短信。其中,phoneNumbers参数表示要发送短信的手机号码,code参数表示短信验证码。

示例说明:

这里给出两个示例,分别是:

  1. 在注册页面中发送短信验证码

在注册页面中,用户输入手机号码后,点击发送验证码按钮,通过调用短信发送服务类发送验证码。前端代码如下:

// 点击发送验证码按钮
$('#sendCode').click(function () {
    // 获取用户输入的手机号码
    var phoneNumber = $('#phoneNumber').val();
    // 向后端API发送请求,调用短信发送服务类发送验证码
    $.post('/send/sms', {phoneNumbers: phoneNumber, code: '123456'}, function (result) {
        if (result) {
            alert('验证码发送成功!');
        } else {
            alert('验证码发送失败!');
        }
    });
});

后端代码如下:

@RestController
public class SmsController {

    @Autowired
    private SmsService smsService;

    @PostMapping("/send/sms")
    public boolean sendSms(@RequestParam("phoneNumbers") String phoneNumbers,
                           @RequestParam("code") String code) {
        Map<String, String> params = new HashMap<>();
        params.put("code", code);
        return smsService.sendSms(phoneNumbers, params);
    }
}
  1. 在找回密码页面中发送短信验证码

在找回密码页面中,用户输入手机号码后,点击发送验证码按钮,通过调用短信发送服务类发送验证码。前端代码如下:

// 点击发送验证码按钮
$('#sendCode').click(function () {
    // 获取用户输入的手机号码
    var phoneNumber = $('#phoneNumber').val();
    // 向后端API发送请求,调用短信发送服务类发送验证码
    $.post('/send/sms', {phoneNumbers: phoneNumber, code: '654321'}, function (result) {
        if (result) {
            alert('验证码发送成功!');
        } else {
            alert('验证码发送失败!');
        }
    });
});

后端代码同上。

相关文章