不管app仍是web都會用到短信驗證功能,阿里提供了優質的短信服務。
特此將集成步驟記錄,方便之後查閱html
一、首先註冊阿里開放平臺開發者,並進行實名認證
二、開通阿里短信服務
三、在短信控制檯點擊Access Key按鈕查看 Access key和Access key Secretjava
一、下載阿里短信的兩個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
在後端生成隨機六位數,發送給手機端,而且同時插入驗證碼數據庫。
登陸或者註冊時判斷表內手機號和驗證碼的對應關係。
登陸成功或者註冊成功後,將消費掉的驗證碼從數據庫刪除。web
集成成功後,測試後會發現錯誤碼提示爲帳戶餘額不足。
這時要去阿里的短信控制檯,進行充值,在沒有購買套餐包的狀況下,一條短信爲0.045元,也就是4分5。
仍是蠻貴的,衝個10塊錢省着用吧。數據庫
阿里短信的到達率仍是挺高的。發送了十幾條,沒有一條失敗的。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