前言
上一篇講了 springboot 集成郵件服務,接下來讓我們一起學習下springboot項目中怎麼使用短信服務吧。
項目中的短信服務基本上上都會用到,簡單的註冊驗證碼,消息通知等等都會用到。所以我這個腳手架也打算將短息服務繼承進來。
短息服務我使用的平臺是阿里雲的。網上有很多的短信服務提供商。大家可以根據自己的需求進行選擇。
準備工作
在阿里雲上開通服務,以及進行配置。這些阿里雲官方文檔都寫的很清楚,怎麼做就不細說的,大家可以參考一下這篇文章:
https://blog.csdn.net/qq_27790011/article/details/78339856
配置好之後你需要獲取如下信息:
accessKeyId 、accessSecret 這兩個是祕鑰。在用戶AccessKey 中可以找到。
signName 是簽名名稱。
templateCode 是模版code
添加依賴和配置
有了上面的準備工作,我們接下來開始在我們的項目中開發吧。一樣的先在pom.xml 文件中加入依賴:
<!--阿里雲短信服務-->
<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>
這個fastjson 不是必須的,就看你項目中有沒有用到啦,沒有用到的話,添加第一個依賴就好了。
然後在application.properties文件中加入配置,這四個參數,就是準備工作中我們獲取的四個參數。
service 層
和郵件服務一樣,我們這裏沒有涉及到數據庫,就先直接寫service 層,創建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("驗證碼爲:{}",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;
}
/**
* 生成隨機驗證碼
* @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註解將配置文件中配置的那四個參數獲取到。
sendSms()方法中 :
DefaultProfile 和 IAcsClient 是創建DefaultAcsClient實例並初始化。三個參數分別對應的是:地域ID,RAM賬號的AccessKey ID, RAM賬號AccessKey Secret。
DescribeInstancesRequest 是創建API請求並設置參數。request.putQueryParamete()我們修改主要是修改這裏面的參數。PhoneNumbers 是接收信息的手機號,這裏我發送的是短信驗證碼。所以我這裏生成一個6位的短息驗證碼。具體需求大家可以根據需求進行調整。
controller 層
controller 層比較簡單,就一個發送短信的接口,在sms包下創建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";
}
}
測試
到此爲止,短信服務已經搭建好了,現在我們來測試一下,我們首先啓動項目,然後調用接口:
http://localhost:9090/zlflovemm/sms/send?userName=13265459362
然後看下日誌
看看到我們的手機上收到了短信。
可以看到短信服務是配置成功了的。整體來說沒有我們想象中的那麼複雜。
番外
好了,就說這麼多啦,今天項目的代碼也同步到github 上啦。
github地址:https://github.com/QuellanAn/zlflovemm
後續加油♡
歡迎大家關注個人公衆號 “程序員愛酸奶”
分享各種學習資料,包含java,linux,大數據等。資料包含視頻文檔以及源碼,同時分享本人及投遞的優質技術博文。
如果大家喜歡記得關注和分享喲❤