對接阿里雲短信接口

阿里雲短信服務

簡單說明

以前使用過阿里的阿里大於這個短信代發服務,今天使用的是阿里雲最新的一個短信代發服務,文檔真的有點不詳細,加上網上的博客也太少了,幾經蹉跎仍是把它給搓出來了,供你們學習java

阿里雲短信

首先沒用過的玩家須要去阿里雲註冊帳戶,而後開啓兩個私鑰,這兩個密鑰是咱們的必需品web

而後去申請簽名和模版,這個也是咱們的必需品spring

如今不怎麼好申請了,建議申請理由都寫成我的項目測試啥的,過不了就多申請幾回,我申了三次才ojbk!json

上面兩個環境已經裝備好了的你,怎麼能夠吃霸王餐呢?固然是充錢進去呀,找到充值入口,隨便充點錢進去 (一塊錢其實就能夠了!哭)api

官方文檔閱讀

官方提供了文檔說明、ApiDemo、入參出參說明,這個仍是比較詳細的,但你覺得你就能跑起來的話,我信你個鬼哦!app

惟一須要注意的地方就是上圖中我圈出來的這個地方,它的值是咱們發送驗證碼的值,是一個Json格式 :{"code":"值"}dom

至於入參和出參能夠參考官方文檔,不少Api都變化了,其實我也記不起之前的api了,哈哈哈哈.....spring-boot

Java工程

建立一個SpringBoot工程,循序漸進。工具

最終的項目目錄結構爲:post

pom.xml

   <dependencies>
        <!--@ConfigurationProperties 註解所需,不給報錯-->
        <dependency>
            <groupId> org.springframework.boot </groupId>
            <artifactId> spring-boot-configuration-processor </artifactId>
            <optional> true </optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.1.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <!--阿里短信官網提供的依賴-->
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.0.3</version>
        </dependency>
        <!--MQ的依賴,本列子不是用MQ-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
        <!--Json轉換工具類-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.30</version>
        </dependency>
    </dependencies>

日誌的配置文件,這就不放了,SpringBoot的配置文件爲application.yml

server:
  port: 8888
spring:
  application:
    name: sms_test
ccl:
  sms:
    accessKeyId: LTAI4Fh****X41J5UxcrBA7A            # accessKeyId
    accessKeySecret: qnF****mF4aM4f2aNoCOzLxkzyNRP8  # AccessKeySecret
    signName: 我的博客                 # 簽名名稱
    verifyCodeTemplate: SMS_175051234  # 模板編號  
logging.level.org.springframework.boot.autoconfigure: ERROR 

配置類

package com.test.sms.config; ​ import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; ​ /** * @Author Ninja650Plus@163.com * @Description //裝載配置文件的屬性類 * @Date 2019/10/7 * @Param * @return **/ @Data @Component @ConfigurationProperties(prefix = "ccl.sms") public class SmsConfig { String accessKeyId; String accessKeySecret; String signName; String verifyCodeTemplate; }

被封裝的阿里雲短信接口

package com.test.sms.utils; ​ 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.test.sms.config.SmsConfig; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.stereotype.Component; ​ /** * @Author Ninja650Plus@163.com * @Description 封裝阿里提供的短信發送接口 * @Date 2019/10/7 * @Param * @return **/ @Component @EnableConfigurationProperties(SmsConfig.class) public class SendUtils { @Autowired private SmsConfig smsConfig; //發送短信的方法
    public  CommonResponse send(String phone,String code)throws ClientException { //可自助調整超時時間
        System.setProperty("sun.net.client.defaultConnectTimeout", "10000"); System.setProperty("sun.net.client.defaultReadTimeout", "10000"); ​ DefaultProfile profile = DefaultProfile.getProfile("default",smsConfig.getAccessKeyId() , smsConfig.getAccessKeySecret()); IAcsClient client = new DefaultAcsClient(profile); ​ //封裝請求對象
        CommonRequest request = new CommonRequest(); request.setDomain("dysmsapi.aliyuncs.com"); request.setAction("SendSms"); request.setVersion("2017-05-25"); request.setMethod(MethodType.POST); //肯定發送的電話號碼和 驗證碼
        request.putQueryParameter("PhoneNumbers", phone);
     //這裏也得注意,對應的值是Json格式的字符串,否則就是一杯茶一根菸,一個bug玩一天 request.putQueryParameter(
"TemplateParam", "{\"code\":\"" + code + "\"}"); //肯定是的模版和簽名 request.putQueryParameter("SignName", smsConfig.getSignName()); request.putQueryParameter("TemplateCode", smsConfig.getVerifyCodeTemplate()); //發起調用 try { CommonResponse response = client.getCommonResponse(request); return response; } catch (ServerException e) { e.printStackTrace(); } catch (ClientException e) { e.printStackTrace(); } return null; } }

service

package com.test.sms.service; ​ import com.alibaba.fastjson.JSON; import com.aliyuncs.CommonResponse; import com.aliyuncs.exceptions.ClientException; import com.test.sms.utils.SendUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; ​ import java.util.Map; ​ @Service public class SmsService { ​ static final Logger LOGGER = LoggerFactory.getLogger(SendUtils.class); @Autowired private SendUtils sendUtils; public CommonResponse send(String phone,String code) throws ClientException { CommonResponse response = sendUtils.send(phone,code); if (response != null && response.getHttpStatus() == 200){ String data = response.getData(); Map map = JSON.parseObject(data, Map.class); LOGGER.info("短信發送狀態:{}" + phone + "=====" + code + "=====" + map.get("Message")); } //如下爲Api的測試代碼,不作理會便可
      boolean success = response.getHttpResponse().isSuccess();  //true
      int status = response.getHttpResponse().getStatus(); //200
      int httpStatus = response.getHttpStatus(); //200
      return response; } }

SpringMVC

package com.test.sms.controller; ​ import com.aliyuncs.CommonResponse; import com.aliyuncs.exceptions.ClientException; import com.test.sms.service.SmsService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; ​ import java.util.Random; /** * @Author Ninja650Plus@163.com * @Description * @Date 20:09 2019/10/7 * @Param * @return **/ @RestController @RequestMapping("/sms") public class cmsController { @Autowired private SmsService smsService; @GetMapping("/send/{number}") public CommonResponse cmsSend(@PathVariable String number) throws ClientException { //隨機產生6位驗證碼
        StringBuffer code = new StringBuffer(); Random random = new Random(); for (int i = 0; i<6; i++){ int j = random.nextInt(10); code.append(j); } return smsService.send(number,code.toString()); } }

postman啓動

更多的數據咱們就不看,咱們看一下關鍵部位響應結果便可:

 

完!

相關文章
相關標籤/搜索