1. 程式人生 > >阿里雲簡訊介面開發實踐(Java)

阿里雲簡訊介面開發實踐(Java)

隨著網際網路的興起,各行各業的需求都在不斷的增加。隨著業務的擴大,企業給使用者傳送簡訊驗證碼的業務,也是如火如荼。在這裡,calvin給各位開發者推薦阿里雲簡訊平臺。原因有二:1.接入較簡單,開發成本低 2.非常穩定,簡訊可達率99%。
       OK,那麼接下來我們就可以開發阿里簡訊介面吧。主要包括兩個步驟,第一個是前期準備,包括註冊阿里雲賬號,獲得access_key和access_secret,並且申請簡訊簽名和簡訊模板。第二個步驟則是引入阿里簡訊服務的SDK,並正式開發。

一、前期準備
1.註冊阿里雲賬號
進入網址 https://www.aliyun.com/ 點選免費註冊,輸入相關資訊,則成為阿里雲使用者。

2.獲取Access_key和Access_secret

è¿éåå¾çæè¿°

è¿éåå¾çæè¿°

3.簽名管理與模板管理
首先點選產品與服務,選擇簡訊服務。

è¿éåå¾çæè¿°

我們需要關心的是應用開發這塊。

è¿éåå¾çæè¿°

分別申請簽名管理和模板管理。

è¿éåå¾çæè¿°

è¿éåå¾çæè¿°

二、開發步驟
       前面的準備工作都做完並且都申請通過後,我們可以正式進入我們的開發工作。
可以先在IDEA中新建一個Maven工程。通過依賴阿里簡訊服務的SDK或者在pom檔案中新增相關依賴。
SDK及Demo下載地址為:
https://help.aliyun.com/document_detail/55359.htmlspm=a2c4g.11186623.2.8.YwsgNT
這裡建議使用在pom檔案中新增相關依賴,這樣比較方便。

<dependencies>
    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>aliyun-java-sdk-core</artifactId>
      <version>3.7.1</version>
    </dependency>
    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
      <version>1.1.0</version>
    </dependency>
  </dependencies>


瞭解一下入參與出參

è¿éåå¾çæè¿°

出參列表

è¿éåå¾çæè¿°

根據官方給出的demo,我們新建類AliDayunSms,在主方法中寫入傳送簡訊驗證碼的邏輯。程式碼如下:


package com.ec.sms;

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;

/**
 * @Title AliDayunSms
 * @Description 阿里大魚簡訊介面開發
 * @author calvin
 * @date: 2018/8/9 下午1:28 
 */
public class AliDayunSms {

    public static void main(String[] args) throws ClientException {
        //設定超時時間-可自行調整
        System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
        System.setProperty("sun.net.client.defaultReadTimeout", "10000");
        //初始化ascClient需要的幾個引數
        final String product = "Dysmsapi";//簡訊API產品名稱(簡訊產品名固定,無需修改)
        final String domain = "dysmsapi.aliyuncs.com";//簡訊API產品域名(介面地址固定,無需修改)
        //替換成你的AK
        final String accessKeyId = "your accessKeyId";//你的accessKeyId
        final String accessKeySecret = "your accessKeySecret";//你的accessKeySecret
        //初始化ascClient,暫時不支援多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();
        //使用post提交
        request.setMethod(MethodType.POST);
        //必填:待發送手機號。支援以逗號分隔的形式進行批量呼叫,批量上限為1000個手機號碼,批量呼叫相對於單條呼叫及時性稍有延遲,驗證碼型別的簡訊推薦使用單條呼叫的方式;傳送國際/港澳臺訊息時,接收號碼格式為00+國際區號+號碼,如“0085200000000”
        request.setPhoneNumbers("your phoneNumber");
        //必填:簡訊簽名-可在簡訊控制檯中找到
        request.setSignName("your signName");
        //必填:簡訊模板-可在簡訊控制檯中找到,傳送國際/港澳臺訊息時,請使用國際/港澳臺簡訊模版
        request.setTemplateCode("your templateCode");
        //可選:模板中的變數替換JSON串,如模板內容為"親愛的${name},您的驗證碼為${code}"時,此處的值為
        //友情提示:如果JSON中需要帶換行符,請參照標準的JSON協議對換行符的要求,比如簡訊內容中包含\r\n的情況在JSON中需要表示成\\r\\n,否則會導致JSON在服務端解析失敗
        //request.setTemplateParam("{\"code\":\"988756\"}");
        String msgCode = getMsgCode();
        request.setTemplateParam("{\"code\":\"" + msgCode + "\"}");
        //請求失敗這裡會拋ClientException異常
        SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
        if (sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) {
            //請求成功
            System.out.println("=====success====");
        } else {
            System.out.println("=====fail=======");
        }
    }

    /**
     * 生成隨機的6位數,簡訊驗證碼
     * @return
     */
    private static String getMsgCode() {
        int n = 6;
        StringBuilder code = new StringBuilder();
        Random ran = new Random();
        for (int i = 0; i < n; i++) {
            code.append(Integer.valueOf(ran.nextInt(10)).toString());
        }
        return code.toString();
    }
}


       將程式碼中的your accessKeyId和your accessKeySecret替換成你剛才申請或者已有的access_key和access_secret;your phoneNumber替換成你想要接收簡訊的那個手機號碼;your signName替換之前申請到的簽名名稱;your templateCode也替換成控制檯上面顯示的那個code。程式碼中,簡訊驗證碼code為變數,裡面的值可以自己定義規則生成並替換,可以是隨機生成的的6位或者其他位的數字或者字母。