天天看點

Java調用阿裡雲短信服務一、注冊登陸二、開通短信服務三、添加簽名四、添加模闆五、國内消息設定六、賬戶餘額充值七、AccessKey 管理八、開發

Java調用阿裡雲短信服務

  • 一、注冊登陸
  • 二、開通短信服務
  • 三、添加簽名
  • 四、添加模闆
  • 五、國内消息設定
  • 六、賬戶餘額充值
  • 七、AccessKey 管理
  • 八、開發
    • 8.1、版本說明
    • 8.2、 原版 SDK
      • 8.2.1、直接使用
      • 8.2.2、封裝短信工具類
    • 8.3、更新版SDK

一、注冊登陸

阿裡雲官網:https://www.aliyun.com/

如果沒有注冊需要注冊并進行實名認證

實名位址:https://account.console.aliyun.com/v2/#/authc/home

二、開通短信服務

進入短信服務

Java調用阿裡雲短信服務一、注冊登陸二、開通短信服務三、添加簽名四、添加模闆五、國内消息設定六、賬戶餘額充值七、AccessKey 管理八、開發

免費開通

Java調用阿裡雲短信服務一、注冊登陸二、開通短信服務三、添加簽名四、添加模闆五、國内消息設定六、賬戶餘額充值七、AccessKey 管理八、開發

三、添加簽名

選擇國内消息–>簽名管理–>添加簽名

Java調用阿裡雲短信服務一、注冊登陸二、開通短信服務三、添加簽名四、添加模闆五、國内消息設定六、賬戶餘額充值七、AccessKey 管理八、開發

簽名内容

Java調用阿裡雲短信服務一、注冊登陸二、開通短信服務三、添加簽名四、添加模闆五、國内消息設定六、賬戶餘額充值七、AccessKey 管理八、開發

四、添加模闆

Java調用阿裡雲短信服務一、注冊登陸二、開通短信服務三、添加簽名四、添加模闆五、國内消息設定六、賬戶餘額充值七、AccessKey 管理八、開發

五、國内消息設定

安全設定

Java調用阿裡雲短信服務一、注冊登陸二、開通短信服務三、添加簽名四、添加模闆五、國内消息設定六、賬戶餘額充值七、AccessKey 管理八、開發

發送頻率設定

Java調用阿裡雲短信服務一、注冊登陸二、開通短信服務三、添加簽名四、添加模闆五、國内消息設定六、賬戶餘額充值七、AccessKey 管理八、開發

聯系人管理,用來通知安全設定中的限制

Java調用阿裡雲短信服務一、注冊登陸二、開通短信服務三、添加簽名四、添加模闆五、國内消息設定六、賬戶餘額充值七、AccessKey 管理八、開發

黑名單解除記錄

Java調用阿裡雲短信服務一、注冊登陸二、開通短信服務三、添加簽名四、添加模闆五、國内消息設定六、賬戶餘額充值七、AccessKey 管理八、開發

六、賬戶餘額充值

想要發送短信,賬戶中必須要有餘額

首頁:https://usercenter2.aliyun.com/home

Java調用阿裡雲短信服務一、注冊登陸二、開通短信服務三、添加簽名四、添加模闆五、國内消息設定六、賬戶餘額充值七、AccessKey 管理八、開發

使用支付寶進行支付就可以了,可以是任意金額,非常友善

國内短信定價

  • 按量付費

    根據短信的發送條數進行實時梯度計費。短信模闆的類型不同,短信的單價也不同。實時計費,自動跨檔,跨檔後當月所有發送量按新階梯價重新計算。

    Java調用阿裡雲短信服務一、注冊登陸二、開通短信服務三、添加簽名四、添加模闆五、國内消息設定六、賬戶餘額充值七、AccessKey 管理八、開發
  • 國内通用短信套餐包

    為了降低使用者的使用成本,短信服務提供國内短信套餐包。 僅可用于國内文本短信,不包括國際及港澳台短信。使用短信服務時優先抵用套餐包中的數量。

    套餐包時長為24個月,即短信額度的有效時長為24個月。超出24個月之後按照短信模闆類型梯度計費。

    Java調用阿裡雲短信服務一、注冊登陸二、開通短信服務三、添加簽名四、添加模闆五、國内消息設定六、賬戶餘額充值七、AccessKey 管理八、開發

七、AccessKey 管理

Java調用阿裡雲短信服務一、注冊登陸二、開通短信服務三、添加簽名四、添加模闆五、國内消息設定六、賬戶餘額充值七、AccessKey 管理八、開發
Java調用阿裡雲短信服務一、注冊登陸二、開通短信服務三、添加簽名四、添加模闆五、國内消息設定六、賬戶餘額充值七、AccessKey 管理八、開發
Java調用阿裡雲短信服務一、注冊登陸二、開通短信服務三、添加簽名四、添加模闆五、國内消息設定六、賬戶餘額充值七、AccessKey 管理八、開發

請記住申請完子使用者AccessKey後不要立即關閉視窗,先将申請的AccessKeySecret進行儲存,因為關閉後,再也沒辦法進行檢視AccessKeySecret,隻能檢視到AccessKeyId。

八、開發

8.1、版本說明

目前短信服務SDK分為:更新版SDK(推薦使用)和原版SDK。兩者的差別如下所示:

說明 BusinessRequest版本SDK不再維護

對比項 更新版SDK 原版SDK
生成方案 基于DSL語言 Darabonba 基于模版生成,各程式設計語言之間采用不同的模版方案,各個語言之間功能完備程度不一緻,使用體驗不一。
語言支援 支援主流6門語言的SDK生成 大部分雲産品的老版本SDK無法支援超過3門以上的主流語言。
SDK示例 各語言間的代碼在邏輯行為上保持一緻,通過中間語言來統一生成,具有校驗能力,有效保證示例代碼的準确性。 各語言間的代碼示例不一緻,不能保證代碼的正确性。
SDK場景化示例 通過DSL一次編寫就能生成多語言的SDK場景化示例,可以協助開發者極大的簡化SDK使用的了解成本。 多語言場景化示例編寫難度大,覆寫語言數較少。

8.2、 原版 SDK

8.2.1、直接使用

導入項目所需依賴包

<dependencies>
 	 <!--原版 SDK - 阿裡雲Java SDK核心庫-->
    <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>aliyun-java-sdk-core</artifactId>
        <version>4.5.16</version>
    </dependency>

    <!--阿裡 FastJSON,json格式轉換-->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.39</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>
           

拷貝“使用示例”代碼,并替換示例代碼中關鍵資訊

示例位址:https://help.aliyun.com/document_detail/112148.html?spm=a2c4g.11186623.6.670.97dd1e08nhV97h

package com.java521.controller;

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;

/**
 * @Author: xuwendong
 * @Date: 2021/7/16 14:22
 * @Description: 阿裡雲短信測試
 */
public class SendSms {
    private static String accessKeyId = "LTAI5tKmStGAf3QzS18*****";
    private static String accessKeySecret = "GgMEjdeUokQ7OscWye1wTZRsg*****";


    public static void main(String[] args) {
        /*
         * ap-northeast-1代表RegionID
         * 表明使用那個服務區域伺服器發生短信,建議根據項目所在伺服器選擇
         * 具體情況可以參考下面的【阿裡雲伺服器地域介紹】
         *
         */

        //DefaultProfile profile = DefaultProfile.getProfile("ap-northeast-1", "<accessKeyId>", "<accessSecret>");

        DefaultProfile profile = DefaultProfile.getProfile("cn-beijing", accessKeyId, accessKeySecret);
        IAcsClient client = new DefaultAcsClient(profile);

        CommonRequest request = new CommonRequest();
        request.setSysMethod(MethodType.POST);
        request.setSysDomain("dysmsapi.aliyuncs.com");
        request.setSysVersion("2017-05-25");
        request.setSysAction("SendSms");
        request.putQueryParameter("PhoneNumbers", "1314520****");
        request.putQueryParameter("SignName", "用生命研發技術");
        request.putQueryParameter("TemplateCode", "SMS_21890****");
        request.putQueryParameter("TemplateParam", "{\"code\":\"6666\"}");
        try {
            CommonResponse response = client.getCommonResponse(request);
            System.out.println(response.getData());
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }
    }
}
           

發送短信測試

Java調用阿裡雲短信服務一、注冊登陸二、開通短信服務三、添加簽名四、添加模闆五、國内消息設定六、賬戶餘額充值七、AccessKey 管理八、開發

8.2.2、封裝短信工具類

定義短信發送工具類

package com.java521.utils;

import com.alibaba.fastjson.JSON;
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 lombok.extern.slf4j.Slf4j;

import java.util.Map;

/**
 * @Author: xuwendong
 * @Date: 2021/7/16 15:05
 * @Description: 阿裡雲短信發送工具類
 */
@Slf4j
public class AliyunSmsUtil {
    //短信發送成功狀态碼
    private static final String OK = "OK";
    //阿裡雲短信發送相關參數設定
    private static final String REGIONID = "cn-beijing";
    private static final String DOMAIN = "dysmsapi.aliyuncs.com";
    private static final String VERSION = "2017-05-25";
    private static final String ACTION = "SendSms";
    //
    private static final String accessKeyId = "LTAI5tKmStGAf3QzS18*****";
    private static final String accessKeySecret = "GgMEjdeUokQ7OscWye1wTZRsg*****";

    /**
     * 功能描述: 阿裡雲短信發送接口,支援通知、驗證碼、激活碼類短信
     *
     * @param map map中所需參數,參數名稱固定,如下(注意:參數首字母都是小寫的):
     *            phoneNumbers : 手機号碼,支援多個中間以“,”英文逗号分隔 (必填)
     *            signName :簽名(必填)
     *            templateCode :模闆code(必填)
     *            templateParam :模闆參數(不必填,如果是通知類短信,該參數可以不設定)
     * @return : java.lang.Boolean
     * true-短信發送成功;false-短信發送失敗
     */
    public static Boolean sendSms(Map<String, String> map) {
        Boolean flag = false;
        DefaultProfile profile = DefaultProfile.getProfile(REGIONID, accessKeyId, accessKeySecret);
        IAcsClient client = new DefaultAcsClient(profile);
        CommonRequest request = new CommonRequest();
        request.setSysMethod(MethodType.POST);
        //發送短信域名,不要改變
        request.setSysDomain(DOMAIN);
        request.setSysVersion(VERSION);
        request.setSysAction(ACTION);
        request.putQueryParameter("PhoneNumbers", map.get("phoneNumbers"));
        request.putQueryParameter("SignName", map.get("signName"));
        request.putQueryParameter("TemplateCode", map.get("templateCode"));
        //通知類短信,模闆不需要參數。判斷傳遞的模闆參數是否為空,如果為空可能是通知類短信,則不需要添加模闆參數條件
        if (map.get("templateParam") != null) {
            request.putQueryParameter("TemplateParam", map.get("templateParam"));
        }
        try {
            //發送短信
            CommonResponse response = client.getCommonResponse(request);
            //發送短信結果轉為Map類型
            Map<String, String> responseMap = JSON.parseObject(response.getData(), Map.class);
            //判斷短信發送是否成功
            if (OK.equals(responseMap.get("Code"))) {
                flag = true;
            }
            log.debug("send fail[code={}, message={}]", responseMap.get("Code"), responseMap.get("Message"));
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }
        return flag;
    }
}
           

測試發送短信工具類

package com.java521.controller;

import com.java521.utils.AliyunSmsUtil;

import java.util.HashMap;
import java.util.Map;

/**
 * @Author: xuwendong
 * @Date: 2021/7/16 15:06
 * @Description: 工具類短信發送測試
 */
public class AliyunSendSmsTest {
    public static void main(String[] args) {
        //封裝工具類所需參數
        Map<String,String> map = new HashMap<>();
        map.put("phoneNumbers","1314520****");
        map.put("signName","用生命研發技術");
        map.put("templateCode","SMS_21890****");
        map.put("templateParam","{\"code\":\"8888\"}");
        //調用工具類完成短信發送
        Boolean success = AliyunSmsUtil.sendSms(map);
        //驗證短信發送是否成功
        if(success){
            System.out.println("短信發送成功");
        }else{
            System.out.println("短信發送失敗");
        }
    }
}
           

發送短信測試

Java調用阿裡雲短信服務一、注冊登陸二、開通短信服務三、添加簽名四、添加模闆五、國内消息設定六、賬戶餘額充值七、AccessKey 管理八、開發

8.3、更新版SDK

添加更新版SDK依賴

<!--更新版 SDK-->
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>dysmsapi20170525</artifactId>
    <version>2.0.4</version>
</dependency>
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>tea-openapi</artifactId>
    <version>0.0.16</version>
</dependency>
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>tea-console</artifactId>
    <version>0.0.1</version>
</dependency>
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>tea-util</artifactId>
    <version>0.2.11</version>
</dependency>
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>tea</artifactId>
    <version>[1.0.3, 2.0.0)</version>
</dependency>
           

編寫示例

package com.java521.controller;

import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.aliyun.teaopenapi.models.Config;

/**
 * @Author: xuwendong
 * @Date: 2021/7/16 15:29
 * @Description:
 */
public class Sample {
    /**
     * 使用AK&SK初始化賬号Client
     *
     * @param accessKeyId
     * @param accessKeySecret
     * @return Client
     * @throws Exception
     */
    public static Client createClient(String accessKeyId, String accessKeySecret) throws Exception {
        Config config = new Config()
                // 您的AccessKey ID
                .setAccessKeyId(accessKeyId)
                // 您的AccessKey Secret
                .setAccessKeySecret(accessKeySecret);
        // 通路的域名
        config.endpoint = "dysmsapi.aliyuncs.com";
        return new Client(config);
    }

    public static void main(String[] args_) throws Exception {
        String accessKeyId = "LTAI5tKmStGAf3QzS18*****";
        String accessKeySecret = "GgMEjdeUokQ7OscWye1wTZRsg*****";
        java.util.List<String> args = java.util.Arrays.asList(args_);
        com.aliyun.dysmsapi20170525.Client client = Sample.createClient(accessKeyId, accessKeySecret);
        SendSmsRequest sendSmsRequest = new SendSmsRequest()
                .setPhoneNumbers("1314520****")
                .setSignName("用生命研發技術")
                .setTemplateCode("SMS_21890****")
                .setTemplateParam("{\"code\":\"520520\"}");
        // 複制代碼運作請自行列印 API 的傳回值
        SendSmsResponse response = client.sendSms(sendSmsRequest);
        System.out.println(response.getHeaders());
        System.out.println("=========");
        /**
         *   "RequestId": "10C14877-9808-4C80-84E1-8F7D45B92502",
         *   "Message": "OK",
         *   "BizId": "626211126421974956^0",
         *   "Code": "OK"
         */
        System.out.println(response.getBody().getRequestId());
        System.out.println(response.getBody().getMessage());
        System.out.println(response.getBody().getBizId());
        System.out.println(response.getBody().getCode());
    }
}
           

發送短信測試

Java調用阿裡雲短信服務一、注冊登陸二、開通短信服務三、添加簽名四、添加模闆五、國内消息設定六、賬戶餘額充值七、AccessKey 管理八、開發