阿里雲短信服務集成

不管app仍是web都會用到短信驗證功能,阿里提供了優質的短信服務。
特此將集成步驟記錄,方便之後查閱html

1、獲取 Access key和Access key Secret

一、首先註冊阿里開放平臺開發者,並進行實名認證
二、開通阿里短信服務
三、在短信控制檯點擊Access Key按鈕查看 Access key和Access key Secretjava

阿里雲AccessKeys
四、建立短信簽名,我的用戶只能建立一個短信簽名,企業用戶能夠建立5個短信簽名
五、短信簽名就是短信的主體名,好比支付寶的短信爲【支付寶】,其中支付寶就是短信簽名。短信簽名是提交後是須要進行審覈的,通常工做時間以內,2小時以內就能審覈經過
短信簽名
六、建立短信模板:短信模板就是短信的內容,若是短信中有參數,能夠參照阿里的參數模板進行設置。
短信模板
這些東西都有了以後就能夠進行開發了。

2、集成短信功能

一、下載阿里短信的兩個jar包,將其導入項目
二、參照官方demo進行代碼編寫
我本身寫了一個工具類,很簡單。
若是有更多的需求,能夠在其基礎上進行拓展。git

/** * 短信發送工具 * @author YangYang_2000 * @version 1.0 * @date 2017年12月28日 */
public class SmsUtil {
    // 產品名稱:雲通訊短信API產品,開發者無需替換
    private static final String product = "Dysmsapi";
    // 產品域名,開發者無需替換
    private static final String domain = "dysmsapi.aliyuncs.com";

    // 此處須要替換成開發者本身的AK(在阿里雲訪問控制檯尋找)
    private static String accessKeyId = "本身的AccessKeyId";
    private static String accessKeySecret = "本身的AccessKeySecert";
    private static String identifyingTempleteCode = "本身的短信模板";
    private static String singName = "本身的短信簽名";
    /** * 發送短信驗證碼 */
    public static SendSmsResponse sendIdentifyingCode(String mobile, String code) throws Exception {
        try {
            return sendSms(mobile, "{\"code\":\"" + code + "\"}");
        } catch (ClientException e) {
            throw new Exception();
        }
    }
    /** * 發送短信 */
    public static SendSmsResponse sendSms(String mobile, String templateParam) throws ClientException {
        // 可調整超時時間
        System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
        System.setProperty("sun.net.client.defaultReadTimeout", "10000");
        // 初始化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(mobile);
        // 必填:短信簽名-可在短信控制檯中找到
        request.setSignName(singName);
        // 必填:短信模板-可在短信控制檯中找到
        request.setTemplateCode(identifyingTempleteCode);
        // 可選:模板中的變量替換JSON串,如模板內容爲"親愛的${name},您的驗證碼爲${code}"時,此處的值爲
        request.setTemplateParam(templateParam);
        // 選填-上行短信擴展碼(無特殊需求用戶請忽略此字段)
        // request.setSmsUpExtendCode("90997");
        // 可選:outId爲提供給業務方擴展字段,最終在短信回執消息中將此值帶回給調用者
        request.setOutId("yourOutId");
        // hint 此處可能會拋出異常,注意catch
        SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
        return sendSmsResponse;
    }
}


/** * 短信狀態監測工具 * @author YangYang_2000 * @version 1.0 * @date 2017年12月28日 */
public class SmsCheckUtil {
    /** * 根據回執碼檢測短信發送狀態 */
    public static String checkCode(String jsonStr, String code) {
        if (code.equals(SmsCommon.SMS_OK)) {//發送成功,接口端作實現
            return SmsCommon.SMS_OK;
        } else if (code.equals(SmsCommon.SMS_MOBILE_NUMBER_ILLEGAL)) {//手機號碼格式錯誤
            jsonStr = ResponseUtil.getRspFailObj(Return.CODE_MOBILE_TYPE_FAIL, Return.MSG_MOBILE_TYPE_FAIL);
            return jsonStr;
        } else if (code.equals(SmsCommon.SMS_BUSINESS_LIMIT_CONTROL)) {//業務限流,禁止多發
            jsonStr = ResponseUtil.getRspFailObj(Return.CODE_MOBILE_TIEE, Return.MSG_MOBILE_TIEE);
            return jsonStr;
        } else {//不經常使用的異常暫不作判斷,統一返回服務器內部異常。
            jsonStr = ResponseUtil.getRspFailObj(Return.CODE_EXCEPTION, Return.MSG_EXCEPTION);
            return jsonStr;
        }
    }
}


/** * 短信返回碼 * * @author YangYang_2000 * @version 1.0 * @date 2017年12月28日 * @see https://help.aliyun.com/knowledge_detail/57717.html */
public class SmsCommon {
    // 發送成功
    public static String SMS_OK = "OK";
    // 業務停機 請先查看帳戶餘額,若餘額大於零,則請經過建立工單聯繫工程師處理
    public static String SMS_OUT_OF_SERVICE = "isv.OUT_OF_SERVICE";
    // 短信模板不合法
    public static String SMS_TEMPLATE_ILLEGAL = "isv.SMS_TEMPLATE_ILLEGAL";
    // 短信簽名不合法
    public static String SMS_SIGNATURE_ILLEGAL = "isv.SMS_SIGNATURE_ILLEGAL";
    // 參數異常
    public static String SMS_INVALID_PARAMETERS = "isv.INVALID_PARAMETERS";
    // 非法手機號
    public static String SMS_MOBILE_NUMBER_ILLEGAL = "isv.MOBILE_NUMBER_ILLEGAL";
    // 模板缺乏變量
    public static String SMS_TEMPLATE_MISSING_PARAMETERS = "isv.TEMPLATE_MISSING_PARAMETERS";
    // 業務限流
    public static String SMS_BUSINESS_LIMIT_CONTROL = "isv.BUSINESS_LIMIT_CONTROL";
    // 帳戶餘額不足
    public static String SMS_AMOUNT_NOT_ENOUGH = "isv.AMOUNT_NOT_ENOUGH";
}
複製代碼

三、調用,測試 SendSmsResponse response = SmsUtil.sendIdentifyingCode(mobile,sixCode); 調試成功,後臺返回給app Json提示:{"code":0,"data":{},"message":"發送成功"} 手機端收到短信: github

驗證碼

3、使用驗證碼註冊或者登陸

在後端生成隨機六位數,發送給手機端,而且同時插入驗證碼數據庫。
登陸或者註冊時判斷表內手機號和驗證碼的對應關係。
登陸成功或者註冊成功後,將消費掉的驗證碼從數據庫刪除。web

4、充值並查看短信到達率

集成成功後,測試後會發現錯誤碼提示爲帳戶餘額不足。
這時要去阿里的短信控制檯,進行充值,在沒有購買套餐包的狀況下,一條短信爲0.045元,也就是4分5。
仍是蠻貴的,衝個10塊錢省着用吧。數據庫

5、總結

阿里短信的到達率仍是挺高的。發送了十幾條,沒有一條失敗的。json


長路漫漫,菜不是原罪,墮落纔是原罪。
個人CSDN:blog.csdn.net/wuyangyang_…
個人簡書:www.jianshu.com/u/20c2f2c35…
個人掘金:juejin.im/user/58009b…
個人GitHub:github.com/wuyang2000
我的網站:www.xiyangkeji.cn
我的app(茜茜)蒲公英鏈接:www.pgyer.com/KMdT
個人微信公衆號:茜洋 (按期推送優質技術文章,歡迎關注)
Android技術交流羣:691174792後端

以上文章都可轉載,轉載請註明原創。api

相關文章
相關標籤/搜索