6、springboot 簡單優雅是實現短信服務

前言

上一篇講了 springboot 集成郵件服務,接下來讓咱們一塊兒學習下springboot項目中怎麼使用短信服務吧。
項目中的短信服務基本上上都會用到,簡單的註冊驗證碼,消息通知等等都會用到。因此我這個腳手架也打算將短息服務繼承進來。
短息服務我使用的平臺是阿里雲的。網上有不少的短信服務提供商。你們能夠根據本身的需求進行選擇。java

準備工做

在阿里雲上開通服務,以及進行配置。這些阿里雲官方文檔都寫的很清楚,怎麼作就不細說的,你們能夠參考一下這篇文章:
https://blog.csdn.net/qq_2779...linux

配置好以後你須要獲取以下信息:git

accessKeyId 、accessSecret 這兩個是祕鑰。在用戶AccessKey 中能夠找到。程序員

signName 是簽名名稱。github

file

templateCode 是模版code
filespring

添加依賴和配置

有了上面的準備工做,咱們接下來開始在咱們的項目中開發吧。同樣的先在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 不是必須的,就看你項目中有沒有用到啦,沒有用到的話,添加第一個依賴就行了。json

而後在application.properties文件中加入配置,這四個參數,就是準備工做中咱們獲取的四個參數。
fileapi

service 層

和郵件服務同樣,咱們這裏沒有涉及到數據庫,就先直接寫service 層,建立SmsService 接口和 SmsServiceImpl 類。springboot

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/...

後續加油♡

歡迎你們關注我的公衆號 "程序員愛酸奶"

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

若是你們喜歡記得關注和分享喲❤
file

本文由博客一文多發平臺 OpenWrite 發佈!
相關文章
相關標籤/搜索