保姆级带你使用阿里云短信服务
·
背景 📘
最近公司某个项目需要接入阿里云短信服务,整体而言对接难度不大,但是闲暇之余也看了一些博客,发现一个问题就是有的博客确实贴了大量的代码以及各种网址,但细心的我发现看着很全的代码,为什么复制粘贴到自己的代码中就用不了了呢?
弯弯绕绕走了一圈才知道代码是给了,但是没有给全。于是本着一颗开源分享的心 💖,把完整代码贴出来。
上代码 🔻
1️⃣ pom.xml文件 添加对应的依赖
<!-- 阿里云短信服务 -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>dysmsapi20170525</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>tea-openapi</artifactId>
<version>0.3.6</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>tea-console</artifactId>
<version>0.0.1</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>tea-util</artifactId>
<version>0.2.23</version>
</dependency>
2️⃣ application.yml 文件
# 阿里云短信服务
aliyun:
sms:
accessKeyId: 配置你的accessKeyId
accessKeySecret: 配置你的accessKeySecret
endpoint: dysmsapi.aliyuncs.com #这个不需要改
signName: 配置你的signName
smsCodeTemplateCode: 配置你的smsCodeTemplateCode
3️⃣ SmsClientConfig.java
package 这里替换成你自己的package
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import com.aliyun.teaopenapi.models.Config;
/**
* 阿里云短信服务配置类
*/
@Component
public class SmsClientConfig {
//阿里云账号的accessKeyId
@Value("${aliyun.sms.accessKeyId}")
private String accessKeyId;
//阿里云账号的accessKeySecret
@Value("${aliyun.sms.accessKeySecret}")
private String accessKeySecret;
//短信服务访问的域名
@Value("${aliyun.sms.endpoint}")
private String endpoint;
@Bean("smsClient")
public com.aliyun.dysmsapi20170525.Client createClient() throws Exception{
Config config = new Config().setAccessKeyId(accessKeyId)
.setAccessKeySecret(accessKeySecret);
config.endpoint = endpoint;
return new com.aliyun.dysmsapi20170525.Client(config);
}
}
4️⃣ 编写SendCodeService.java
package 这里替换成你自己的package
/**
* 阿里云短信服务Service接口
*
* @author yicheng
* @date 2024-11-25
*/
public interface SendCodeService {
/**
* 发送短信验证码
*
* @param phoneNumber 手机号
*/
void sendSmsCode(String phoneNumber, String randomCode);
}
5️⃣ 编写SendCodeServiceImpl实现类
package 这里替换成你自己的package
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.dysmsapi20170525.models.SendSmsResponseBody;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.aliyun.teautil.models.RuntimeOptions;
import com.google.common.collect.Maps;
import 这里替换成你自己的
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Value;
import java.util.HashMap;
/**
* 阿里云短信服务Service接口
*
* @author yicheng
* @date 2024-11-25
*/
@Slf4j
@Service
public class SendCodeServiceImpl implements SendCodeService {
@Resource
private com.aliyun.dysmsapi20170525.Client smsClient;
@Value("${aliyun.sms.signName}")
private String signName;
@Value("${aliyun.sms.smsCodeTemplateCode}")
private String smsCodeTemplateCode;
@Override
public void sendSmsCode(String phoneNumber, String randomCode) {
HashMap<Object, Object> templateParamMap = Maps.newHashMap();
templateParamMap.put("code", randomCode);
SendSmsRequest sendSmsRequest = new SendSmsRequest();
sendSmsRequest.setPhoneNumbers(phoneNumber);
sendSmsRequest.setSignName(signName);
sendSmsRequest.setTemplateCode(smsCodeTemplateCode);
sendSmsRequest.setTemplateParam(JSONUtil.toJsonStr(templateParamMap));
try {
SendSmsResponse sendSmsResponse = smsClient.sendSmsWithOptions(sendSmsRequest, new RuntimeOptions());
// 200为成功
SendSmsResponseBody body = sendSmsResponse.getBody();
// code和message为OK成功
String code = body.getCode();
String message = body.getMessage();
if (StrUtil.equals("OK", code) && StrUtil.equals("OK", message)) {
log.info("向 手机号:{} 用户发送短信验证码成功!验证码为:{}", phoneNumber, randomCode);
} else {
log.warn("向 手机号:{} 用户发送短信验证码失败!验证码为:{}", phoneNumber, randomCode);
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
写在最后 🐝
通过以上代码,可以根据项目的实际需求进行使用。⭕️以上内容也可根据实际情况进行裁剪选择使用,切勿一成不变。
The end.
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)