阿里雲短信服務使用簡介

筆者最近的SpringBoot項目中使用到了阿里雲的短信服務,在此做些總結。

阿里雲短信服務官方指導教程:https://help.aliyun.com/document_detail/59210.html?spm=a2c4g.11174283.4.1.n6Pa55

步驟:

1、註冊阿里雲賬號通過實名認證

2、開通短信服務(開通免費)

開通後可在控制檯短信服務欄中查看


3、創建Access Key,獲取Access Key ID 和 Access Key Secret(具體看阿里雲官方教程)

Access Key用於在程序中調用阿里雲的服務API,個人理解相當於賬號密碼,用於認證個人信息的(程序中會用到)。可以創建多個Access Key,但Access Key具體內容只能在創建初期查看,之後是無法查看的,因此需要及時下載到本地。

4、創建短信簽名和短信模板

    短信簽名一般用於標記公司名或者是具體的業務,它會以下的形式出現在短信中:

[短信簽名] 短信內容....

    短信模板描述了短信的具體內容,可以提供變量來替代具體的數據,程序中會以JSON的形式向短信模板提供變量。

注意:短信簽名和短信模板創建後都需要通過審覈,審覈一般在幾個小時內就能完成。


短信模板中的"模板CODE"在程序中會被使用到,通過模板CODE來明確使用哪一個模板。


5、Maven項目中引入阿里雲短信服務依賴


6、參看官方Demo編寫發送短信的接口

/**
 * 阿里雲短信服務機器人
 *
 * @author minghui.y
 * @create 2018-05-16 9:54
 **/
public class SmsRobotTunnel {

    private static final Logger LOGGER = LoggerFactory.getLogger(SmsRobotTunnel.class);

    /**短信API產品名稱(短信產品名固定,無需修改)*/
    private static final String PRODUCT = "Dysmsapi";
    /**短信API產品域名(接口地址固定,無需修改)*/
    private static final String DOMAIN = "dysmsapi.aliyuncs.com";
    /**AccessKeyId*/
    private static final String  ACCESSKEYID = "your access key id";
    /**accessKeySecret*/
    private static final String ACCESSKEYSECRET = "your access key secret";
    /**短信簽名*/
    private static final String SMSSIGN = "your sms sign";
    /**短信模板CODE*/
    private static final String SMSTEMPLATE0 = "SMS_xxxxxxx";
    private static final String SMSTEMPLATE1 = "SMS_xxxxxxx";

    /**
     * 發送短信方法
     * @param contentJSON字串,替代短信模板中的變量
     * @param phones:可以使多個手機號,以逗號分隔
     * @return:發送成功則返回true
     */
    public static boolean send(String content, String phones, SmsBizType bizType) {

        //可自助調整超時時間
        System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
        System.setProperty("sun.net.client.defaultReadTimeout", "10000");

        try {
            //初始化acsClient,暫不支持region            IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", ACCESSKEYID, ACCESSKEYSECRET);
            DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", PRODUCT, DOMAIN);
            IAcsClient acsClient = new DefaultAcsClient(profile);

            //組裝請求對象
            SendSmsRequest request = new SendSmsRequest();
            //必填:待發送手機號
            request.setPhoneNumbers(phones);
            //必填:短信簽名
            request.setSignName(SMSSIGN);
            //必填:短信模板
            String templcateCode = null;
            switch (bizType) {
                case SMS_CREATE_SERVICE:
                    templcateCode = SMSTEMPLATE0;
                    break;
                case SMS_PROCESS_SERVICE:
                    templcateCode = SMSTEMPLATE1;
                    break;
                default:
                    templcateCode = SMSTEMPLATE0;
                    break;
            }
            request.setTemplateCode(templcateCode);
            //可選:模板中的變量替換JSON,如模板內容爲"親愛的${name},您的驗證碼爲${code}",此處的值爲
            request.setTemplateParam(content);


            SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
            //解析短信響應結果
            if(sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) {
                //請求成功
                return true;
            }
        } catch (Exception e) {
            LOGGER.error("短信發送服務異常!", e);
        }

        return false;
    }

}

以上代碼有幾處需要根據你的實際情況修改:

1、AccessKeyID和AccessKeySecret

2、短信簽名(直接寫內容,例如短信簽名是"abc",此處就是"abc")

3、短信模板CODE,可以有多個,可以存儲到Map中根據不同的業務場景選擇不同的短信模板

4、send方法的三個參數

      content:json格式的字符串,用於替代短信模板中的變量

       phone:手機號碼字符串,可以是以逗號分隔的多個手機號

       bizType:自定義的一個枚舉,用來根據場景選擇短信模板

7、收到的短信效果:




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章