日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

我和我的项目之整合腾讯云短信SDK

發(fā)布時間:2023/12/31 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 我和我的项目之整合腾讯云短信SDK 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

寫在前面:

平常生活中老是能收到各種各樣的手機(jī)短信驗證碼,例如,快遞取包裹快遞柜上有一串密碼,網(wǎng)站app登錄,忘記密碼,確認(rèn)身份,綁定用戶等都能收到各種驗證碼,再比如銀行里各種短信驗證碼……數(shù)不勝數(shù)。那時就感覺很神奇到底是怎么做到的。系統(tǒng)又是怎么知道我輸入的驗證碼和它發(fā)送的是否是一致的。后來慢慢接觸到了短信SDK,什么阿里云、華為云、騰訊云傳統(tǒng)的電信服務(wù)商上網(wǎng)一搜很多提供了短信發(fā)送業(yè)務(wù)。開發(fā)人員只需要集成它們提供的接口就能輕松實現(xiàn)發(fā)送短信功能。我這里用的是騰訊云的,為啥選擇它呢。因為它對首次認(rèn)證的用戶免費(fèi)贈送100條短信……獻(xiàn)上領(lǐng)取地址https://cloud.tencent.com/product/sms

API和SDK區(qū)別

API

前端調(diào)用后端數(shù)據(jù)的一個通道,就是我們俗說的接口,通過這個通道,可以訪問到后端的數(shù)據(jù),但是又無需調(diào)用源代碼。

SDK

工程師為輔助開發(fā)某類軟件的相關(guān)文檔、范例和工具的集合,使用SDK可以提高開發(fā)效率,更簡單的接入某個功能。舉例說明:一個產(chǎn)品想實現(xiàn)某個功能,可以找到相關(guān)的SDK,工程師直接接入SDK,就不用再重新開發(fā)了

Let’s go

1.?首先要登錄剛才的網(wǎng)址

https://cloud.tencent.com/product/sms

進(jìn)行登錄并認(rèn)證領(lǐng)取。認(rèn)證成功后進(jìn)入到短信控制臺。左側(cè)列表有快速入門。跟著里面的提示一步步去完成即可。Ps我選用的是國內(nèi)短信業(yè)務(wù)。創(chuàng)建短信簽名時,要注意簽名類型。我這里用的是自己的公眾號。


2.國內(nèi)短信由簽名+正文組成,簽名符號為【】(注:全角),發(fā)送短信內(nèi)容時必須帶簽名。創(chuàng)建正文模板,Ps:注意語言組織,提高審核通過率。還有短信模板id不要透露。

3.簽名+短信模板創(chuàng)建完成后(Ps:可能它們各自審核需要一段時間耐心等待。好像15分鐘左右就可以了)查看短信SDK。左側(cè)應(yīng)用管理里應(yīng)用列表就能看到。點擊基礎(chǔ)配置能對短信進(jìn)行各自配置。SDK AppID是短信應(yīng)用的唯一標(biāo)識,調(diào)用短信API接口時,需要提供該參數(shù)。SDK AppID不要透露。

4.https://cloud.tencent.com/document/product/382/43194。1、2、3步驟完成后打開Java SDK API文檔。文檔很詳細(xì),記錄了如何在后臺集成。跟著操作一步步來即可。Ps:注意這里的前提條件。SecretID 和 SecretKey還有endpoint后續(xù)都會用到。

5.【安裝SDK。通過 Maven 安裝】我用的是3.1.35版本的。后面可能版本不適配導(dǎo)致發(fā)送失敗,記得回過頭來看檢查下這里版本是否匹配。https://search.maven.org/search?q=tencentcloud-sdk-java查詢最新版本。

<dependency><groupId>com.tencentcloudapi</groupId><artifactId>tencentcloud-sdk-java</artifactId><version>3.1.35</version> </dependency>

6.【老樣子,配置完pom,去yml配置屬性。順帶把參數(shù)集成到GlobalConfig中統(tǒng)一管理】

//全局參數(shù)變量設(shè)置 @Configuration public?class?GlobalConfig?implements?InitializingBean?{//======================================短信配置========================================================@Value("${sms.sign}")private?String?sign;@Value("${sms.moduleId}")private?String?moduleId;@Value("${sms.sdkAppId}")private?String?sdkAppId;@Value("${sms.url}")private?String?url;@Value("${sms.secretId}")private?String?secretId;@Value("${sms.secretKey}")private?String?secretKey;//=====================短信配置======================public static String SMS_SIGN;public static String SMS_MODULEID;public static String SMS_SDKAPPID;public static String SMS_URL;public static String SMS_SECRETID;public?static?String?SMS_SECRETKEY;@Overridepublic void afterPropertiesSet() throws Exception {//=======短信配置=============SMS_SIGN = sign;SMS_MODULEID = moduleId;SMS_SDKAPPID = sdkAppId;SMS_URL = url;SMS_SECRETID = secretId;SMS_SECRETKEY = secretKey;} }

7.【參考Java SDK中發(fā)送短信代碼】做成一個工具類,業(yè)務(wù)代碼中直接調(diào)用即可。已經(jīng)修改了其中一些配置,如若自定義修改,閱讀代碼進(jìn)行相應(yīng)修改即可。

import com.example.demojinghuadianli.config.GlobalConfig; 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.v20190711.SmsClient; import com.tencentcloudapi.sms.v20190711.models.SendSmsRequest; import?com.tencentcloudapi.sms.v20190711.models.SendSmsResponse; //導(dǎo)入可選配置類 //導(dǎo)入 SMS 模塊的 client //導(dǎo)入要請求接口對應(yīng)的?request?response?類/*** @description: 發(fā)送短信工具類*/ public class SendSmsUtil {/*** @param phoneNum 手機(jī)號* @param authCode 驗證碼* @param minute 有效時間*/public static boolean send(String phoneNum,String authCode,Integer minute) {/* 必要步驟:* 實例化一個認(rèn)證對象,入?yún)⑿枰獋魅腧v訊云賬戶密鑰對 secretId 和 secretKey* 本示例采用從環(huán)境變量讀取的方式,需要預(yù)先在環(huán)境變量中設(shè)置這兩個值* 您也可以直接在代碼中寫入密鑰對,但需謹(jǐn)防泄露,不要將代碼復(fù)制、上傳或者分享給他人* CAM 密鑰查詢:https://console.cloud.tencent.com/cam/capi*///======================================實例化一個認(rèn)證對象====必要================================================Credential cred = new Credential(GlobalConfig.SMS_SECRETID, GlobalConfig.SMS_SECRETKEY);//======================================實例化一個 http選項======可選,無特殊需求時可以跳過=========================HttpProfile httpProfile = new HttpProfile();// 設(shè)置代理//httpProfile.setProxyHost("host");//httpProfile.setProxyPort(port);/* SDK 默認(rèn)使用 POST 方法。* 如需使用 GET 方法,可以在此處設(shè)置,但 GET 方法無法處理較大的請求 */httpProfile.setReqMethod("POST");/* SDK 有默認(rèn)的超時時間,非必要請不要進(jìn)行調(diào)整* 如有需要請在代碼中查閱以獲取最新的默認(rèn)值 */httpProfile.setConnTimeout(60);/* SDK 會自動指定域名,通常無需指定域名,但訪問金融區(qū)的服務(wù)時必須手動指定域名* 例如 SMS 的上海金融區(qū)域名為 sms.ap-shanghai-fsi.tencentcloudapi.com */httpProfile.setEndpoint(GlobalConfig.SMS_URL);//======================================客戶端配置對象=====非必要=================================================/* 非必要步驟:* 實例化一個客戶端配置對象,可以指定超時時間等配置 */ClientProfile clientProfile = new ClientProfile();/* SDK 默認(rèn)用 TC3-HMAC-SHA256 進(jìn)行簽名* 非必要請不要修改該字段 */clientProfile.setSignMethod("HmacSHA256");clientProfile.setHttpProfile(httpProfile);//======================================實例化SMS的client對象====================================================/* 第二個參數(shù)是地域信息,可以直接填寫字符串 ap-guangzhou,或者引用預(yù)設(shè)的常量 */SmsClient client = new SmsClient(cred, "ap-guangzhou", clientProfile);//======================================實例化一個請求對象========================================================/* 實例化一個請求對象,根據(jù)調(diào)用的接口和實際情況,可以進(jìn)一步設(shè)置請求參數(shù)* 您可以直接查詢 SDK 源碼確定接口有哪些屬性可以設(shè)置* 屬性可能是基本類型,也可能引用了另一個數(shù)據(jù)結(jié)構(gòu)* 推薦使用 IDE 進(jìn)行開發(fā),可以方便地跳轉(zhuǎn)查閱各個接口和數(shù)據(jù)結(jié)構(gòu)的文檔說明 */SendSmsRequest req = new SendSmsRequest();/* 填充請求參數(shù),這里 request 對象的成員變量即對應(yīng)接口的入?yún)? 您可以通過官網(wǎng)接口文檔或跳轉(zhuǎn)到 request 對象的定義處查看請求參數(shù)的定義* 基本類型的設(shè)置:* 幫助鏈接:* 短信控制臺:https://console.cloud.tencent.com/smsv2* sms helper:https://cloud.tencent.com/document/product/382/3773 *//* 短信應(yīng)用 ID: 在 [短信控制臺] 添加應(yīng)用后生成的實際 SDKAppID,例如1400006666 */String appid = GlobalConfig.SMS_SDKAPPID;req.setSmsSdkAppid(appid);/* 短信簽名內(nèi)容: 使用 UTF-8 編碼,必須填寫已審核通過的簽名,可登錄 [短信控制臺] 查看簽名信息 */String sign = GlobalConfig.SMS_SIGN;req.setSign(sign);/* 國際/港澳臺短信 senderid: 國內(nèi)短信填空,默認(rèn)未開通,如需開通請聯(lián)系 [sms helper] *///String senderid = "";//req.setSenderId(senderid);/* 用戶的 session 內(nèi)容: 可以攜帶用戶側(cè) ID 等上下文信息,server 會原樣返回 *///String session = "xxx";//req.setSessionContext(session);/* 短信碼號擴(kuò)展號: 默認(rèn)未開通,如需開通請聯(lián)系 [sms helper] *///String extendcode = "xxx";//req.setExtendCode(extendcode);/* 模板 ID: 必須填寫已審核通過的模板 ID,可登錄 [短信控制臺] 查看模板 ID */String templateID = GlobalConfig.SMS_MODULEID;req.setTemplateID(templateID);/* 下發(fā)手機(jī)號碼,采用 e.164 標(biāo)準(zhǔn),+[國家或地區(qū)碼][手機(jī)號]* 例如+8613711112222, 其中前面有一個+號 ,86為國家碼,13711112222為手機(jī)號,最多不要超過200個手機(jī)號*/StringBuilder stringBuilder = new StringBuilder();stringBuilder.append("+86").append(phoneNum);String[] phoneNumbers = {stringBuilder.toString()};//String[] phoneNumbers = {"+8621212313123", "+8612345678902", "+8612345678903"};req.setPhoneNumberSet(phoneNumbers);/* 模板參數(shù): 若無模板參數(shù),則設(shè)置為空*///authCode驗證碼 minute過期時間String[] templateParams = {authCode,String.valueOf(minute)};req.setTemplateParamSet(templateParams);//==============================================================================================================/* 通過 client 對象調(diào)用 SendSms 方法發(fā)起請求。注意請求方法名與請求對象是對應(yīng)的* 返回的 res 是一個 SendSmsResponse 類的實例,與請求對象對應(yīng) */SendSmsResponse res = null;try {res = client.SendSms(req);} catch (TencentCloudSDKException e) {return false;}// 輸出 JSON 格式的字符串回包System.out.println(SendSmsResponse.toJsonString(res));// 可以取出單個值,您可以通過官網(wǎng)接口文檔或跳轉(zhuǎn)到 response 對象的定義處查看返回字段的定義System.out.println(res.getRequestId());return true;} }

8.寫一個測試接口,校驗下是否可以。代碼里稍微加了手機(jī)號碼和格式的校驗。

@RestController @RequestMapping("/sms") public class SendSMSController {@PostMapping("/send/{phoneNum}")public WebResponse send(@PathVariable(value = "phoneNum",required = true)String phoneNum){if(null == phoneNum){return WebResponse.resFail("手機(jī)號碼不允許為空",0);//RegularUtil.validate(phoneNum,RegularUtil.MOBILE)校驗手機(jī)號碼格式}else if(RegularUtil.validate(phoneNum,RegularUtil.MOBILE)!=true&&phoneNum.length()!=11){return WebResponse.resFail("手機(jī)號碼格式錯誤",0);}//AuthCodeUtil.generateAuthCode()隨機(jī)生成6位校驗碼boolean send = SendSmsUtil.send(phoneNum, AuthCodeUtil.generateAuthCode(), 2);if(false != send){return WebResponse.resSuccess("發(fā)送成功",1);}return WebResponse.resFail("發(fā)送失敗",0);} }

9.Postman來發(fā)起請求。

10.Bingo~發(fā)送成功。在短信控制臺業(yè)務(wù)統(tǒng)計也可以看到發(fā)送情況。

11.還可以結(jié)合Redis.存驗證碼有效期。后面再優(yōu)化整合吧。

Nice~

總結(jié)

以上是生活随笔為你收集整理的我和我的项目之整合腾讯云短信SDK的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。