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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

编程问答

腾讯云实现短信验证码登录

發(fā)布時(shí)間:2023/12/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 腾讯云实现短信验证码登录 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

騰訊云實(shí)現(xiàn)短信驗(yàn)證碼登錄

    • 騰訊云配置
    • 后端邏輯實(shí)現(xiàn)

騰訊云配置

首先在騰訊云搜索短信

然后按要求創(chuàng)建短信簽名,短信模板。短信模板很容易審核,但是簽名比較復(fù)雜,需要按要求填寫和上傳相關(guān)信息。如果駁回可以查看哪里出問(wèn)題,然后繼續(xù)提交審核。

成功以后可以查看,要記住簽名內(nèi)容,下面會(huì)用到。

都創(chuàng)建成功以后就可以編寫后端代碼了

后端邏輯實(shí)現(xiàn)

在pom.xml中導(dǎo)入依賴

<!--騰訊云短信--><dependency><groupId>com.tencentcloudapi</groupId><artifactId>tencentcloud-sdk-java</artifactId><version>3.1.284</version></dependency><dependency><groupId>com.github.qcloudsms</groupId><artifactId>qcloudsms</artifactId><version>1.0.6</version></dependency>

在yml中配置信息

tencent:msm:id: 填入自己的訪問(wèn)秘鑰,位置在右上角點(diǎn)擊個(gè)人頭像->選擇訪問(wèn)管理->新建秘鑰secret: 上面查到的第二個(gè)信息, 這個(gè)是secretkeyappId: 短信控制臺(tái)頁(yè)面->左側(cè)應(yīng)用管理->應(yīng)用列表的 SDKAppIdsignName: 短信控制臺(tái)頁(yè)面->左側(cè)國(guó)內(nèi)短信->簽名管理 簽名內(nèi)容templateId: 短信控制臺(tái)頁(yè)面->左側(cè)國(guó)內(nèi)短信->正文模板管理 Id

如圖


編寫自動(dòng)生成驗(yàn)證碼的工具類,可自行修改

public class ValidateCodeUtils {/*** 隨機(jī)生成驗(yàn)證碼* @param length 長(zhǎng)度為4位或者6位* @return*/public static Integer generateValidateCode(int length){Integer code =null;if(length == 4){code = new Random().nextInt(9999);//生成隨機(jī)數(shù),最大為9999if(code < 1000){code = code + 1000;//保證隨機(jī)數(shù)為4位數(shù)字}}else if(length == 6){code = new Random().nextInt(999999);//生成隨機(jī)數(shù),最大為999999if(code < 100000){code = code + 100000;//保證隨機(jī)數(shù)為6位數(shù)字}}else{throw new RuntimeException("只能生成4位或6位數(shù)字驗(yàn)證碼");}return code;}/*** 隨機(jī)生成指定長(zhǎng)度字符串驗(yàn)證碼* @param length 長(zhǎng)度* @return*/public static String generateValidateCode4String(int length){Random rdm = new Random();String hash1 = Integer.toHexString(rdm.nextInt());String capstr = hash1.substring(0, length);return capstr;} }

然后編寫調(diào)用yml中配置的參數(shù)的工具類

@Component public class MsmConstantUtils implements InitializingBean {@Value("${tencent.msm.id}")private String secretID ;@Value("${tencent.msm.secret}")private String secretKey ;@Value("${tencent.msm.appId}")private String appId;@Value("${tencent.msm.signName}")private String signName;@Value("${tencent.msm.templateId}")private String templateId;//六個(gè)相關(guān)的參數(shù)public static String SECRET_ID;public static String SECRET_KEY;public static String APP_ID;public static String SIGN_NAME;public static String TEMPLATE_ID;@Overridepublic void afterPropertiesSet() throws Exception {SECRET_ID = secretID;SECRET_KEY = secretKey;APP_ID = appId;SIGN_NAME = signName;TEMPLATE_ID = templateId;}}

然后編寫短信發(fā)送的工具類

public class SMSUtils {public static boolean send(String phone, String code) {//判斷手機(jī)是否為nullif (StringUtils.isEmpty(phone)){return false;}try {/* 必要步驟:* 實(shí)例化一個(gè)認(rèn)證對(duì)象,入?yún)⑿枰獋魅腧v訊云賬戶密鑰對(duì) secretId 和 secretKey* 本示例采用從環(huán)境變量讀取的方式,需要預(yù)先在環(huán)境變量中設(shè)置這兩個(gè)值* 您也可以直接在代碼中寫入密鑰對(duì),但需謹(jǐn)防泄露,不要將代碼復(fù)制、上傳或者分享給他人* CAM 密鑰查詢:https://console.cloud.tencent.com/cam/capi*/Credential cred = new Credential(MsmConstantUtils.SECRET_ID, MsmConstantUtils.SECRET_KEY);// 實(shí)例化一個(gè)http選項(xiàng),可選的,沒(méi)有特殊需求可以跳過(guò)HttpProfile httpProfile = new HttpProfile();httpProfile.setEndpoint("sms.tencentcloudapi.com");// 實(shí)例化一個(gè)client選項(xiàng),可選的,沒(méi)有特殊需求可以跳過(guò)ClientProfile clientProfile = new ClientProfile();clientProfile.setHttpProfile(httpProfile);// 實(shí)例化要請(qǐng)求產(chǎn)品的client對(duì)象,clientProfile是可選的SmsClient client = new SmsClient(cred, "ap-guangzhou", clientProfile);// 實(shí)例化一個(gè)請(qǐng)求對(duì)象,每個(gè)接口都會(huì)對(duì)應(yīng)一個(gè)request對(duì)象SendSmsRequest req = new SendSmsRequest();String[] phoneNumberSet1 = {"+86"+phone};req.setPhoneNumberSet(phoneNumberSet1);req.setSmsSdkAppid(MsmConstantUtils.APP_ID);req.setSign(MsmConstantUtils.SIGN_NAME);req.setTemplateID(MsmConstantUtils.TEMPLATE_ID);String[] templateParamSet1 = {code};req.setTemplateParamSet(templateParamSet1);// 返回的resp是一個(gè)SendSmsResponse的實(shí)例,與請(qǐng)求對(duì)象對(duì)應(yīng)SendSmsResponse resp = client.SendSms(req);// 輸出 JSON 格式的字符串回包System.out.println(SendSmsResponse.toJsonString(resp));return true;} catch (TencentCloudSDKException e) {e.printStackTrace();}return false;} }

然后只需要使用SMSUtils.send(phone,code);方法即可發(fā)送短信。具體實(shí)現(xiàn)如下:

@PostMapping("/sendMsg")public Result<String> sendMsg(@RequestBody User user){//獲取手機(jī)號(hào)String phone = user.getPhone();if(StringUtils.isNotEmpty(phone)){//生成隨機(jī)的四位驗(yàn)證碼String code = ValidateCodeUtils.generateValidateCode(4).toString();log.info("code={}",code);//發(fā)送短信boolean flag = SMSUtils.send(phone,code);if (flag){//將生成的驗(yàn)證碼緩存到redis中,設(shè)置有效期五分鐘redisTemplate.opsForValue().set(phone,code,5, TimeUnit.MINUTES);return Result.success("手機(jī)驗(yàn)證碼發(fā)送成功");}}return Result.error("發(fā)送失敗");}

然后就可以運(yùn)行測(cè)試了

總結(jié)

以上是生活随笔為你收集整理的腾讯云实现短信验证码登录的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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