一文看懂springboot實(shí)現(xiàn)短信服務(wù)功能
前言
上一篇講了springboot 集成郵件服務(wù),接下來讓我們一起學(xué)習(xí)下springboot項(xiàng)目中怎么使用短信服務(wù)吧。
項(xiàng)目中的短信服務(wù)基本上上都會(huì)用到,簡單的注冊(cè)驗(yàn)證碼,消息通知等等都會(huì)用到。所以我這個(gè)腳手架也打算將短息服務(wù)繼承進(jìn)來。
短息服務(wù)我使用的平臺(tái)是阿里云的。網(wǎng)上有很多的短信服務(wù)提供商。大家可以根據(jù)自己的需求進(jìn)行選擇。
準(zhǔn)備工作
在阿里云上開通服務(wù),以及進(jìn)行配置。這些阿里云官方文檔都寫的很清楚,怎么做就不細(xì)說的,大家可以參考一下這篇文章:
http://www.dhdzp.com/article/171902.htm
配置好之后你需要獲取如下信息:
accessKeyId 、accessSecret 這兩個(gè)是秘鑰。在用戶AccessKey 中可以找到。
signName 是簽名名稱。

templateCode 是模版code

添加依賴和配置
有了上面的準(zhǔn)備工作,我們接下來開始在我們的項(xiàng)目中開發(fā)吧。一樣的先在pom.xml 文件中加入依賴:
<!--阿里云短信服務(wù)--> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.1.0</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.61</version> </dependency>
這個(gè)fastjson 不是必須的,就看你項(xiàng)目中有沒有用到啦,沒有用到的話,添加第一個(gè)依賴就好了。
然后在application.properties文件中加入配置,這四個(gè)參數(shù),就是準(zhǔn)備工作中我們獲取的四個(gè)參數(shù)。

service 層
和郵件服務(wù)一樣,我們這里沒有涉及到數(shù)據(jù)庫,就先直接寫service 層,創(chuàng)建SmsService 接口和 SmsServiceImpl 類。

SmsServiceImpl的代碼如下:
@Service
@Slf4j
public class SmsServiceImpl implements SmsService {
@Value("${sms.accessKeyId}")
private String accessKeyId;
@Value("${sms.accessSecret}")
private String accessSecret;
@Value("${sms.signName}")
private String signName;
@Value("${sms.templateCode}")
private String templateCode;
@Override
public boolean sendSms(String iponeNUmber) {
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessSecret);
IAcsClient client = new DefaultAcsClient(profile);
CommonRequest request = new CommonRequest();
request.setMethod(MethodType.POST);
request.setDomain("dysmsapi.aliyuncs.com");
request.setVersion("2017-05-25");
request.setAction("SendSms");
request.putQueryParameter("RegionId", "cn-hangzhou");
request.putQueryParameter("PhoneNumbers", iponeNUmber);
request.putQueryParameter("SignName", signName);
request.putQueryParameter("TemplateCode", templateCode);
JSONObject object=new JSONObject();
String randCode=getRandCode(6);
log.info("驗(yàn)證碼為:{}",randCode);
object.put("code",randCode);
request.putQueryParameter("TemplateParam", object.toJSONString());
try {
CommonResponse response = client.getCommonResponse(request);
log.info(response.getData());
return true;
} catch (Exception e) {
log.error("{}",e);
}
return false;
}
/**
* 生成隨機(jī)驗(yàn)證碼
* @param digits
* @return
*/
public static String getRandCode(int digits) {
StringBuilder sBuilder = new StringBuilder();
Random rd = new Random((new Date()).getTime());
for(int i = 0; i < digits; ++i) {
sBuilder.append(String.valueOf(rd.nextInt(9)));
}
return sBuilder.toString();
}
}
整體的代碼邏輯很簡單,首先是通過Value注解將配置文件中配置的那四個(gè)參數(shù)獲取到。
sendSms()方法中 :
DefaultProfile 和 IAcsClient 是創(chuàng)建DefaultAcsClient實(shí)例并初始化。三個(gè)參數(shù)分別對(duì)應(yīng)的是:地域ID,RAM賬號(hào)的AccessKey ID, RAM賬號(hào)AccessKey Secret。
DescribeInstancesRequest 是創(chuàng)建API請(qǐng)求并設(shè)置參數(shù)。request.putQueryParamete()我們修改主要是修改這里面的參數(shù)。PhoneNumbers 是接收信息的手機(jī)號(hào),這里我發(fā)送的是短信驗(yàn)證碼。所以我這里生成一個(gè)6位的短息驗(yàn)證碼。具體需求大家可以根據(jù)需求進(jìn)行調(diào)整。
controller 層
controller 層比較簡單,就一個(gè)發(fā)送短信的接口,在sms包下創(chuàng)建SmsController類,代碼如下:
@RestController
@RequestMapping("/sms")
public class SmsController {
@Autowired
private SmsService smsService;
@RequestMapping(value = "/send",method = RequestMethod.GET)
public String sendSms(@RequestParam(value = "userName")String userName){
smsService.sendSms(userName);
return "success";
}
}
測(cè)試
到此為止,短信服務(wù)已經(jīng)搭建好了,現(xiàn)在我們來測(cè)試一下,我們首先啟動(dòng)項(xiàng)目,然后調(diào)用接口:
http://localhost:9090/zlflovemm/sms/send?userName=13265459362
然后看下日志

看看到我們的手機(jī)上收到了短信。

可以看到短信服務(wù)是配置成功了的。整體來說沒有我們想象中的那么復(fù)雜。
番外
好了,就說這么多啦,今天項(xiàng)目的代碼也同步到github 上啦。
github地址: ttps://github.com/QuellanAn/zlflovemm
總結(jié)
以上所述是小編給大家介紹的springboot實(shí)現(xiàn)短信服務(wù)功能,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
相關(guān)文章
MybatisPlus:使用SQL保留字(關(guān)鍵字)的操作
這篇文章主要介紹了MybatisPlus:使用SQL保留字(關(guān)鍵字)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-11-11
Java數(shù)據(jù)敏感詞轉(zhuǎn)換成符號(hào)的方法詳解
在某個(gè)論壇下用戶可以隨意留言,為了防止不法分子在網(wǎng)上任意沖浪,需要對(duì)一些敏感詞匯進(jìn)行一些校驗(yàn),所以這篇文章給大家介紹了Java數(shù)據(jù)敏感詞轉(zhuǎn)換成符號(hào)的方法,需要的朋友可以參考下2024-03-03
Java連接mysql數(shù)據(jù)庫以及mysql驅(qū)動(dòng)jar包下載和使用方法
這篇文章主要給大家介紹了關(guān)于Java連接mysql數(shù)據(jù)庫以及mysql驅(qū)動(dòng)jar包下載和使用方法,MySQL是一款常用的關(guān)系型數(shù)據(jù)庫,它的JDBC驅(qū)動(dòng)程序使得我們可以通過Java程序連接MySQL數(shù)據(jù)庫進(jìn)行數(shù)據(jù)操作,需要的朋友可以參考下2023-11-11
Java中Maven項(xiàng)目導(dǎo)出jar包配置的示例代碼
這篇文章主要介紹了Java中Maven項(xiàng)目導(dǎo)出jar包配置的示例代碼,需要的朋友可以參考下2018-11-11
idea配置檢查XML中SQL語法及書寫sql語句智能提示的方法
idea連接了數(shù)據(jù)庫,也可以執(zhí)行SQL查到數(shù)據(jù),但是無法識(shí)別sql語句中的表導(dǎo)致沒有提示,下面這篇文章主要給大家介紹了關(guān)于idea配置檢查XML中SQL語法及書寫sql語句智能提示的相關(guān)資料,需要的朋友可以參考下2023-03-03
JAVA WEB中Servlet和Servlet容器的區(qū)別
這篇文章主要介紹了JAVA WEB中Servlet和Servlet容器的區(qū)別,文中示例代碼非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解下2020-06-06

