【SpringBoot】整合阿里云短信服务

本文以发送短信验证码为例

一、进入阿里云短信服务页面

二、购买短信套餐包

(必须购买,不能用免费赠送的,否则发布出去)

三、在短信服务控制台添加相关信息

资质管理

用途选择“自用”即可

签名管理

签名的格式为中文 + 英文

签名用途选择“自用”即可

资质信息选择审核通过的资质

模板管理

模板类型选择“验证码”

关联签名选择审核通过的签名

四、代码实现

相关maven依赖

        <!--阿里云SDK核心库-->
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.6.0</version>
        </dependency>
        <!--阿里云短信服务SDK-->
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
            <version>2.2.1</version>
        </dependency>

yml文件

# 配置阿里云短信服务的相关参数
alicloud:
  sms:
    # 阿里云访问密钥ID,用于身份验证
    access-key-id: 
    # 阿里云访问密钥秘密,用于身份验证
    access-key-secret: 
    # 阿里云短信服务所在的地域ID
    region-id: cn-hangzhou
    # 短信签名名称,发送短信时使用的签名
    sign-name: 测试cs
    # 短信模板代码,发送短信时使用的模板
    template-code: SMS_4**********

SmsCofig

/**
 * 存储访问阿里云API所需的凭证和配置信息
 * 这些字段共同用于初始化阿里云客户端,以便发送短信验证码
 */

@Data
@Configuration
@ConfigurationProperties(prefix = "alicloud.sms")
public class SmsCofig {
    private String accessKeyId;          // 阿里云账号的访问密钥ID,用于身份验证
    private String accessKeySecret;  // 阿里云账号的访问密钥,与accessKeyId配对使用,用于身份验证
    private String regionId;                // 阿里云短信服务的接入点标识符,标识服务所在的地域
    private String signName;             // 短信签名,发送短信时使用的签名名称,需在阿里云控制台预先配置
    private String templateCode;      // 短信模板代码,定义短信内容的模板,需在阿里云控制台预先配置
}

SmsService

@Service
@RequiredArgsConstructor
/**
 * 提供短信服务,包括生成验证码和发送短信
 */
public class SmsService {
    // 注入短信配置
    private final SmsCofig smsCofig;

    /**
     * 生成6位随机验证码
     *
     * @return 随机生成的6位数字字符串
     */
    public String generateCode() {
        return String.valueOf((int) ((Math.random() * 9 + 1) * 100000));
    }

    /**
     * 发送短信验证码到指定电话号码
     *
     * @param phoneNum 接收短信的电话号码
     * @param code 验证码
     */
    public void sendSms(String phoneNum, String code) {
        // 创建阿里云短信服务客户端配置
        DefaultProfile profile = DefaultProfile.getProfile(
                smsCofig.getRegionId(),
                smsCofig.getAccessKeyId(),
                smsCofig.getAccessKeySecret()
        );
        IAcsClient client = new com.aliyuncs.DefaultAcsClient(profile);

        // 构建发送短信的请求
        CommonRequest request = new CommonRequest();
        request.setSysMethod(MethodType.POST);
        request.setSysDomain("dysmsapi.aliyuncs.com");
        request.setSysVersion("2017-05-25");
        request.setSysAction("SendSms");
        request.putQueryParameter("RegionId", smsCofig.getRegionId());
        request.putQueryParameter("PhoneNumbers", phoneNum);
        request.putQueryParameter("SignName", smsCofig.getSignName());
        request.putQueryParameter("TemplateCode",smsCofig.getTemplateCode());
        request.putQueryParameter("TemplateParam", "{\"code\":\"" + code + "\"}");

        // 发送短信并处理响应
        try {
            CommonResponse response = client.getCommonResponse(request);
            System.out.println("短信发送结果:" + response.getData());
        } catch (ServerException e) {
            // 阿里云服务异常
            throw new RuntimeException("阿里云服务异常" + e.getMessage());
        } catch (ClientException e) {
            // 阿里云客户端异常
            throw new RuntimeException("阿里云客户端异常" + e.getMessage());
        }
    }
}

SmsController

@RestController
@RequiredArgsConstructor
public class SmsController {
    private final SmsService smsService;

    @GetMapping("/sms")
    public ResponseEntity<String> sendSms() {
        //作为演示,这里把手机号写死
        String phoneNumber = "1111111111";
        String code = smsService.generateCode();

        try {
            smsService.sendSms(phoneNumber, code);
            return ResponseEntity.ok("发送成功");
        } catch (Exception e) {
            return ResponseEntity.badRequest().body("发送失败");
        }
    }
}

五、相关异常处理

阿里云该账号下找不到对应签名

按图修改即可解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值