對接阿里雲短信接口


阿里雲短信服務

簡單說明

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

阿里雲短信

首先沒用過的玩家需要去阿里雲注冊賬戶,然后開啟兩個私鑰,這兩個密鑰是我們的必需品

然后去申請簽名和模版,這個也是我們的必需品

現在不怎么好申請了,建議申請理由都寫成個人項目測試啥的,過不了就多申請幾次,我申了三次才ojbk!

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

官方文檔閱讀

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

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

至於入參和出參可以參考官方文檔,很多Api都變化了,其實我也記不起以前的api了,哈哈哈哈.....

Java工程

創建一個SpringBoot工程,按部就班。

最終的項目目錄結構為:

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啟動

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

 

完!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM