阿里雲短信工具類2020.8.5


阿里雲短信工具類2020.8.5

最近項目中需要整合阿里雲的短信發送,發現使用方式有變化,封裝了一套新版的阿里短信工具類,供大家參考和使用~

申請簽名和模板

我們需要先登錄阿里雲官網,找到阿里雲短信

短信模板和簽名的申請不是本篇文章研究的重點,大家可以去官網自行申請~

獲取Access Key

成功獲取簽名和模板后,我們點擊右上角的頭像,選擇Access Key管理

如果出現安全提醒,我們可以暫時先忽略,如果對阿里雲比較了解,可以申請子Access Key使用,更加安全。

點擊顯示,進行一個簡單的短信驗證,查看Access Key和Access Key Secret

導入maven依賴

新版的maven依賴:

        <!-- aliyun短信 -->
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.5.1</version>
        </dependency>

工具類說明

工具類一共包含兩部分內容SMSVO和SMSUtil,分別是返回值對象和工具類主體

方法說明:該工具類向外暴露下述兩個方法

方法名 參數 返回值 說明
sendMessage String phoneNumber SMSVO 發送短信,返回自定義類,包含code(String,隨機生產的六位驗證碼)、msg(String,成功或失敗信息)和success狀態(Boolean,是否成功發送)
isPhoneNumber String phoneNumber boolean 校驗手機號碼

需要修改的常量值,下面的常量需要修改為自己阿里雲的信息:

    /**
     * 需要替換為自己的ACCESS_KEY_ID
     */
    private static final String ACCESS_KEY_ID = "";

    /**
     * 需要替換為自己的ACCESS_KEY_SECRET
     */
    private static final String ACCESS_KEY_SECRET = "";

    /**
     * 這里要修改為自己的短信簽名
     */
    private static final String SIGN_NAME = "";

    /**
     * 修改為自己的模板CODE
     */
    private static final String TEMPLATE_CODE = "";

    /**
     * 模板中的變量名稱 例如模板中為${code} 此處就填寫code
     */
    private static final String TEMPLATE_PARAM = "";

SMSVO代碼

package cn.rayfoo.common.util.sms;

import lombok.Data;

/**
 * @author rayfoo@qq.com
 * @version 1.0
 * @date 2020/8/5 21:20
 * @description 短信驗證碼返回結果
 */
@Data
public class SMSVO {

    /**
     * 驗證碼
     */
    private String code;

    /**
     * 是否發送成功
     */
    private boolean success;

    /**
     * 返回信息
     */
    private String msg;
}

完整的工具類SMSUtil代碼:

package cn.rayfoo.common.util.sms;

import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author rayfoo@qq.com
 * @version 1.0
 * @date 2020/8/5 19:42
 * @description 阿里短信工具類 2020.8.5最新使用方式
 */
public class SMSUtil {

    /*********************************************  需要修改的部分start  *************************************************/

      /**
     * 需要替換為自己的ACCESS_KEY_ID
     */
    private static final String ACCESS_KEY_ID = "";

    /**
     * 需要替換為自己的ACCESS_KEY_SECRET
     */
    private static final String ACCESS_KEY_SECRET = "";

    /**
     * 這里要修改為自己的短信簽名
     */
    private static final String SIGN_NAME = "";

    /**
     * 修改為自己的模板CODE
     */
    private static final String TEMPLATE_CODE = "";

    /**
     * 模板中的變量名稱 例如模板中為${code} 此處就填寫code
     */
    private static final String TEMPLATE_PARAM = "";

    /*********************************************  需要修改的部分end  *************************************************/

    /**
     * 下面是一些默認的配置,無需修改
     * REGION_ID 服務器大區   不建議修改
     * SYS_DOMAIN API地址   不可修改
     * SYS_VERSION 系統版本 不可修改
     * SYS_ACTION API接口名必須為SendSms 不可修改
     */
    private static final String REGION_ID = "cn-hangzhou";
    private static final String SYS_DOMAIN = "dysmsapi.aliyuncs.com";
    private static final String SYS_VERSION = "2017-05-25";
    private static final String SYS_ACTION = "SendSms";

    /**
     * 預編譯正則,提高效率
     */
    private static final Pattern PATTERN = Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[0-9]))\\d{8}$");

    /**
     * 創建profile對象
     */
    private static DefaultProfile profile = null;

    /**
     * 創建client對象
     */
    private static IAcsClient client = null;

    /**
     * 創建request對象
     */
    private static CommonRequest request = null;


    /**
     * 靜態代碼塊中初始化一些參數
     */
    static {

        //初始化profile
        profile = DefaultProfile.getProfile(REGION_ID, ACCESS_KEY_ID, ACCESS_KEY_SECRET);
        client = new DefaultAcsClient(profile);

        //初始化一些參數
        request = new CommonRequest();
        request.setSysMethod(MethodType.POST);
        request.setSysDomain(SYS_DOMAIN);
        request.setSysVersion(SYS_VERSION);
        request.setSysAction(SYS_ACTION);
        request.putQueryParameter("RegionId", REGION_ID);
        request.putQueryParameter("SignName", SIGN_NAME);
        request.putQueryParameter("TemplateCode", TEMPLATE_CODE);
    }

    /**
     * 校驗手機號是否合法
     * @param phoneNumber
     * @return
     */
    public static boolean isPhoneNumber(String phoneNumber) {
        Matcher m = PATTERN.matcher(phoneNumber);
        return m.matches();
    }


    /**
     * 發送短信的邏輯
     * @param phoneNumber 手機號碼
     * @return
     */
    public static SMSVO sendMessage(String phoneNumber) {

        //創建result
        SMSVO result = new SMSVO();
        //默認為false,只有成功時為true
        result.setSuccess(false);
        //判斷是否為手機號
        if(!isPhoneNumber(phoneNumber)){
            result.setMsg("手機號碼不合法!");
            return result;
        }

        //獲取六位隨機數
        String code = (long) (Math.random() * (999999 - 100000) + 100000) + "";

        //初始化用戶自定義參數
        request.putQueryParameter("PhoneNumbers", phoneNumber);
        //在短信內容中嵌入隨機數
        request.putQueryParameter("TemplateParam", "{\"" + TEMPLATE_PARAM + "\":\"" + code + "\"}");


        //發送的業務邏輯
        try {
            CommonResponse response = client.getCommonResponse(request);
        } catch (Exception e) {
            result.setMsg("本次發送失敗,請查看錯誤信息:" + e.getMessage());
            e.printStackTrace();
            return result;
        }
        //成功則返回正確的信息
        result.setCode(code);
        result.setMsg("短信發送成功!");
        result.setSuccess(true);
        return result;
    }

    /**
     * 私有化構造
     */
    private SMSUtil() {
    }

}


免責聲明!

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



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