话不多说,直接开整!

1.阿里云购买短信服务

地址: 企业服务与云通信企业云服务云通信_企业服务-阿里云 (aliyun.com) 打开后如下图

然后搜索短信服务 结果如下

然后点击第一个选项“短信服务” 结果如下

选下面第一个最便宜的就可以了 如果是个人测试使用的话 这里价格有差异,根据自己页面购买即可

2.购买完成之后,创建用户

选择创建子用户,当然你选继续也没关系 但是你得记得住之前账户的 accessKeyId 和 accessKeySecret

当然你点击 "x" 也没关系 会出现下面这个界面

这个时候你点创建用户 就会和上面点击使用子用户出现一样的界面了 如下

然后填写或勾选上面3个箭头所指的位置 点击确定 出现下面页面

这里出现的accessKeyId 和 accessKeySecret 一定要复制下来 后面会配置到 yml中

然后点击他的名字 出现如下

点击上面的新增授权 在后边如下图所示:

到这里 你就拥有了可以发送短信的用户了 所需要的 accessKeyId 和 accessKeySecret 就都拿到了

但是还不能直接发送短息 我们在代码中还需要短信的模板,签名,参数等

3.控制台配置短信发送所需的信息

我们去到短信服务的控制台: 短信服务 (aliyun.com) 页面如下:

点击 左边 操作栏的 “快速学习和测试” :使用这个不需要审核资质,不需要审核模板,相当于就是你自己绑定一个测试机来测试功能 , 后面你如果需要正式环境使用 就需要审核资质,模板,签名等,审核通过后参数都是这些,这里就不整那么复杂了

按上面的操作后得到下图 :

 

这里可以获取到代码中所需的所有参数  就是我箭头所指的地方

4.所需依赖

下面是所需依赖

        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.5.0</version>
        </dependency>
        
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
            <version>1.1.0</version>
        </dependency>

5.代码实现

下面是阿里云的配置类 这个配置类会返回一个发送短信的Bean 我这里直接把发送短信的方法也在这里

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.profile.DefaultProfile;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @Author YangLi
 * @Date 2024/9/12 10:13
 * @注释
 */
@Configuration
public class AliyunSmsConfig {

    @Value("${aliyun.accessKeyId}")
    private String accessKeyId;

    @Value("${aliyun.accessKeySecret}")
    private String accessKeySecret;

    @Value("${aliyun.regionId}")
    private String regionId;

    @Bean
    public IAcsClient acsClient() {
        DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
        return new DefaultAcsClient(profile);
    }

    public SendSmsResponse sendSms(String phoneNumber, String signName, String templateCode, String templateParam) throws Exception {
        IAcsClient client = acsClient();
        SendSmsRequest request = new SendSmsRequest();
        request.setPhoneNumbers(phoneNumber);
        request.setSignName(signName);
        request.setTemplateCode(templateCode);
        request.setTemplateParam(templateParam);

        return client.getAcsResponse(request);
    }
}

这里是service:

/**
 * @Author YangLi
 * @Date 2024/9/11 18:21
 * @注释
 */
public interface SmsService {

    boolean sendVerificationCode(String phoneNumber, String code);

}

这里是具体的发送短信的代码

import com.example.spring_boot_security.config.AliyunSmsConfig;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.example.spring_boot_security.service.SmsService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**
 * @Author YangLi
 * @Date 2024/9/11 18:21
 * @注释
 */
@Service
@Slf4j
public class SmsServiceImpl implements SmsService {

    @Resource
    private AliyunSmsConfig aliyunSmsConfig;


    @Override
    public boolean sendVerificationCode(String phoneNumber, String code) {
        try {
            // aliyun 短信测试控制台地址  https://dysms.console.aliyun.com/quickstart?spm=5176.25163407.domtextsigncreate-index-1ec3c_58c50_0.1.3ac1bb6eYTArb1
            // 因为是测试,这个地址先绑定测试机号码,选择专用测试模版 然后点击 下方调用api发送消息  就能看到 signName, templateCode,templateParam 这4个参数
            // 如果是正式环境 需要先审核资质,审核模板,然后添加签名,审核完成之后,就能看到所需要的参数(这里我自己为了方便就不去做资质审核了)
            SendSmsResponse response = aliyunSmsConfig.sendSms(
                    phoneNumber,
                    "阿里云短信测试", // 阿里云短信签名
                    "SMS_154950909", // 阿里云短信模板代码
                    "{\"code\":\"" + code + "\"}" // 模板参数
            );
            log.info(response.getCode());
            return "OK".equals(response.getCode());
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
}

写一个controller来试试:

 

import com.example.spring_boot_security.service.SmsService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.concurrent.TimeUnit;

/**
 * @Author YangLi
 * @Date 2024/9/11 18:17
 * @注释
 */
@RestController
@RequestMapping
@Slf4j
public class SmsController {

    @Resource
    private SmsService smsService;

    @Resource
    private RedisTemplate<String, String> redisTemplate;

    @PostMapping("/send-sms-code")
    public String sendCode(@RequestParam String phoneNumber) {
        // 生成随机验证码
        String code = String.valueOf((int) ((Math.random() * 9 + 1) * 100000));

        // 将验证码发送给用户
        boolean success = smsService.sendVerificationCode(phoneNumber, code);

        if (success) {
            // 你可以将验证码存储在Redis中,并设置过期时间
             redisTemplate.opsForValue().set("SMS_" + phoneNumber, code, 5, TimeUnit.MINUTES);
            return "验证码发送成功";
        } else {
            return "验证码发送失败";
        }
    }
}

 6.配置文件

aliyun:
  # 用户的 key  在自己的阿里云账号中去创建 用户的时候会有这个
  accessKeyId: 之前让你复制的key
  # 用户的密码   在自己的阿里云账号中去创建 用户的时候会有这个
  accessKeySecret: 之前让你复制的secret
  # 地区代号   其他springboot也可以一直使用下面的值东西  不用修改
  regionId: cn-hangzhou

7.测试结果

手机会收到如下信息:

搞定,短信就发送成功了 至于你是发送短信干嘛呢? 嘿嘿嘿 

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐