SpringBoot接入华为云短信SDK的流程步骤
华为云短信服务简介
华为云消息&短信服务(MSG&SMS)为企业提供了稳定、合规的全球短信发送能力。它主要有以下特点:
- 核心功能:支持发送验证码短信(用于登录、注册)和通知短信(用于物流、消费通知)。
- 核心概念:要发送短信,你必须在控制台提前创建短信应用、申请并审核通过短信签名和短信模板。签名是发送方标识(如“【华为云】”),模板是包含变量的固定内容。
SpringBoot接入华为云短信SDK步骤
以下是使用华为云官方Java SDK进行集成的详细步骤。
第一步:开通服务与前期准备
- 注册与实名:使用企业主体注册华为云账号,并完成企业实名认证。
- 开通服务:在控制台搜索并开通“消息&短信 MSGSMS”服务。
- 准备密钥:进入“我的凭证 > 访问密钥”,获取用于API调用的Access Key (AK) 和Secret Key (SK)。
第二步:控制台配置(关键步骤)
这是发送短信的前提,所有配置均需审核。
- 创建应用:在“应用管理”中创建短信应用,获取
app_id和app_key。 - 申请签名:在“签名管理”中,根据你的企业身份申请短信签名。签名需要审核,且推广类签名需证明与接收方有会员或订 购关系。
- 申请模板:在“模板管理”中创建模板。模板内容需符合规范,例如验证码模板:“您的验证码为:{1},请在{2}分钟内填写。” 提交后等待审核。
第三步:SpringBoot项目集成与代码实现
添加Maven依赖
在pom.xml中添加官方SDK依赖。
<dependency>
<groupId>com.huaweicloud.sdk</groupId>
<artifactId>huaweicloud-sdk-smsapi</artifactId>
<!-- 请前往华为云官网SDK中心查询并使用最新版本 -->
<version>{latest-version}</version>
</dependency>
配置AK/SK和应用信息
在application.yml中配置你的密钥和应用信息。
huaweicloud:
sms:
ak: your-access-key # 替换为你的AK
sk: your-secret-key # 替换为你的SK
project-id: your-project-id # 在“我的凭证-项目列表”中查找
sender: 10690xxxxxxxx # 通道号,在创建的应用详情中查看
signature: 华为云测试 # 已审核通过的签名名称
template-id: xxxxxxxx # 已审核通过的模板ID
region: cn-north-4 # 短信服务区域,如华北-北京四
创建配置类读取属性
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import lombok.Data;
@Component
@ConfigurationProperties(prefix = "huaweicloud.sms")
@Data
public class SmsConfig {
private String ak;
private String sk;
private String projectId;
private String sender;
private String signature;
private String templateId;
private String region;
}
编写短信发送服务类
这是最核心的业务类,用于组装和发送请求。
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.sms.v2.SmsClient;
import com.huaweicloud.sdk.sms.v2.model.*;
import com.huaweicloud.sdk.sms.v2.region.SmsRegion;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.List;
@Service
public class HuaweiSmsService {
@Autowired
private SmsConfig smsConfig;
public Boolean sendSingleMessage(String mobile, List<String> templateParams) {
// 1. 构建认证信息
BasicCredentials auth = new BasicCredentials()
.withAk(smsConfig.getAk())
.withSk(smsConfig.getSk())
.withProjectId(smsConfig.getProjectId());
// 2. 初始化客户端 (注意Region枚举可能随SDK版本变化)
SmsClient client = SmsClient.newBuilder()
.withCredential(auth)
.withRegion(SmsRegion.valueOf(smsConfig.getRegion().toUpperCase().replace("-", "_")))
.build();
// 3. 构造发送请求
SendSmsRequest request = new SendSmsRequest()
.withFrom(smsConfig.getSender()) // 发送号码(通道号)
.withTo(Arrays.asList(mobile)) // 接收方号码列表
.withTemplateId(smsConfig.getTemplateId()) // 模板ID
.withTemplateParas(templateParams) // 模板变量值列表
.withSignature(smsConfig.getSignature()); // 签名名称
// 4. 发送请求并处理响应
try {
SendSmsResponse response = client.sendSms(request);
// 根据SDK版本,成功判断可能是 response.getHttpStatusCode() == 200 或解析body中的code
System.out.println("Request ID: " + response.getRequestId());
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
}
在Controller或业务层调用
@RestController
@RequestMapping("/api/sms")
public class SmsController {
@Autowired
private HuaweiSmsService smsService;
@PostMapping("/send-verification")
public String sendVerificationCode(@RequestParam String phone) {
// 生成随机验证码
String code = String.valueOf((int)((Math.random() * 9 + 1) * 100000));
// 组装模板参数,顺序需与模板中变量定义一致
List<String> params = Arrays.asList(code, "5");
boolean isSuccess = smsService.sendSingleMessage(phone, params);
if(isSuccess) {
return "短信发送成功,验证码:" + code; // 生产环境不应返回验证码
} else {
return "短信发送失败";
}
}
}
重要补充与总结
将以上步骤串联起来,整个接入流程和注意事项如下:
总结与核心建议
- 官方SDK是首选:华为云提供了官方的Java SDK,直接集成是最稳妥的方式。
- 配置先于代码:务必理解“应用-签名-模板”的依赖关系。所有配置必须先在控制台 完成并通过审核,代码才能成功调用。
- 严格遵循内容规范:这是成功送达的关键。特别是面向国内用户时,务必遵守最新的合规要求。
- 关注错误码:发送失败时,华为云会返回明确的API错误码(如
E200028表示模板变量错误)或状态回执错误码。根据这些代码在官方文档中排查,是最高效的调试方法。
以上就是SpringBoot接入华为云短信SDK的流程步骤的详细内容,更多关于SpringBoot接入华为云短信SDK的资料请关注脚本之家其它相关文章!
相关文章
java后台调用HttpURLConnection类模拟浏览器请求实例(可用于接口调用)
这篇文章主要介绍了java后台调用HttpURLConnection类模拟浏览器请求实例,该实例可用于接口调用,具有一定的实用价值,需要的朋友可以参考下2014-10-10
springboot如何使用redis的incr创建分布式自增id
这篇文章主要介绍了springboot如何使用redis的incr创建分布式自增id,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-11-11
Mybatis中SqlSession接口中selectList方法详解
这篇文章主要给大家介绍了关于Mybatis中SqlSession接口中selectList方法的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2023-03-03


最新评论