阿里大於短信驗證對接(超全面)


1 阿里大於簡介

1.1 短信服務

短信服務(Short Message Service)是一種存儲和轉發服務。也就是,短消息並不是直接從發送人發送到接收人,而始終通過短信服務中心進行轉發。

1.2 阿里大於

阿里大於是由阿里雲為用戶提供,與三大運營商合作;支持向國內和國際快速發送驗證碼短信通知推廣信息的一項短信服務。

1.3 產品優勢

快速穩定、覆蓋面廣、高並發處理、消息堆積處理、易開發管理、智能監控調度

1.4 應用場景

(1)短信驗證碼

​ APP、網站注冊賬號,向手機下發驗證碼; 登錄賬戶、異地登錄時的安全提醒; 找回密碼時的安全驗證; 支付認證、身份校驗、手機綁定等

(2)系統信息推送

​ 向注冊用戶下發系統相關信息,包括: 升級或維護、服務開通、價格調整、 訂單確認、物流動態、消費確認、 支付通知等普通通知短信

(3)推廣短信

​ 向注冊用戶和潛在客戶發送通知和推廣信息,包括促銷活動通知、業務推廣、新產品宣講、會員關懷等商品與活動的推廣信息。增加企業產品曝光率、提高產品和企業的知名度。

阿里大於短信服務官方介紹文檔

2 准備工作

2.1 登錄阿里雲控制台

(1)賬號准備

(2)登錄阿里雲控制台

(3)點擊“短信服務”

阿里雲控制台

2.2 短信服務配置

(1)短信服務界面介紹

​ ① 包含了短信服務對接需要的訪問密鑰(AccessKey)和在線API調試工具。

​ ② 包括短信簽名以及短信模板,可以在這里快捷修改短信簽名與模板。

​ ③ 這里是短信服務所提供的套餐包,可以按需購買,支持超出滿足更高級流量包自動按量更高套餐計費。

(2)用戶AccessKey的創建

​ 選擇①中的“AccessKey”打開“安全信息管理”界面:

​ 點擊“創建AccessKey”會提示發送驗證碼到當前賬號的手機號上,填寫收到驗證碼,則創建成功。

(3)簽名申請

​ 選擇②中“添加簽名”進入“添加簽名”界面:

Tips: ①這里注意需要盡量使用真實應用名;②如果為個人使用,使用場景選擇“驗證碼”,否則需要提供簽名來源以及證明文件;③注意這里的審核還是很迅速的,記得及時去查看直接的簽名審核結果。

(4)模板添加

​ 選擇②中“添加模板”進入相應頁面:

​ 這里提供我的模板以供參考:

​ 萬事具備,只差集成代碼。 233...

3 Java對接

3.1 使用OpenAPI Explorer

(1)進入OpenAPI Explorer界面

​ 選擇①中“OpenAPI Explorer”進入到接口在線調試界面:

(2)設置參數

​ 選擇右下角“API簽名”設置參數:AccessKey、AccessSecret

​ 在界面右側設置參數:PhoneNumbers、Signature、TemplateCode、TemplateParam

Tips:其中參數TemplateParam為Json格式。例如:{"code":"1111"}

​ 這里附上官方請求參數介紹文檔

(3)返回結果示例

​ 注意:這里接口已經正常調用,證明代碼已經沒有問題。接下就是針對自己開發業務的一個集成

3.2 業務集成

(1)分析OpenAPI Explorer示例代碼

// 1 首先我們需要導入短信服務所需要SDK依賴,也就是以下依賴,直接復制到項目Pom.xml下引入即可。
/*
pom.xml
<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>aliyun-java-sdk-core</artifactId>
  <version>4.0.3</version>
</dependency>
*/
public class SendSms {
    public static void main(String[] args) {
        // 2 創建一個用於發送短信的客戶端的配置類
        DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "<accessKeyId>", "<accessSecret>");
        IAcsClient client = new DefaultAcsClient(profile);
        // 3 實例化公共請求對象
        CommonRequest request = new CommonRequest();
        // 3.1 設置公共請求參數
        request.setMethod(MethodType.POST);
        request.setDomain("dysmsapi.aliyuncs.com");
        request.setVersion("2017-05-25");
        request.setAction("SendSms");
        // 3.2 設置請求參數
        request.putQueryParameter("RegionId", "cn-hangzhou");
        request.putQueryParameter("PhoneNumbers", "待接收短信號");
        request.putQueryParameter("SignName", "簽名名稱");
        request.putQueryParameter("TemplateCode", "短信模板編號");
        request.putQueryParameter("TemplateParam", "驗證碼");
        // 4 執行請求得到響應實例
        try {
            CommonResponse response = client.getCommonResponse(request);
            System.out.println(response.getData());
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }
    }
}

(2)集成SDK

​ 在當前項目文件中添加依賴:

<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>aliyun-java-sdk-core</artifactId>
  <version>4.1.0</version>
</dependency>

(3)針對短信驗證業務的分析

​ 根據我所處理的只是用於短信驗證的業務,我們需要實現的業務有:
​ ①發送六位隨機驗證碼

​ ②短信驗證碼驗證

​ ③可以靈活的向指定電話號碼發送驗證碼。

(4)參考代碼

​ 以下為我根據示例代碼和業務需求實現的一個發送驗證碼工具類;

import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.trs.common.base.Defaults;
import lombok.extern.slf4j.Slf4j;

import java.util.Random;

@Slf4j
public class SendSmsUtils {
    /**
     * @Param 請求密鑰
     **/
    static final String ACCESS_KEY_ID="***************";
    static final String ACCESS_SECRET="**************";
     //* @Param  注冊:您正在申請手機注冊,驗證碼為:${code},5分鍾內有效!;
    static final String REGISTER_TEMPLATE_CODE="【短信模板編號】";
     //* @Param  驗證:您的驗證碼:${code},您正進行身份驗證,打死不告訴別人!
    static final String VERIFY_TEMPLATE_CODE="【短信模板編號】";
    // @Param  密碼重置:您的動態碼為:${code},您正在進行密碼重置操作,如非本人操作,請忽略本短信!
    static final String PWDUPDATE_TEMPLATE_CODE="【短信模板編號】";

    // 簽名名稱
    static final String SIGNATURE = "【簽名名稱】";


    /**
     * @Description 根據模板類型發送指定模板類型的驗證短信
     * @Param [phone, templateType]
     **/
    public static CommonResponse sendSmsCodeTophone(String phone,Integer templateFlag,String captCha){
        // 1 實例化短信發送客戶端
        DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", ACCESS_KEY_ID, ACCESS_SECRET);
        IAcsClient client = new DefaultAcsClient(profile);

        // 2 設置請求參數
        CommonRequest request = new CommonRequest();
        // 2.1 初始化公共參數
        setIAcsPublicParams(request);
        // 2.2 初始化請求參數
        String templateTypeStr = getTemplateType(templateFlag);
        setIAcsParams(request, phone, templateTypeStr,captCha);

        // 3 執行請求並返回響應結果
       return getResponse(client, request);
    }

    /**
     * @Description 隨機生成六位數字驗證碼
     * @Param []
     **/
    public static String getCode(){
        int code = new Random().nextInt(900000)+100000;
        return String.valueOf(code);
    }


    /**
     * @Description 設置公共請求參數
     * @Param [request, phone, templateTypeStr]
     **/
    private static void setIAcsParams(CommonRequest request, String phone, String templateTypeStr,String captCha) {
        request.putQueryParameter("RegionId", "cn-hangzhou");
        request.putQueryParameter("PhoneNumbers", phone);
        request.putQueryParameter("SignName", SIGNATURE);
        request.putQueryParameter("TemplateCode", templateTypeStr);
        request.putQueryParameter("TemplateParam", "{\"code\":\""+captCha+"\"}");
    }

    /**
     * @Description 根據傳入模板標志返回模板CODE
     * @Param [templateFlag]
     **/
    private static String getTemplateType(Integer templateFlag) {
        String templateTypeStr;
        if (templateFlag == 1){
            templateTypeStr = VERIFY_TEMPLATE_CODE;
        }else if (templateFlag == 2){
            templateTypeStr = PWDUPDATE_TEMPLATE_CODE;
        }else {
            templateTypeStr = REGISTER_TEMPLATE_CODE;
        }
        return templateTypeStr;
    }

    /**
     * @Description 客戶端執行請求,並返回請求響應實例
     * @Param [client, request]
     **/
    private static CommonResponse getResponse(IAcsClient client, CommonRequest request) {
        CommonResponse response = Defaults.defaultValue(CommonResponse.class);
        try {
            response = client.getCommonResponse(request);
            log.info(response.getData());
        } catch (ClientException e) {
            e.printStackTrace();
        }
        return response;
    }

    /**
     * @Description 設置公共請求參數
     * @Param [request]
     **/
    private static void setIAcsPublicParams(CommonRequest request) {
        request.setMethod(MethodType.POST);
        request.setDomain("dysmsapi.aliyuncs.com");
        request.setVersion("2017-05-25");
        request.setAction("SendSms");
    }
}

4 使用總結

  • 使用“阿里大於”可以很方便快速為項目提供短信服務
  • 正因為官方文檔非常全面,所以出此總結


免責聲明!

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



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