六、springboot 簡單優雅是實現簡訊服務

  • 2019 年 10 月 14 日
  • 筆記

前言

上一篇講了 springboot 集成郵件服務,接下來讓我們一起學習下springboot項目中怎麼使用簡訊服務吧。
項目中的簡訊服務基本上上都會用到,簡單的註冊驗證碼,消息通知等等都會用到。所以我這個腳手架也打算將短息服務繼承進來。
短息服務我使用的平台是阿里雲的。網上有很多的簡訊服務提供商。大家可以根據自己的需求進行選擇。

準備工作

在阿里雲上開通服務,以及進行配置。這些阿里雲官方文檔都寫的很清楚,怎麼做就不細說的,大家可以參考一下這篇文章:
https://blog.csdn.net/qq_27790011/article/details/78339856

配置好之後你需要獲取如下資訊:

accessKeyId 、accessSecret 這兩個是秘鑰。在用戶AccessKey 中可以找到。

signName 是簽名名稱。

file

templateCode 是模版code
file

添加依賴和配置

有了上面的準備工作,我們接下來開始在我們的項目中開發吧。一樣的先在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文件中加入配置,這四個參數,就是準備工作中我們獲取的四個參數。
file

service 層

和郵件服務一樣,我們這裡沒有涉及到資料庫,就先直接寫service 層,創建SmsService 介面和 SmsServiceImpl 類。

file

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

然後看下日誌

file

看看到我們的手機上收到了簡訊。

file

可以看到簡訊服務是配置成功了的。整體來說沒有我們想像中的那麼複雜。

番外

好了,就說這麼多啦,今天項目的程式碼也同步到github 上啦。
github地址:https://github.com/QuellanAn/zlflovemm

後續加油♡

歡迎大家關注個人公眾號 "程式設計師愛酸奶"

分享各種學習資料,包含java,linux,大數據等。資料包含影片文檔以及源碼,同時分享本人及投遞的優質技術博文。

如果大家喜歡記得關注和分享喲❤
file