javascript
SpringBoot项目中快速集成腾讯云短信服务SDK实现手机验证码功能
大家春節(jié)好!我是程序員阿福,今天過年的日子祝大家在新的一年里健康平安、步步高升、虎年大吉大利、財(cái)源滾滾! 今天分享一篇簡短一點(diǎn)的文章,希望在將來工作中需要的時候能夠用得到,如果將來工作中需要實(shí)現(xiàn)短信驗(yàn)證碼功能時可以打開我的公眾號并翻到這篇文章再仔細(xì)參考我的實(shí)現(xiàn)思路,那么筆者分享這篇文章的用意也就達(dá)到了。
前言
幾乎每一個新項(xiàng)目中都會涉及到手機(jī)驗(yàn)證碼的動能,用戶登錄采用手機(jī)驗(yàn)證碼登錄方式、用戶忘記密碼需要密碼修改密碼時以及用戶進(jìn)行支付確認(rèn)時也需要用到手機(jī)驗(yàn)證碼。可以說手機(jī)驗(yàn)證碼在各種項(xiàng)目中用的非常多,因此在我們的項(xiàng)目中集成一個短信通知服務(wù)是非常有必要的。
筆者為啥選擇了騰訊云短信服務(wù)?市面上的短信服務(wù)其實(shí)是非常多的,包括阿里云短信服務(wù)、七牛云短信服務(wù)一起其他各大短信服務(wù)廠商等等。一是因?yàn)楣P者平時買的騰訊云產(chǎn)品比較多,包括我的云服務(wù)器也是買的騰訊云產(chǎn)品,對騰訊云的產(chǎn)品比較熟悉,用起來也容易上手;二是發(fā)現(xiàn)騰訊云的產(chǎn)品相比較阿里的產(chǎn)品要更便宜些,購買金額的門檻也要低一些,50元就可以購買1000條短信服務(wù),而阿里的短信服務(wù)購買金額門檻要100元以上。對于個人開發(fā)者而言1000條短信服務(wù)以及足夠了。最后就是發(fā)現(xiàn)騰訊云短信服務(wù)的SDK API簡單易用,各個版本客戶端語言的示例都非常詳細(xì),跟著示例一步一步來很容易就能實(shí)現(xiàn)自己的需求。下面廢話不多說,直接介紹在我們的項(xiàng)目集成短信通知服務(wù)的詳細(xì)步驟與演示代碼。
騰訊云短信服務(wù)SDK
SDK 3.0是云API 3.0平臺的配套工具,您可以通過SDK使用所有 [短信 API](https://cloud.tencent.com/document/product/382/52077)。新版SDK實(shí)現(xiàn)了統(tǒng)一化,具有各個語言版本的SDK` 使用方法相同,接口調(diào)用方式相同,錯誤碼相同以及返回包格式相同等優(yōu)點(diǎn)。
前提條件
- 已開通短信服務(wù),具體操作請參見 國內(nèi)短信快速入門。
- 如需發(fā)送國內(nèi)短信,需要先 購買國內(nèi)短信套餐包。
- 已準(zhǔn)備依賴環(huán)境:JDK 7 及以上版本。
- 已在訪問管理控制臺 >API密鑰管理頁面獲取 SecretID 和 SecretKey。
- SecretID 用于標(biāo)識 API 調(diào)用者的身份。
- SecretKey 用于加密簽名字符串和服務(wù)器端驗(yàn)證簽名字符串的密鑰,SecretKey 需妥善保管,避免泄露。
- 短信的調(diào)用地址為sms.tencentcloudapi.com。
相關(guān)資料
- 各個接口及其參數(shù)的詳細(xì)介紹請參見 API 文檔。
- 下載 SDK 源碼請?jiān)L問 [Java SDK 源碼](
安裝 SDK
通過Maven安裝
Maven 是 Java 的依賴管理工具,支持您項(xiàng)目所需的依賴項(xiàng),并將其安裝到項(xiàng)目中。
1 訪問 Maven 官網(wǎng) 下載對應(yīng)系統(tǒng) Maven 安裝包進(jìn)行安裝
2 添加 Maven 依賴項(xiàng),只需在 Maven pom.xml添加以下依賴項(xiàng)即可:
<dependency><groupId>com.tencentcloudapi</groupId><artifactId>tencentcloud-sdk-java</artifactId><version>3.1.270</version><!-- 注:這里只是示例版本號(可直接使用),可獲取并替換為 最新的版本號,注意不要使用4.0.x版本(非最新版本) --> </dependency>注意事項(xiàng):
1 版本號僅為示例,請?jiān)?Maven 倉庫 獲取最新的版本號并替換
2 Maven 倉庫中顯示的 4.0.11 是廢棄版本,由于 Maven 索引更新問題尚未完全刪除
通過源碼包安裝
1 下載 源碼壓縮包
2 解壓源碼包到您項(xiàng)目中合適的位置
3 將 vendor 目錄下的 jar 包放在 Java 可找到的路徑中
4 引用方法可參考 示例代碼
示例代碼
說明:所有示例代碼僅作參考,無法直接編譯和運(yùn)行,需根據(jù)實(shí)際情況進(jìn)行修改,您也可以根據(jù)實(shí)際需求使用 API 3.0 Explorer 自動化生成 Demo 代碼。
每個接口都有一個對應(yīng)的 Request 結(jié)構(gòu)和一個 Response 結(jié)構(gòu)。本文僅列舉幾個常用功能的示例代碼,如下所示。
這里我們只展示發(fā)送短信的示例代碼
import com.tencentcloudapi.common.Credential; import com.tencentcloudapi.common.exception.TencentCloudSDKException;//導(dǎo)入可選配置類 import com.tencentcloudapi.common.profile.ClientProfile; import com.tencentcloudapi.common.profile.HttpProfile;// 導(dǎo)入對應(yīng)SMS模塊的client import com.tencentcloudapi.sms.v20210111.SmsClient;// 導(dǎo)入要請求接口對應(yīng)的request response類 import com.tencentcloudapi.sms.v20210111.models.SendSmsRequest; import com.tencentcloudapi.sms.v20210111.models.SendSmsResponse;/*** Tencent Cloud Sms Sendsms**/ public class SendSms {public static void main(String[] args){try {/* 必要步驟:* 實(shí)例化一個認(rèn)證對象,入?yún)⑿枰獋魅腧v訊云賬戶密鑰對secretId,secretKey。* 這里采用的是從環(huán)境變量讀取的方式,需要在環(huán)境變量中先設(shè)置這兩個值。* 你也可以直接在代碼中寫死密鑰對,但是小心不要將代碼復(fù)制、上傳或者分享給他人,* 以免泄露密鑰對危及你的財(cái)產(chǎn)安全。* CAM密匙查詢: https://console.cloud.tencent.com/cam/capi*/Credential cred = new Credential("secretId", "secretKey");// 實(shí)例化一個http選項(xiàng),可選,沒有特殊需求可以跳過HttpProfile httpProfile = new HttpProfile();// 設(shè)置代理// httpProfile.setProxyHost("真實(shí)代理ip");// httpProfile.setProxyPort(真實(shí)代理端口);/* SDK默認(rèn)使用POST方法。* 如果你一定要使用GET方法,可以在這里設(shè)置。GET方法無法處理一些較大的請求 */httpProfile.setReqMethod("POST");/* SDK有默認(rèn)的超時時間,非必要請不要進(jìn)行調(diào)整* 如有需要請?jiān)诖a中查閱以獲取最新的默認(rèn)值 */httpProfile.setConnTimeout(60);/* SDK會自動指定域名。通常是不需要特地指定域名的,但是如果你訪問的是金融區(qū)的服務(wù)* 則必須手動指定域名,例如sms的上海金融區(qū)域名: sms.ap-shanghai-fsi.tencentcloudapi.com */httpProfile.setEndpoint("sms.tencentcloudapi.com");/* 非必要步驟:* 實(shí)例化一個客戶端配置對象,可以指定超時時間等配置 */ClientProfile clientProfile = new ClientProfile();/* SDK默認(rèn)用TC3-HMAC-SHA256進(jìn)行簽名* 非必要請不要修改這個字段 */clientProfile.setSignMethod("HmacSHA256");clientProfile.setHttpProfile(httpProfile);/* 實(shí)例化要請求產(chǎn)品(以sms為例)的client對象* 第二個參數(shù)是地域信息,可以直接填寫字符串a(chǎn)p-guangzhou,或者引用預(yù)設(shè)的常量 */SmsClient client = new SmsClient(cred, "ap-guangzhou",clientProfile);/* 實(shí)例化一個請求對象,根據(jù)調(diào)用的接口和實(shí)際情況,可以進(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: 短信SdkAppId在 [短信控制臺] 添加應(yīng)用后生成的實(shí)際SdkAppId,示例如1400006666 */String sdkAppId = "1400009099";req.setSmsSdkAppId(sdkAppId);/* 短信簽名內(nèi)容: 使用 UTF-8 編碼,必須填寫已審核通過的簽名,簽名信息可登錄 [短信控制臺] 查看 */String signName = "簽名內(nèi)容";req.setSignName(signName);/* 國際/港澳臺短信 SenderId: 國內(nèi)短信填空,默認(rèn)未開通,如需開通請聯(lián)系 [sms helper] */String senderid = "";req.setSenderId(senderid);/* 用戶的 session 內(nèi)容: 可以攜帶用戶側(cè) ID 等上下文信息,server 會原樣返回 */String sessionContext = "xxx";req.setSessionContext(sessionContext);/* 短信號碼擴(kuò)展號: 默認(rèn)未開通,如需開通請聯(lián)系 [sms helper] */String extendCode = "";req.setExtendCode(extendCode);/* 模板 ID: 必須填寫已審核通過的模板 ID。模板ID可登錄 [短信控制臺] 查看 */String templateId = "400000";req.setTemplateId(templateId);/* 下發(fā)手機(jī)號碼,采用 E.164 標(biāo)準(zhǔn),+[國家或地區(qū)碼][手機(jī)號]* 示例如:+8613711112222, 其中前面有一個+號 ,86為國家碼,13711112222為手機(jī)號,最多不要超過200個手機(jī)號 */String[] phoneNumberSet = {"+8621212313123", "+8612345678902", "+8612345678903"};req.setPhoneNumberSet(phoneNumberSet);/* 模板參數(shù): 若無模板參數(shù),則設(shè)置為空 */String[] templateParamSet = {"5678"};req.setTemplateParamSet(templateParamSet);/* 通過 client 對象調(diào)用 SendSms 方法發(fā)起請求。注意請求方法名與請求對象是對應(yīng)的* 返回的 res 是一個 SendSmsResponse 類的實(shí)例,與請求對象對應(yīng) */SendSmsResponse res = client.SendSms(req);// 輸出json格式的字符串回包System.out.println(SendSmsResponse.toJsonString(res));// 也可以取出單個值,你可以通過官網(wǎng)接口文檔或跳轉(zhuǎn)到response對象的定義處查看返回字段的定義System.out.println(res.getRequestId());} catch (TencentCloudSDKException e) {e.printStackTrace();}} }SpringBoot項(xiàng)目中集成短信服務(wù)
筆者的spring-boot項(xiàng)目用的是2.2.7.RELEASE版本,是之前作者【江南一點(diǎn)雨】開源的一個spring-boot項(xiàng)目叫blog-server。筆者在這個開源項(xiàng)目的基礎(chǔ)上進(jìn)行了二次開發(fā)。手機(jī)驗(yàn)證碼一般具有一定的時效性,過期后就會失效。我們可以借助redis緩存來存儲短信驗(yàn)證碼,并設(shè)置過期時間。等到服務(wù)端需要對用戶請求里帶上的驗(yàn)證碼進(jìn)行核對時就直接從redis緩存里面取就行了,redis的客戶端我們用的是jedis。因此我們在集成騰訊云短信服務(wù)SDK的同時還要集成redis服務(wù)。只需要在項(xiàng)目的pom.xml文件dependencies標(biāo)簽中加入下面三項(xiàng)依賴項(xiàng)即可:
<dependency><groupId>com.tencentcloudapi</groupId><artifactId>tencentcloud-sdk-java</artifactId><version>3.1.222</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><exclusions><exclusion><groupId>io.lettuce</groupId><artifactId>lettuce-core</artifactId></exclusion></exclusions></dependency><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.1.0</version></dependency>創(chuàng)建短信簽名和短信模板
登錄騰訊云控制臺后進(jìn)入國內(nèi)短信->短信簽名管理頁面
點(diǎn)擊【創(chuàng)建簽名】按鈕創(chuàng)建短信簽名,進(jìn)入創(chuàng)建簽名頁面,選擇簽名用途、簽名類型、證明類型、填寫簽名內(nèi)容和申請說明,并上傳證明。簽名內(nèi)容有一定的限制:長度為2~12字,由中英文、數(shù)字組成,內(nèi)容不包含【】。
簽名用途有兩種:自用或他用,默認(rèn)為自用;簽名類型有4種,分別是網(wǎng)站、App、公眾號和小程序,每種簽名類型上傳的證明類型與其簽名類型一一對應(yīng)。騰訊云控制臺短信簽名管理頁面都有詳細(xì)的提示,按照提示上傳對應(yīng)的證明類型截圖即可;申請說明填寫短信用途即可。填寫好之后點(diǎn)擊【確定】按鈕,等待騰訊云后臺審批通過之后才可使用,審批時間一般需要2個小時。
進(jìn)入短信->正文模板管理點(diǎn)擊【創(chuàng)建正文模板】按鈕進(jìn)入創(chuàng)建正文模板界面編輯正文模板
模板名稱:自定義;短信類型:個人選擇普通類型,營銷類型需要企業(yè)認(rèn)證的賬戶才可以啟用;短信內(nèi)容可以點(diǎn)擊使用標(biāo)準(zhǔn)模板,選好后點(diǎn)擊右邊操作列下的藍(lán)色字體【使用】即可;申請說明:根據(jù)申請用途自定義
填寫好模板名稱和短信內(nèi)容及申請說明后點(diǎn)擊確定會生成模板ID,在正文模板管理頁面可以看到,這個模擬ID后面會用到,模板ID為短信模板ID列對應(yīng)的數(shù)字。注意:短信模板需要在狀態(tài)為已通過之后才可使用。
下面項(xiàng)目中筆者使用之前審核通過的短信簽名和短信模板ID
application.properties添加騰訊云短信配置信息
blog.sms.secretId=<你的騰訊云secretId> blog.sms.secretKey=<你的騰訊云secretKey> blog.sms.appid=<你的騰訊云appid> blog.sms.signName=<短信簽名內(nèi)容> blog.sms.endpoint=sms.tencentcloudapi.com blog.sms.region=<服務(wù)器所在區(qū)域,廣州為:ap-guangzhou>新建配置信息類SmsPropperties
@Configuration @ConfigurationProperties(prefix = "blog.sms") public class SmsProperty {private String secretId;private String secretKey;private String appid;private String signName;private String endpoint;private String region;// 省略setter、getter方法}啟用配置屬性類需要在pom.xml文件中添加spring-boot-configuration-processor的依賴
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency>同時在啟動類上加上@EnableConfigurationProperties注解
@SpringBootApplication @EnableScheduling//開啟定時任務(wù)支持 @EnableConfigurationProperties @MapperScan(basePackages={"org.sang.mapper"},annotationClass = Repository.class) public class BlogserverApplication {public static void main(String[] args) {SpringApplication.run(BlogserverApplication.class, args);} }配置短信發(fā)送SmsClient類bean
新建SmsConfig配置類添加SmsClient類bean, 參照發(fā)送短信SDK API完成
@Configuration public class SmsConfig {@Resourceprivate SmsProperty smsProperty;@Beanpublic SmsClient smsClient() {Credential cred = new Credential(smsProperty.getSecretId(), smsProperty.getSecretKey());// 實(shí)例化一個 http 選項(xiàng),可選,無特殊需求時可以跳過HttpProfile httpProfile = new HttpProfile();httpProfile.setReqMethod("POST");httpProfile.setConnTimeout(60);/* SDK 默認(rèn)使用 POST 方法。* 如需使用 GET 方法,可以在此處設(shè)置,但 GET 方法無法處理較大的請求 */httpProfile.setEndpoint(smsProperty.getEndpoint());/* 非必要步驟:* 實(shí)例化一個客戶端配置對象,可以指定超時時間等配置 */ClientProfile clientProfile = new ClientProfile();/* SDK 默認(rèn)用 TC3-HMAC-SHA256 進(jìn)行簽名* 非必要請不要修改該字段 */clientProfile.setSignMethod("HmacSHA256");clientProfile.setHttpProfile(httpProfile);SmsClient client = new SmsClient(cred, smsProperty.getRegion(),clientProfile);return client;}}新建短信服務(wù)類
新建SmsService類,并在該類中完成生成隨機(jī)碼、參照SDK發(fā)送短信API文檔組裝發(fā)送短信請求參數(shù),調(diào)用SmsClient類bean完成發(fā)送短信和RedisTemplate類bean完成手機(jī)驗(yàn)證碼限時存儲。
@Service public class SmsService {private static final Logger logger = LoggerFactory.getLogger(SmsService.class);@Resourceprivate SmsProperty smsProperty;@Resourceprivate SmsClient smsClient;@Resourceprivate RedisTemplate<String, Object> redisTemplate;public SendSmsResponse sendLoginVeryCodeMessage(String phoneNum) {logger.info("secretId={}, secretKey={}", smsProperty.getSecretId(), smsProperty.getSecretKey());SendSmsRequest req = new SendSmsRequest();req.setSenderId(null);req.setSessionContext(null);// 因從配置屬性中獲取中文內(nèi)容出現(xiàn)亂碼改為在代碼中把簽名內(nèi)容寫死req.setSign("阿福談Java技術(shù)棧");req.setSmsSdkAppid(smsProperty.getAppid());req.setTemplateID(SmsEnum.PHONE_CODE_LOGIN.getTemplateId());req.setPhoneNumberSet(new String[]{phoneNum});String verifyCode = getCode();String[] params = new String[]{verifyCode, "10"};req.setTemplateParamSet(params);logger.info("req={}", JSON.toJSONString(req));try {SendSmsResponse res = smsClient.SendSms(req);if ("Ok".equals(res.getSendStatusSet()[0].getCode())) {// 發(fā)送短信驗(yàn)證碼成功則將驗(yàn)證碼保存到redis緩存中redisTemplate.opsForValue().set("loginVerifyCode:"+phoneNum, verifyCode, 10, TimeUnit.MINUTES);}return res;} catch (TencentCloudSDKException e) {logger.error("send message failed", e);throw new RuntimeException("send message failed, caused by " + e.getMessage());}}/*** 生成6位隨機(jī)數(shù)字驗(yàn)證碼* @return*/private String getCode() {String numbers = "1234567890";StringBuilder builder = new StringBuilder();Random random = new Random();for(int i=0; i<6; i++) {int index = random.nextInt(10);builder.append(numbers.charAt(index));}return builder.toString();} }完成發(fā)送短信驗(yàn)證碼控制器方法
在UserController類中添加發(fā)送短信驗(yàn)證碼方法
@Resourceprivate SmsService smsService;@RequestMapping(value="sendLoginVerifyCode", method = RequestMethod.POST)@ApiOperation(value = "sendLoginVerifyCode", notes = "發(fā)送登錄短信驗(yàn)證碼")@ApiImplicitParam(name="paramMap", value = "入?yún)ap", required = true, paramType = "body", dataTypeClass=HashMap.class)public RespBean<Map<String, Object>> sendLoginVerifyCode(@RequestBody Map<String, String> paramMap) {String phoneNumber = paramMap.get("phoneNumber");SendSmsResponse response = smsService.sendLoginVeryCodeMessage(phoneNumber);SendStatus[] statuses = response.getSendStatusSet();Map<String, Object> resultMap = new HashMap<>();resultMap.put("code", statuses[0].getCode());resultMap.put("message", statuses[0].getMessage());resultMap.put("phoneNumber", statuses[0].getPhoneNumber());resultMap.put("fee", statuses[0].getFee());RespBean<Map<String, Object>> respBean = new RespBean<>(200, "success");respBean.setData(resultMap);return respBean;}測試發(fā)送短信驗(yàn)證碼效果
為方便測試,在啟動項(xiàng)目測試發(fā)送短信驗(yàn)證碼接口前我們需要在spring-security配置類WebSecurityConfig中放開對這個接口的攔截
@Overrideprotected void configure(HttpSecurity http) throws Exception {// 配置跨域http.cors().configurationSource(corsConfigurationSource());// 禁用spring security框架的退出登錄,使用自定義退出登錄http.logout().disable();http.authorizeRequests().antMatchers("/user/reg").anonymous().antMatchers("/sendLoginVerifyCode").anonymous()//......省略其他代碼}啟動項(xiàng)目后在postman中測試發(fā)送短信驗(yàn)證碼接口
POST http://localhost:8081/blog/sendLoginVerifyCode {"phoneNumber": "+86-18682244076" }注意發(fā)送國內(nèi)短信時,手機(jī)號碼參數(shù)前需要加上+86代表地區(qū)為中國大陸
點(diǎn)擊postman右上角的Send按鈕響應(yīng)信息如下, data中的code字段為OK代表發(fā)送成功
{"status": 200,"msg": "success","data": {"code": "Ok","phoneNumber": "+8618682244076","fee": 1,"message": "send success"} }手機(jī)號碼18682244076的手機(jī)上也收到了驗(yàn)證碼信息:
好了,本文就分享到這里了。本文源碼已上傳到gitee代碼倉庫,倉庫地址:
https://gitee.com/heshengfu1211/blogserver.git
更多有關(guān)實(shí)現(xiàn)短信功能的使用示例大家可以移步到騰訊云短信服務(wù)SDK中心
查看。最后祝所有讀者朋友們都過個紅紅火火、開開心心的大年!
本文首發(fā)個人微信公眾號【阿福談Web編程】,歡迎CSDN上的讀者加個微信公眾號關(guān)注,讓我們一起在技術(shù)的路上前行不孤獨(dú)!
下面給騰訊云的新春鉅惠活動產(chǎn)品做個推廣,有需要購買相關(guān)騰訊云產(chǎn)品的朋友可以通過下面的鏈接下單
【騰訊云】代金券、域名提前享,更多爆品、新春好禮2月中旬開啟,敬請期待!
【騰訊云】熱門云產(chǎn)品首單特惠秒殺,1核2G云服務(wù)器首年38元
【騰訊云】境外1核2G服務(wù)器低至2折,半價續(xù)費(fèi)券限量免費(fèi)領(lǐng)取!
【騰訊云】星星海SA2云服務(wù)器,1核2G首年99元起,高性價比首選
【騰訊云】推廣者專屬福利,新客戶無門檻領(lǐng)取總價值高達(dá)2860元代金券,每種代金券限量500張,先到先得。
【騰訊云】中小企業(yè)福利專場,多款剛需產(chǎn)品,滿足企業(yè)通用場景需求,云服務(wù)器2.5折起
【騰訊云】云開發(fā)CloudBase,一站式高效開發(fā)平臺,新用戶選購低至0元
【騰訊云】ElasticSearch新用戶特惠,快速實(shí)現(xiàn)日志分析、應(yīng)用搜索,首購低至4折
【騰訊云】騰訊云數(shù)據(jù)庫性能卓越穩(wěn)定可靠,為您解決數(shù)據(jù)庫運(yùn)維難題
【騰訊云】騰訊云圖,像PPT一樣簡單的數(shù)據(jù)可視化工具。5元搞定數(shù)據(jù)可視化,模板豐富,拖拖拽拽就能做出好看的可視化大屏。
【騰訊云】視頻通信爆款 9.9 元起, 提供電商、教育、社交娛樂等多行業(yè)多場景的一站式解決方案,最快 1 天布局火爆賽道
【騰訊云】即時通信 IM 首購 1 折特惠,僅需99.9元/月,支持直播電商、在線教育等多種熱門應(yīng)用場景
【騰訊云】9.9元體驗(yàn)2萬分鐘實(shí)時音視頻通話,支持1對1或多人音視頻通話,單房可支持300人同時在線,10萬人同時觀看;全平臺互通高品質(zhì)通話
【騰訊云】云數(shù)據(jù)庫MySQL基礎(chǔ)版1元體驗(yàn),為中小企業(yè)量身打造,單節(jié)點(diǎn)架構(gòu),保證數(shù)據(jù)可靠性
【騰訊云】專業(yè)版APP加固特惠5折起,可享免費(fèi)兼容性測試
【騰訊云】新客戶首購 TPNS 特惠9.8元/萬 DAU,新老客戶低至6.5折,給您提供快速、穩(wěn)定、安全、高效的用戶促活利器
總結(jié)
以上是生活随笔為你收集整理的SpringBoot项目中快速集成腾讯云短信服务SDK实现手机验证码功能的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【精华】拒绝国外IP海外IP访问的几种方
- 下一篇: Eclipse的下载Spring Too