Java实现短信验证码(阿里云短信服务)
前言:
很多時候我們做的項目都需要上圖這樣的驗證碼來幫助我們完成更好的功能,比如:什么登錄注冊,忘記密碼需要發送手機驗證碼之類的啊...下面分享我今天通過阿里云短信服務實現的短信驗證碼,操作都很簡單,跟著步驟來就好了
可參考阿里云官網使用 -->?阿里云短信服務文檔使用指引? ? ?
我也把我自己實現的步驟分享在了下面,看不懂官網文檔的也可以參考一下我是怎么實現的哦~~
第一步:登錄阿里云官網? 控制臺中找到短信服務然后開通
第二步:獲取AccessKey
將鼠標置于頁面右上方的賬號圖標,然后單擊accesskeys。
注意:若開通編程訪問,請及時保存AccessKey 信息,頁面關閉后將無法再次獲取信息。
然后給短信服務配置權限
第三步:創建簽名和模版
提交之后等待審核通過即可
添加模板
等待審核通過
等待審核通過之后就可以進行下面的操作體驗效果了哦~??
注意:代碼中需要上面第三步中提供的?簽名名稱?和?模版CODE?以及第二步RAM訪問控制中的?AccessKeyID?和?AccessKeySecret??
代碼部分:
可參考阿里云文檔配置?:SDK及DEMO下載 - 短信服務 - 阿里云
Java的可以下載demo學習,或者直接參考我下面給出的案例哦~
第一步:pom文件引入所需依賴包?(溫馨小提示:這里我是maven項目的引入方式)
<!-- 阿里云短信服務所需 -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.0.6</version> <!-- 注:如提示報錯,先升級基礎包版,無法解決可聯系技術支持 -->
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>1.1.0</version>
</dependency>
第二步:測試代碼??(一把梭 直接將這個類拷到自己項目中測試能不能使用,最后再根據自己的需求修改去實現登錄注冊 忘記密碼 等發送手機驗證碼等功能之類的啊...)
/**
* 阿里云短信服務:
* 注意:需要 簽名名稱、模版CODE 以及 RAM訪問控制中的 AccessKeyID 和 AccessKeySecret??
*/
public class AliyunSmsUtils {
//產品名稱:云通信短信API產品,開發者無需替換
static final String product = "Dysmsapi";
//產品域名,開發者無需替換
static final String domain = "dysmsapi.aliyuncs.com";
// TODO 此處需要替換成開發者自己的AK(在阿里云訪問控制臺尋找)
static final String accessKeyId = "yourAccessKeyId"; // TODO 修改成自己的
static final String accessKeySecret = "yourAccessKeySecret"; // TODO 修改成自己的
public static SendSmsResponse sendSms(String telephone, String code) throws ClientException {
//可自助調整超時時間
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);
//組裝請求對象-具體描述見控制臺-文檔部分內容
SendSmsRequest request = new SendSmsRequest();
//必填:待發送手機號
request.setPhoneNumbers(telephone);
//必填:短信簽名-可在短信控制臺中找到
request.setSignName("xxx"); // TODO 修改成自己的
//必填:短信模板-可在短信控制臺中找到
request.setTemplateCode("SMS_xxx"); // TODO 修改成自己的
//可選:模板中的變量替換JSON串,如模板內容為"親愛的${name},您的驗證碼為${code}"時,此處的值為
// request.setTemplateParam("{\"name\":\"Tom\", \"code\":\"123\"}");
request.setTemplateParam("{\"code\":\"" + code + "\"}");
//選填-上行短信擴展碼(無特殊需求用戶請忽略此字段)
//request.setSmsUpExtendCode("90997");
//可選:outId為提供給業務方擴展字段,最終在短信回執消息中將此值帶回給調用者
request.setOutId("yourOutId");
//hint 此處可能會拋出異常,注意catch
SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
if(sendSmsResponse.getCode()!= null && sendSmsResponse.getCode().equals("OK")){
System.out.println("短信發送成功!");
}else {
System.out.println("短信發送失敗!");
}
return sendSmsResponse;
}
/* 不刪 留著 以后可能有用
public static QuerySendDetailsResponse querySendDetails(String bizId) throws ClientException {
//可自助調整超時時間
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);
//必填-發送日期 支持30天內記錄查詢,格式yyyyMMdd
SimpleDateFormat ft = new SimpleDateFormat("yyyyMMdd");
request.setSendDate(ft.format(new Date()));
//必填-頁大小
request.setPageSize(10L);
//必填-當前頁碼從1開始計數
request.setCurrentPage(1L);
//hint 此處可能會拋出異常,注意catch
QuerySendDetailsResponse querySendDetailsResponse = acsClient.getAcsResponse(request);
return querySendDetailsResponse;
}
*/
//以下為測試代碼,隨機生成驗證碼
private static int newcode;
public static int getNewcode() {
return newcode;
}
public static void setNewcode(){
newcode = (int)(Math.random()*9999)+100; //每次調用生成一位四位數的隨機數
}
public static void main(String[] args) throws ClientException, InterruptedException {
setNewcode();
String code = Integer.toString(getNewcode());
System.out.println("發送的驗證碼為:"+code);
//發短信
SendSmsResponse response =sendSms("xxx",code); // TODO 填寫你需要測試的手機號碼
System.out.println("短信接口返回的數據----------------");
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);
//查明細
if(response.getCode() != null && response.getCode().equals("OK")) {
QuerySendDetailsResponse querySendDetailsResponse = querySendDetails(response.getBizId());
System.out.println("短信明細查詢接口返回數據----------------");
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());
}*/
}
}
運行效果:
最后發送到我手機的短信效果圖:
云服務器搭載業務,選擇合適的平臺最重要!
從目前國內云計算市場的格局來看,國內云計算前三強分別是阿里云、騰訊云和華為云,阿里云、騰訊云作為背靠互聯網平臺的企業,更偏向于B端用戶;華為與作為傳統的通信巨頭,更偏向于G端。
當然如何選擇服務器機型,這里有篇文檔匯總的比較詳細,文檔地址:
云服務器哪家好!2021年阿里云、騰訊云、華為云的服務器配置及價格對比??
如果是高并發,高IO業務場景,需要確定服務器規格,可讓業務應用性能發揮到最佳,參考官方文檔:
阿里云服務器規格:規格實例族 - 云服務器 ECS
騰訊云服務器規格:規格實例族 - 云服務器CVM
總結
以上是生活随笔為你收集整理的Java实现短信验证码(阿里云短信服务)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 模型实践 | 高精地图构建模型HDMap
- 下一篇: 【六袆 - 点赞】简历字体和字号规范