最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot集成騰訊云短信服務(wù)全攻略

 更新時間:2026年01月14日 10:22:04   作者:悟空碼字  
在Spring Boot項目中集成騰訊云短信服務(wù),主要通過官方SDK調(diào)用API實現(xiàn),具有穩(wěn)定性高、接入便捷的特點,下面是詳細介紹如何實現(xiàn),需要的朋友可以參考下

騰訊云短信核心概念

在開始前,需要了解幾個核心概念:

概念說明備注
短信簽名附加在短信內(nèi)容前的標(biāo)識,用于標(biāo)識發(fā)送方身份,如公司或產(chǎn)品名稱。發(fā)送國內(nèi)短信必須使用已審核通過的簽名。
短信模板預(yù)設(shè)的短信內(nèi)容,包含可變參數(shù)的占位符(如{1})。模板需審核。發(fā)送時將占位符替換為具體值。
SDKAppID & AppKey代表短信應(yīng)用的唯一憑證,用于鑒權(quán)。短信控制臺 > 應(yīng)用管理中查看。
SecretId & SecretKey騰訊云API訪問密鑰,代表你的云賬戶權(quán)限,部分SDK或API方式會用到。訪問管理[CAM]控制臺創(chuàng)建和管理。

實施前準備

  • 開通服務(wù)與創(chuàng)建應(yīng)用
    • 在騰訊云短信控制臺開通服務(wù)。
    • 在“應(yīng)用管理”中創(chuàng)建一個應(yīng)用,獲得 SDKAppID,并生成對應(yīng)的 AppKey(如果使用舊版SDK)。
  • 創(chuàng)建簽名與模板
    • 在控制臺根據(jù)用途(自用/他用)和類型(APP、網(wǎng)站等)申請短信簽名。
    • 根據(jù)短信類型(驗證碼、通知、營銷)創(chuàng)建正文模板,使用{數(shù)字}格式定義變量,例如:您的驗證碼是{1},有效期{2}分鐘。。
    • 等待審核通過后,記錄簽名內(nèi)容和模板ID。

Spring Boot集成步驟

1. 引入官方SDK依賴

騰訊云為Java提供了tencentcloud-sdk-java。在pom.xml中添加依賴(請檢查Maven倉庫使用最新版本):

<dependency>
    <groupId>com.tencentcloudapi</groupId>
    <artifactId>tencentcloud-sdk-java</artifactId>
    <version>3.1.XXX</version> <!-- 請?zhí)鎿Q為最新版本 -->
    <scope>compile</scope>
</dependency>

該SDK封裝了所有短信API,推薦使用。

2. 配置安全憑證

將憑證配置在application.yml中,切勿提交至代碼倉庫。

tencent:
  sms:
    secret-id: your-secret-id # 替換為你的SecretId
    secret-key: your-secret-key # 替換為你的SecretKey
    sdk-app-id: 1400000000 # 替換為你的SDKAppID
    sign-name: 你的簽名內(nèi)容 # 替換為審核通過的簽名內(nèi)容
    template-id: 1234567 # 替換為你常用的默認模板ID

在配置類中讀取這些值:

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

@Configuration
@ConfigurationProperties(prefix = "tencent.sms")
@Data
public class TencentSmsProperties {
    private String secretId;
    private String secretKey;
    private String sdkAppId;
    private String signName;
    private String templateId;
}

3. 創(chuàng)建短信發(fā)送服務(wù)

創(chuàng)建一個服務(wù)類來封裝發(fā)送邏輯。

import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
import com.tencentcloudapi.common.profile.ClientProfile;
import com.tencentcloudapi.common.profile.HttpProfile;
import com.tencentcloudapi.sms.v20210111.SmsClient;
import com.tencentcloudapi.sms.v20210111.models.*;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

@Service
@Slf4j
@RequiredArgsConstructor
public class TencentSmsService {

    private final TencentSmsProperties smsProperties;

    /**
     * 發(fā)送短信驗證碼
     *
     * @param phoneNumber 目標(biāo)手機號(帶區(qū)號,如"+8613712345678")
     * @param templateId  模板ID(可選,不填則使用配置的默認模板ID)
     * @param templateParams 模板參數(shù)列表,按順序替換模板中的變量{citation:6}
     * @return 發(fā)送是否成功
     */
    public boolean sendSms(String phoneNumber, String templateId, String[] templateParams) {
        try {
            // 1. 實例化認證對象,傳入SecretId和SecretKey[citation:10]
            Credential cred = new Credential(smsProperties.getSecretId(), smsProperties.getSecretKey());

            // 2. 配置HTTP和客戶端Profile
            HttpProfile httpProfile = new HttpProfile();
            httpProfile.setEndpoint("sms.tencentcloudapi.com"); // 短信API端點
            ClientProfile clientProfile = new ClientProfile();
            clientProfile.setHttpProfile(httpProfile);

            // 3. 實例化SmsClient
            SmsClient client = new SmsClient(cred, "ap-guangzhou", clientProfile); // 地域根據(jù)控制臺指引選擇

            // 4. 構(gòu)造請求對象并填充參數(shù)
            SendSmsRequest req = new SendSmsRequest();
            req.setSmsSdkAppId(smsProperties.getSdkAppId()); // 設(shè)置應(yīng)用ID[citation:2]
            req.setSignName(smsProperties.getSignName()); // 設(shè)置簽名[citation:2]
            req.setTemplateId(templateId != null ? templateId : smsProperties.getTemplateId()); // 設(shè)置模板ID
            req.setPhoneNumberSet(new String[]{phoneNumber}); // 設(shè)置手機號,支持批量
            req.setTemplateParamSet(templateParams); // 設(shè)置模板參數(shù)

            // 5. 發(fā)起請求并處理響應(yīng)
            SendSmsResponse resp = client.SendSms(req);
            SendStatus status = resp.getSendStatusSet()[0]; // 取第一個號碼的發(fā)送狀態(tài)
            log.info("短信發(fā)送請求ID:{},狀態(tài):{},狀態(tài)碼:{}", resp.getRequestId(), status.getMessage(), status.getCode());

            // 6. 判斷發(fā)送結(jié)果(通常以"Ok"表示成功,請根據(jù)實際響應(yīng)判斷)
            return "Ok".equalsIgnoreCase(status.getCode());

        } catch (TencentCloudSDKException e) {
            log.error("騰訊云短信SDK調(diào)用失敗,錯誤信息:{}", e.toString(), e);
            return false;
        }
    }

    /**
     * 簡化方法:發(fā)送固定模板的短信(如驗證碼)
     *
     * @param phoneNumber 目標(biāo)手機號
     * @param code        驗證碼
     * @return 發(fā)送是否成功
     */
    public boolean sendVerificationCode(String phoneNumber, String code) {
        // 假設(shè)你的驗證碼模板內(nèi)容為:您的驗證碼是{1},有效期{2}分鐘。
        String[] templateParams = {code, "5"}; // 驗證碼和有效期
        return sendSms(phoneNumber, null, templateParams); // 使用配置中的默認模板ID
    }
}

核心說明

  • 憑證安全SecretIdSecretKey代表賬戶所有權(quán),務(wù)必保密。
  • 地域選擇:實例化SmsClient時的地域參數(shù)(如ap-guangzhou)需與短信控制臺應(yīng)用所在地域一致。
  • 錯誤處理:生產(chǎn)環(huán)境需更完善的錯誤處理(如重試、熔斷)和狀態(tài)監(jiān)控。

4. 創(chuàng)建控制器提供API接口

創(chuàng)建一個簡單的REST API接口,供前端或其他服務(wù)調(diào)用。

import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api/sms")
@RequiredArgsConstructor
public class SmsController {

    private final TencentSmsService smsService;

    @PostMapping("/send-code")
    public ApiResponse sendVerificationCode(@RequestParam String phoneNumber) {
        // 1. 生成隨機驗證碼(示例)
        String code = String.valueOf((int)((Math.random() * 9 + 1) * 100000));

        // 2. 發(fā)送短信
        boolean isSuccess = smsService.sendVerificationCode(phoneNumber, code);

        // 3. 此處應(yīng)將驗證碼與手機號關(guān)聯(lián)存儲到Redis或Session,并設(shè)置過期時間,用于后續(xù)校驗[citation:6]
        // redisTemplate.opsForValue().set("SMS_CODE:" + phoneNumber, code, 5, TimeUnit.MINUTES);

        if (isSuccess) {
            return ApiResponse.success("短信發(fā)送成功");
        } else {
            return ApiResponse.fail("短信發(fā)送失敗,請稍后重試");
        }
    }

    // 簡單的響應(yīng)封裝類
    @Data
    public static class ApiResponse {
        private boolean success;
        private String message;
        private Object data;

        public static ApiResponse success(String message) {
            ApiResponse response = new ApiResponse();
            response.setSuccess(true);
            response.setMessage(message);
            return response;
        }

        public static ApiResponse fail(String message) {
            ApiResponse response = new ApiResponse();
            response.setSuccess(false);
            response.setMessage(message);
            return response;
        }
    }
}

核心流程與最佳實踐

將上面的步驟整合后,完整的短信發(fā)送流程如下:

為了確保服務(wù)安全和穩(wěn)定,請遵循以下實踐:

  • 頻率限制:在控制臺或代碼中,對同一手機號設(shè)置發(fā)送頻率和數(shù)量限制(如30秒1條、1天10條),防止短信轟炸。
  • 安全存儲:使用Redis等緩存驗證碼,并設(shè)置合理的過期時間(如5分鐘),切勿返回給前端。
  • 監(jiān)控與告警:關(guān)注發(fā)送成功率,配置云監(jiān)控告警,對于發(fā)送失敗或頻率異常及時處理。
  • 事務(wù)與冪等:關(guān)鍵業(yè)務(wù)(如支付)的短信發(fā)送,應(yīng)考慮與業(yè)務(wù)邏輯的事務(wù)一致性,并對發(fā)送請求做冪等處理。

總結(jié)

在Spring Boot中集成騰訊云短信服務(wù),核心是安全配置、服務(wù)封裝和流程管控

環(huán)節(jié)關(guān)鍵點常見問題
前期準備企業(yè)認證、簽名/模板審核、獲取憑證個人用戶無法使用營銷短信;模板變量格式錯誤。
開發(fā)集成使用官方Java SDK、保護SecretKey、合理封裝服務(wù)類。地域配置錯誤;SDK版本過舊。
生產(chǎn)保障設(shè)置發(fā)送頻率限制、驗證碼安全存儲與校驗、監(jiān)控告警。短信被刷;驗證碼被爆破;服務(wù)不可用無感知。

以上就是SpringBoot集成騰訊云短信服務(wù)全攻略的詳細內(nèi)容,更多關(guān)于SpringBoot集成騰訊云短信的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • spring.profiles.active配置使用小結(jié)

    spring.profiles.active配置使用小結(jié)

    spring.profiles.active?配置使得應(yīng)用程序能夠在不同的環(huán)境中使用不同的配置,本文主要介紹了spring.profiles.active配置使用小結(jié),具有一定的參考價值,感興趣的可以了解一下
    2024-07-07
  • 使用IDEA插件反編譯jar包的實現(xiàn)方式

    使用IDEA插件反編譯jar包的實現(xiàn)方式

    這篇文章主要介紹了使用IDEA插件反編譯jar包的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • SpringBoot微信消息接口配置詳解

    SpringBoot微信消息接口配置詳解

    這篇文章主要介紹了SpringBoot 微信消息接口配置詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-06-06
  • mybatis plus代碼生成器配置過程解析

    mybatis plus代碼生成器配置過程解析

    這篇文章主要介紹了mybatis plus代碼生成器配置過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • Java網(wǎng)絡(luò)編程UDP實現(xiàn)消息發(fā)送及聊天

    Java網(wǎng)絡(luò)編程UDP實現(xiàn)消息發(fā)送及聊天

    這篇文章主要為大家詳細介紹了Java網(wǎng)絡(luò)編程UDP實現(xiàn)消息發(fā)送及聊天,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • java實現(xiàn)的MD5摘要算法完整實例

    java實現(xiàn)的MD5摘要算法完整實例

    這篇文章主要介紹了java實現(xiàn)的MD5摘要算法,結(jié)合完整實例形式分析了java實現(xiàn)md5單項加密的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2017-01-01
  • java冒泡排序算法代碼

    java冒泡排序算法代碼

    這篇文章介紹了java冒泡排序算法代碼,有需要的朋友可以參考一下
    2013-10-10
  • Spring注解@EnableWebMvc使用的坑點及解析

    Spring注解@EnableWebMvc使用的坑點及解析

    這篇文章主要介紹了Spring注解@EnableWebMvc使用的坑點及解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java實現(xiàn)發(fā)送郵件并攜帶附件

    Java實現(xiàn)發(fā)送郵件并攜帶附件

    這篇文章主要為大家詳細介紹了Java實現(xiàn)發(fā)送郵件并攜帶附件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • IDEA中Mybatis的MGB使用逆向工程配置的詳細教程

    IDEA中Mybatis的MGB使用逆向工程配置的詳細教程

    這篇文章主要介紹了IDEA中Mybatis的MGB使用逆向工程配置,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09

最新評論

台安县| 铜陵市| 孝义市| 册亨县| 凌海市| 金寨县| 丰镇市| 博爱县| 巢湖市| 临沧市| 济阳县| 平山县| 香格里拉县| 漳浦县| 六盘水市| 五华县| 三河市| 合山市| 桦南县| 化州市| 越西县| 贺兰县| 宝丰县| 望城县| 清新县| 南江县| 沙田区| 江西省| 巫山县| 远安县| 乐山市| 玉门市| 枝江市| 秭归县| 竹山县| 怀宁县| 密山市| 虎林市| 安新县| 夏河县| 靖边县|