詳細(xì)介紹Java阿里云的短信驗(yàn)證碼實(shí)現(xiàn)
阿里云手機(jī)短信驗(yàn)證碼
第一步 登錄阿里云開放平臺(tái)
1、進(jìn)入阿里云開放平臺(tái)---->點(diǎn)擊控制臺(tái)

2、點(diǎn)擊AccessKey管理

3、點(diǎn)擊之后會(huì)彈出提示,選擇開始使用子用戶

4、新建一個(gè)用戶組,然后按要求填寫即可

5、創(chuàng)建一個(gè)用戶,按要求填寫內(nèi)容,勾選編程訪問


6、會(huì)得到AccessKey(id,密碼)
要將這個(gè)賬號(hào)保存下來!
//用戶登錄名稱 ==================== //AccessKey ID ==================== //AccessKey Secret ============================
第二步,開通阿里云短信服務(wù)
1、找到短信控制臺(tái)面板,點(diǎn)擊國(guó)內(nèi)消息

2、選擇模板管理,點(diǎn)擊添加模板

以下內(nèi)容按要求填寫即可,申請(qǐng)說明需要有正當(dāng)理由不然審核可能通不過

點(diǎn)擊提交,等待審核
3、步驟同上,點(diǎn)擊簽名管理,添加簽名
注:簽名需要填寫應(yīng)用名稱、網(wǎng)站名稱 例如:(dy學(xué)習(xí)網(wǎng)站) 個(gè)人用戶選擇適用場(chǎng)景的時(shí)候選擇驗(yàn)證碼,申請(qǐng)說明需要填寫正當(dāng)理由。不然可能審核不通過。

提交后等待審核通過即可。
第三步,編寫代碼測(cè)試
1、新建項(xiàng)目
創(chuàng)建一個(gè)Java項(xiàng)目,筆者創(chuàng)建的是SpringBoot項(xiàng)目
2、添加依賴
點(diǎn)擊快速學(xué)習(xí)——> 查看APIDemo,里面會(huì)有maven的依賴和官方的Demo

maven依賴:
<dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.5.0</version> </dependency>
3、編寫代碼
簡(jiǎn)單測(cè)試,結(jié)合了redis的使用
controller:
package com.qxx.sendmessage.controller;
import com.qxx.sendmessage.service.SendMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
/**
* @author 東亞猛男Qxx
*/
@RestController
@CrossOrigin //跨域的支持
public class Controller {
@Autowired
private SendMessage sendMessage;
@Autowired
private RedisTemplate<String,String> template;
//RestFul風(fēng)格請(qǐng)求
@GetMapping("/send/{phone}")
public String send(@PathVariable("phone") String phone){
//先看redis里面該手機(jī)號(hào)儲(chǔ)存的驗(yàn)證碼是否失效
String code = template.opsForValue().get(phone);
if (!StringUtils.isEmpty(code)){
return phone+":"+"驗(yàn)證碼尚未過期!";
}
//截取6為字符當(dāng)作驗(yàn)證碼(UUID)
code = UUID.randomUUID().toString().substring(0, 5);
HashMap<String,Object> map = new HashMap<>();
//key必須為code
map.put("code",code);
//調(diào)用service層的方法 傳兩個(gè)參數(shù):phone,map
Boolean flag = sendMessage.sendMessage(phone,map);
if (flag){
//存入redis,設(shè)置失效時(shí)間
template.opsForValue().set(phone,code,5, TimeUnit.MINUTES);
return phone+":"+"驗(yàn)證碼"+code+"發(fā)送成功!";
}
return "發(fā)送失敗";
}
}
service:
package com.qxx.sendmessage.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.qxx.sendmessage.service.SendMessage;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;
/**
* @author 東亞猛男Qxx
*/
@Service
public class SendMessageImpl implements SendMessage {
@Override
public Boolean sendMessage(String phoneNum,Map<String, Object> map) {
System.out.println(JSONObject.toJSONString(map));
//連接阿里云,第一個(gè)參數(shù)不用改變,后兩個(gè)填寫自己的accessKeyId和accessSecret
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "<accessKeyId>", "<accessSecret>");
IAcsClient client = new DefaultAcsClient(profile);
//構(gòu)建請(qǐng)求!
CommonRequest request = new CommonRequest();
request.setSysMethod(MethodType.POST);
request.setSysDomain("dysmsapi.aliyuncs.com"); //不要?jiǎng)?
request.setSysVersion("2017-05-25"); //不要?jiǎng)?
request.setSysAction("SendSms");
//自定義參數(shù)(手機(jī)號(hào),驗(yàn)證碼,簽名,模板)
request.putQueryParameter("RegionId", "cn-hangzhou");
request.putQueryParameter("PhoneNumbers", phoneNum);
request.putQueryParameter("SignName", "簽名");
request.putQueryParameter("TemplateCode", "模板(SMS-*****)");
//構(gòu)建一個(gè)短信的驗(yàn)證碼
request.putQueryParameter("TemplateParam", JSONObject.toJSONString(map));
try {
CommonResponse response = client.getCommonResponse(request);
System.out.println(response.getData());
return response.getHttpResponse().isSuccess();
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
return false;
}
}
4、測(cè)試
此處用的是postman工具

redis:

短信:

結(jié)語:
可以編寫可復(fù)用的微服務(wù)接口,來實(shí)現(xiàn)驗(yàn)證碼的發(fā)送,根據(jù)實(shí)際情況進(jìn)行封裝
到此這篇關(guān)于詳細(xì)介紹Java阿里云的短信驗(yàn)證碼實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Java阿里云短信驗(yàn)證碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MyBatisPlus?TypeHandler自定義字段類型轉(zhuǎn)換Handler
這篇文章主要為大家介紹了MyBatisPlus?TypeHandler自定義字段類型轉(zhuǎn)換Handler示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
IDEA報(bào)錯(cuò)java.lang.OutOfMemoryError:Java?heap?space的解決辦法
這篇文章主要給大家介紹了關(guān)于IDEA報(bào)錯(cuò)java.lang.OutOfMemoryError:Java?heap?space的解決辦法,出現(xiàn)這個(gè)問題的主要原因是項(xiàng)目運(yùn)行時(shí)的堆內(nèi)存不足引起的報(bào)錯(cuò),需要的朋友可以參考下2024-02-02
Java實(shí)現(xiàn)順時(shí)針輸出螺旋二維數(shù)組的方法示例
這篇文章主要介紹了利用Java如何實(shí)現(xiàn)順時(shí)針輸出螺旋二維數(shù)組的方法示例,文中給出了詳細(xì)的示例代碼和注釋,相信對(duì)大家具有一定的參考價(jià)值,有需要的朋友們下面來一起看看吧。2017-02-02
MyBatis實(shí)現(xiàn)MySQL批量插入的示例代碼
本文主要介紹了MyBatis實(shí)現(xiàn)MySQL批量插入的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05
Java8新特性之JavaFX 8_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了Java8新特性之JavaFX 8的相關(guān)知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2017-06-06
從底層源碼深入分析Spring的IoC容器的實(shí)現(xiàn)原理
IoC容器負(fù)責(zé)管理對(duì)象的生命周期和依賴關(guān)系,大大簡(jiǎn)化了應(yīng)用程序的開發(fā)和維,我們這篇文章將會(huì)從底層源碼的角度深入分析Spring的IoC容器實(shí)現(xiàn),探索它的工作原理和關(guān)鍵組件,需要的朋友可以參考下2023-07-07
手動(dòng)部署java項(xiàng)目到k8s中的實(shí)現(xiàn)
本文主要介紹了手動(dòng)部署java項(xiàng)目到k8s中的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
springboot項(xiàng)目如何設(shè)置session的過期時(shí)間
這篇文章主要介紹了springboot項(xiàng)目如何設(shè)置session的過期時(shí)間,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01


