无缝集成指南,SpringBoot三步接入华为云短信服务

大家好,我是小悟。

华为云短信服务简介

华为云消息&短信服务(MSG&SMS)为企业提供了稳定、合规的全球短信发送能力。它主要有以下特点:

  • 核心功能 :支持发送验证码短信 (用于登录、注册)和通知短信(用于物流、消费通知)。
  • 核心概念 :要发送短信,你必须在控制台提前创建短信应用 、申请并审核通过短信签名短信模板。签名是发送方标识(如"【华为云】"),模板是包含变量的固定内容。

SpringBoot接入华为云短信SDK步骤

以下是使用华为云官方Java SDK进行集成的详细步骤。

第一步:开通服务与前期准备

  1. 注册与实名 :使用企业主体注册华为云账号,并完成企业实名认证
  2. 开通服务:在控制台搜索并开通"消息&短信 MSGSMS"服务。
  3. 准备密钥 :进入"我的凭证 > 访问密钥",获取用于API调用的Access Key (AK)Secret Key (SK)

第二步:控制台配置(关键步骤)

这是发送短信的前提,所有配置均需审核。

  1. 创建应用 :在"应用管理"中创建短信应用,获取app_idapp_key
  2. 申请签名:在"签名管理"中,根据你的企业身份申请短信签名。签名需要审核,且推广类签名需证明与接收方有会员或订购关系。
  3. 申请模板:在"模板管理"中创建模板。模板内容需符合规范,例如验证码模板:"您的验证码为:{1},请在{2}分钟内填写。" 提交后等待审核。

第三步:SpringBoot项目集成与代码实现

  1. 添加Maven依赖

    pom.xml中添加官方SDK依赖。

    复制代码
    <dependency>
        <groupId>com.huaweicloud.sdk</groupId>
        <artifactId>huaweicloud-sdk-smsapi</artifactId>
        <!-- 请前往华为云官网SDK中心查询并使用最新版本 -->
        <version>{latest-version}</version>
    </dependency>
  2. 配置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 # 短信服务区域,如华北-北京四
  3. 创建配置类读取属性

    复制代码
    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;
    }
  4. 编写短信发送服务类

    这是最核心的业务类,用于组装和发送请求。

    复制代码
    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;
            }
        }
    }
  5. 在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 "短信发送失败";
            }
        }
    }

重要补充与总结

将以上步骤串联起来,整个接入流程和注意事项如下:

总结与核心建议

  1. 官方SDK是首选:华为云提供了官方的Java SDK,直接集成是最稳妥的方式。
  2. 配置先于代码 :务必理解"应用-签名-模板 "的依赖关系。所有配置必须先在控制台完成并通过审核,代码才能成功调用。
  3. 严格遵循内容规范:这是成功送达的关键。特别是面向国内用户时,务必遵守最新的合规要求。
  4. 关注错误码 :发送失败时,华为云会返回明确的API错误码(如E200028表示模板变量错误)或状态回执错误码。根据这些代码在官方文档中排查,是最高效的调试方法。

谢谢你看我的文章,既然看到这里了,如果觉得不错,随手点个赞、转发、在看三连吧,感谢感谢。那我们,下次再见。

您的一键三连,是我更新的最大动力,谢谢

山水有相逢,来日皆可期,谢谢阅读,我们再会

我手中的金箍棒,上能通天,下能探海

相关推荐
linweidong2 小时前
中科曙光Java后端开发面试题及参考答案
分布式·设计模式·spring mvc·tcp协议·三次握手·后端开发·java面经
E_ICEBLUE2 小时前
【2026 最新教程】Java 自动化提取 PDF 表格:从文本到 Excel/CSV 的全场景实现
java·pdf·自动化
C雨后彩虹2 小时前
无向图染色
java·数据结构·算法·华为·面试
J_HelloWorld2 小时前
缺页中断:Java高性能存储的隐形推手
java·缺页中断
一代明君Kevin学长2 小时前
记录一个上手即用的Spring全局返回值&异常处理框架
java·网络·python·spring
悟空码字2 小时前
SpringBoot整合MyBatis-Flex保姆级教程,看完就能上手!
java·spring boot·后端
爬山算法2 小时前
Hibernate(43)Hibernate中的级联删除如何实现?
java·python·hibernate
J_liaty2 小时前
Java工程师的JVM入门教程:从零理解Java虚拟机
java·开发语言·jvm
qq_2500568683 小时前
SpringBoot 引入 smart-doc 接口文档插件
java·spring boot·后端