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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java实现短信验证码(阿里云短信服务)

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

前言:

很多時(shí)候我們做的項(xiàng)目都需要上圖這樣的驗(yàn)證碼來幫助我們完成更好的功能,比如:什么登錄注冊,忘記密碼需要發(fā)送手機(jī)驗(yàn)證碼之類的啊...下面分享我今天通過阿里云短信服務(wù)實(shí)現(xiàn)的短信驗(yàn)證碼,操作都很簡單,跟著步驟來就好了

可參考阿里云官網(wǎng)使用 -->?阿里云短信服務(wù)文檔使用指引? ? ?

我也把我自己實(shí)現(xiàn)的步驟分享在了下面,看不懂官網(wǎng)文檔的也可以參考一下我是怎么實(shí)現(xiàn)的哦~~


第一步:登錄阿里云官網(wǎng)? 控制臺中找到短信服務(wù)然后開通

第二步:獲取AccessKey

將鼠標(biāo)置于頁面右上方的賬號圖標(biāo),然后單擊accesskeys。

注意:若開通編程訪問,請及時(shí)保存AccessKey 信息,頁面關(guān)閉后將無法再次獲取信息。

然后給短信服務(wù)配置權(quán)限

第三步:創(chuàng)建簽名和模版

提交之后等待審核通過即可

添加模板

等待審核通過


等待審核通過之后就可以進(jìn)行下面的操作體驗(yàn)效果了哦~??

注意:代碼中需要上面第三步中提供的?簽名名稱?和?模版CODE?以及第二步RAM訪問控制中的?AccessKeyID?和?AccessKeySecret??


代碼部分:

可參考阿里云文檔配置?:SDK及DEMO下載 - 短信服務(wù) - 阿里云

Java的可以下載demo學(xué)習(xí),或者直接參考我下面給出的案例哦~

第一步:pom文件引入所需依賴包?(溫馨小提示:這里我是maven項(xiàng)目的引入方式)

  • <!-- 阿里云短信服務(wù)所需 -->

  • <dependency>

  • <groupId>com.aliyun</groupId>

  • <artifactId>aliyun-java-sdk-core</artifactId>

  • <version>4.0.6</version> <!-- 注:如提示報(bào)錯(cuò),先升級基礎(chǔ)包版,無法解決可聯(lián)系技術(shù)支持 -->

  • </dependency>

  • <dependency>

  • <groupId>com.aliyun</groupId>

  • <artifactId>aliyun-java-sdk-dysmsapi</artifactId>

  • <version>1.1.0</version>

  • </dependency>

  • 第二步:測試代碼??(一把梭 直接將這個(gè)類拷到自己項(xiàng)目中測試能不能使用,最后再根據(jù)自己的需求修改去實(shí)現(xiàn)登錄注冊 忘記密碼 等發(fā)送手機(jī)驗(yàn)證碼等功能之類的啊...)

  • /**

  • * 阿里云短信服務(wù):

  • * 注意:需要 簽名名稱、模版CODE 以及 RAM訪問控制中的 AccessKeyID 和 AccessKeySecret??

  • */

  • public class AliyunSmsUtils {

  • //產(chǎn)品名稱:云通信短信API產(chǎn)品,開發(fā)者無需替換

  • static final String product = "Dysmsapi";

  • //產(chǎn)品域名,開發(fā)者無需替換

  • static final String domain = "dysmsapi.aliyuncs.com";

  • // TODO 此處需要替換成開發(fā)者自己的AK(在阿里云訪問控制臺尋找)

  • static final String accessKeyId = "yourAccessKeyId"; // TODO 修改成自己的

  • static final String accessKeySecret = "yourAccessKeySecret"; // TODO 修改成自己的

  • public static SendSmsResponse sendSms(String telephone, String code) throws ClientException {

  • //可自助調(diào)整超時(shí)時(shí)間

  • System.setProperty("sun.net.client.defaultConnectTimeout", "10000");

  • System.setProperty("sun.net.client.defaultReadTimeout", "10000");

  • //初始化acsClient,暫不支持region化

  • IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);

  • DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);

  • IAcsClient acsClient = new DefaultAcsClient(profile);

  • //組裝請求對象-具體描述見控制臺-文檔部分內(nèi)容

  • SendSmsRequest request = new SendSmsRequest();

  • //必填:待發(fā)送手機(jī)號

  • request.setPhoneNumbers(telephone);

  • //必填:短信簽名-可在短信控制臺中找到

  • request.setSignName("xxx"); // TODO 修改成自己的

  • //必填:短信模板-可在短信控制臺中找到

  • request.setTemplateCode("SMS_xxx"); // TODO 修改成自己的

  • //可選:模板中的變量替換JSON串,如模板內(nèi)容為"親愛的${name},您的驗(yàn)證碼為${code}"時(shí),此處的值為

  • // request.setTemplateParam("{\"name\":\"Tom\", \"code\":\"123\"}");

  • request.setTemplateParam("{\"code\":\"" + code + "\"}");

  • //選填-上行短信擴(kuò)展碼(無特殊需求用戶請忽略此字段)

  • //request.setSmsUpExtendCode("90997");

  • //可選:outId為提供給業(yè)務(wù)方擴(kuò)展字段,最終在短信回執(zhí)消息中將此值帶回給調(diào)用者

  • request.setOutId("yourOutId");

  • //hint 此處可能會(huì)拋出異常,注意catch

  • SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);

  • if(sendSmsResponse.getCode()!= null && sendSmsResponse.getCode().equals("OK")){

  • System.out.println("短信發(fā)送成功!");

  • }else {

  • System.out.println("短信發(fā)送失敗!");

  • }

  • return sendSmsResponse;

  • }

  • /* 不刪 留著 以后可能有用

  • public static QuerySendDetailsResponse querySendDetails(String bizId) throws ClientException {

  • //可自助調(diào)整超時(shí)時(shí)間

  • System.setProperty("sun.net.client.defaultConnectTimeout", "10000");

  • System.setProperty("sun.net.client.defaultReadTimeout", "10000");

  • //初始化acsClient,暫不支持region化

  • IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);

  • DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);

  • IAcsClient acsClient = new DefaultAcsClient(profile);

  • //組裝請求對象

  • QuerySendDetailsRequest request = new QuerySendDetailsRequest();

  • //必填-號碼

  • request.setPhoneNumber("15000000000");

  • //可選-流水號

  • request.setBizId(bizId);

  • //必填-發(fā)送日期 支持30天內(nèi)記錄查詢,格式y(tǒng)yyyMMdd

  • SimpleDateFormat ft = new SimpleDateFormat("yyyyMMdd");

  • request.setSendDate(ft.format(new Date()));

  • //必填-頁大小

  • request.setPageSize(10L);

  • //必填-當(dāng)前頁碼從1開始計(jì)數(shù)

  • request.setCurrentPage(1L);

  • //hint 此處可能會(huì)拋出異常,注意catch

  • QuerySendDetailsResponse querySendDetailsResponse = acsClient.getAcsResponse(request);

  • return querySendDetailsResponse;

  • }

  • */

  • //以下為測試代碼,隨機(jī)生成驗(yàn)證碼

  • private static int newcode;

  • public static int getNewcode() {

  • return newcode;

  • }

  • public static void setNewcode(){

  • newcode = (int)(Math.random()*9999)+100; //每次調(diào)用生成一位四位數(shù)的隨機(jī)數(shù)

  • }

  • public static void main(String[] args) throws ClientException, InterruptedException {

  • setNewcode();

  • String code = Integer.toString(getNewcode());

  • System.out.println("發(fā)送的驗(yàn)證碼為:"+code);

  • //發(fā)短信

  • SendSmsResponse response =sendSms("xxx",code); // TODO 填寫你需要測試的手機(jī)號碼

  • System.out.println("短信接口返回的數(shù)據(jù)----------------");

  • System.out.println("Code=" + response.getCode());

  • System.out.println("Message=" + response.getMessage());

  • System.out.println("RequestId=" + response.getRequestId());

  • System.out.println("BizId=" + response.getBizId());

  • /* 不刪 留著 以后可能有用

  • System.out.println(" ============================================== ");

  • Thread.sleep(3000L);

  • //查明細(xì)

  • if(response.getCode() != null && response.getCode().equals("OK")) {

  • QuerySendDetailsResponse querySendDetailsResponse = querySendDetails(response.getBizId());

  • System.out.println("短信明細(xì)查詢接口返回?cái)?shù)據(jù)----------------");

  • System.out.println("Code=" + querySendDetailsResponse.getCode());

  • System.out.println("Message=" + querySendDetailsResponse.getMessage());

  • int i = 0;

  • for(QuerySendDetailsResponse.SmsSendDetailDTO smsSendDetailDTO : querySendDetailsResponse.getSmsSendDetailDTOs())

  • {

  • System.out.println("SmsSendDetailDTO["+i+"]:");

  • System.out.println("Content=" + smsSendDetailDTO.getContent());

  • System.out.println("ErrCode=" + smsSendDetailDTO.getErrCode());

  • System.out.println("OutId=" + smsSendDetailDTO.getOutId());

  • System.out.println("PhoneNum=" + smsSendDetailDTO.getPhoneNum());

  • System.out.println("ReceiveDate=" + smsSendDetailDTO.getReceiveDate());

  • System.out.println("SendDate=" + smsSendDetailDTO.getSendDate());

  • System.out.println("SendStatus=" + smsSendDetailDTO.getSendStatus());

  • System.out.println("Template=" + smsSendDetailDTO.getTemplateCode());

  • }

  • System.out.println("TotalCount=" + querySendDetailsResponse.getTotalCount());

  • System.out.println("RequestId=" + querySendDetailsResponse.getRequestId());

  • }*/

  • }

  • }

  • 運(yùn)行效果:

    最后發(fā)送到我手機(jī)的短信效果圖:

    云服務(wù)器搭載業(yè)務(wù),選擇合適的平臺最重要!

    從目前國內(nèi)云計(jì)算市場的格局來看,國內(nèi)云計(jì)算前三強(qiáng)分別是阿里云、騰訊云和華為云,阿里云、騰訊云作為背靠互聯(lián)網(wǎng)平臺的企業(yè),更偏向于B端用戶;華為與作為傳統(tǒng)的通信巨頭,更偏向于G端。

    當(dāng)然如何選擇服務(wù)器機(jī)型,這里有篇文檔匯總的比較詳細(xì),文檔地址:

    云服務(wù)器哪家好!2021年阿里云、騰訊云、華為云的服務(wù)器配置及價(jià)格對比??

    如果是高并發(fā),高IO業(yè)務(wù)場景,需要確定服務(wù)器規(guī)格,可讓業(yè)務(wù)應(yīng)用性能發(fā)揮到最佳,參考官方文檔:

    阿里云服務(wù)器規(guī)格:規(guī)格實(shí)例族 - 云服務(wù)器 ECS

    騰訊云服務(wù)器規(guī)格:規(guī)格實(shí)例族 - 云服務(wù)器CVM

    總結(jié)

    以上是生活随笔為你收集整理的Java实现短信验证码(阿里云短信服务)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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