極速指南:在 SpringBoot 中快速整合騰訊雲簡訊功能

程式設計師濟癲發表於2023-10-30

前言

今天分享一個SpringBoot整合騰訊雲簡訊的功能,平常除了工作,很多xdm做自己的小專案都可能用到簡訊,但自己去看文件挺費勁的,我這邊就幫你節省時間,直接把步驟給你列出來,照做就行。

實戰

1、申請金鑰及簽名模板

首先,要使用騰訊雲簡訊,你得先在騰訊雲有個賬號,申請金鑰及簽名模板。

1)、找到訪問管理-API金鑰管理,勿洩漏。

image


2)、簽名及模板

要申請,推薦用公眾號,描述中寫幾句讚美騰訊雲的話,幾分鐘後就可以過審了。

image

image


3)、應用SDK APPID

image


4)、簡訊工具類

應用ID、簽名、模板id都從上面找到後改為自己的就行了。

image

2、程式碼整合

騰訊雲簡訊官方文件:https://cloud.tencent.com/document/product/382/43194


1)、引入依賴

一般在common模組中引入即可

<!-- 騰訊雲簡訊 -->
<!--請到https://search.maven.org/search?q=tencentcloud-sdk-java查詢所有版本,最新版本如下-->
<dependency>
    <groupId>com.tencentcloudapi</groupId>
    <artifactId>tencentcloud-sdk-java</artifactId>
    <version>3.1.714</version>
</dependency>

2)、新增properties配置

一般這種第三方接入的配置使用properties較好,和yml配置做區分。金鑰參考前面的說明。

image


3)、新增配置類

package com.imooc.utils;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

@Component
@Data
@PropertySource("classpath:tencentCloud.properties")
@ConfigurationProperties(prefix = "tencent.cloud")
public class TencentCloudProperties {

    private String secretId;
    private String secretKey;

}

4)、簡訊工具類

從官網拷過來修改即可,記得修改其中的應用ID、簽名、模板id。

package com.imooc.utils;

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.SendSmsRequest;
import com.tencentcloudapi.sms.v20210111.models.SendSmsResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class SMSUtils {
    @Autowired
    private TencentCloudProperties tencentCloudProperties;

    public void sendSMS(String phone, String code) throws Exception {
    
        try {
        
            /* 必要步驟:
             * 例項化一個認證物件,入參需要傳入騰訊雲賬戶金鑰對secretId,secretKey。
             * 這裡採用的是從環境變數讀取的方式,需要在環境變數中先設定這兩個值。
             * 你也可以直接在程式碼中寫死金鑰對,但是小心不要將程式碼複製、上傳或者分享給他人,
             * 以免洩露金鑰對危及你的財產安全。
             * CAM密匙查詢獲取: https://console.cloud.tencent.com/cam/capi
             */
            Credential cred = new Credential(tencentCloudProperties.getSecretId(),
                tencentCloudProperties.getSecretKey());

            // 例項化一個http選項,可選的,沒有特殊需求可以跳過
            HttpProfile httpProfile = new HttpProfile();

            // httpProfile.setReqMethod("POST"); // 預設使用POST

            /* 
             * SDK會自動指定域名。通常是不需要特地指定域名的,但是如果你訪問的是金融區的服務
             * 則必須手動指定域名,例如sms的上海金融區域名: sms.ap-shanghai-fsi.tencentcloudapi.com 
             */
            httpProfile.setEndpoint("sms.tencentcloudapi.com");

            // 例項化一個client選項
            ClientProfile clientProfile = new ClientProfile();
            clientProfile.setHttpProfile(httpProfile);
            // 例項化要請求產品的client物件,clientProfile是可選的
            SmsClient client = new SmsClient(cred, "ap-nanjing", clientProfile);

            // 例項化一個請求物件,每個介面都會對應一個request物件
            SendSmsRequest req = new SendSmsRequest();
            String[] phoneNumberSet1 = {
                "+86" + phone
            }; //電話號碼
            req.setPhoneNumberSet(phoneNumberSet1);
            req.setSmsSdkAppId("xxx"); // 簡訊應用ID: 簡訊SdkAppId在 [簡訊控制檯] 新增應用後生成的實際SdkAppId
            req.setSignName("Java分享XX"); // 簽名
            req.setTemplateId("xxx"); // 模板id:必須填寫已稽核透過的模板 ID。模板ID可登入 [簡訊控制檯] 檢視

            /* 模板引數(自定義佔位變數): 若無模板引數,則設定為空 */
            String[] templateParamSet1 = {
                code
            };
            req.setTemplateParamSet(templateParamSet1);

            // 返回的resp是一個SendSmsResponse的例項,與請求物件對應
            SendSmsResponse resp = client.SendSms(req);
            // 輸出json格式的字串回包
            // System.out.println(SendSmsResponse.toJsonString(resp));
        }
        catch (TencentCloudSDKException e) {
            System.out.println(e.toString());
        }
    }
}

5)、測試效果

在服務中寫一個方法測試即可,然後啟動閘道器和user服務,訪問 http://127.0.0.1:8000/u/sms 等一會兒就有簡訊通知了。

@Autowired
private SMSUtils smsUtils;

@GetMapping("sms")
public Object sendSMS() throws Exception {

    smsUtils.sendSMS("159xxxxxxxx", "6752");

    return "sendSMS OK!";
}

總結

整合第三方的簡訊介面其實很簡單,費時間的主要是申請一些東西,以及閱讀介面文件。

大家如果想省事,按照我的步驟來就行,接入個簡訊功能,也花不了什麼錢。既可以體驗下接入方式,也可以為自己的小專案增加一些亮點。

好了,今天的小知識你學會了嗎?


喜歡請點贊+關注↓↓↓,持續分享乾貨哦~

相關文章