使用阿里云短信服務(wù)有兩種方式
API 發(fā)送和 控制臺(tái)發(fā)送,控制臺(tái)發(fā)送到話有太多限制,這里我們使用API 通過 調(diào)用服務(wù)端代碼進(jìn)行發(fā)送。
整體結(jié)構(gòu)如下:
導(dǎo)入依賴
<!--阿里云短信發(fā)送-->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>3.2.6</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>1.0.0</version>
</dependency>
外放接口
/**
* 發(fā)送手機(jī)驗(yàn)證碼
*/
@ApiOperation(value = "發(fā)送手機(jī)驗(yàn)證碼", notes = "發(fā)送手機(jī)驗(yàn)證碼")
@PostMapping("/sendSMS")
public ApiResult sendSMS(@RequestParam("phone") String phone) {
//六位數(shù)隨機(jī)數(shù)
long rand = (long)(Math.random()*900000+100000);
String mCode = String.valueOf(rand);
boolean mS = SengSmsUtils.sendSMS(phone,mCode);
//返回?cái)?shù)據(jù)
SmsReturnVO smsReturnVO = new SmsReturnVO();
smsReturnVO.setSendSuccess(true);
smsReturnVO.setMCode(MD5Utils.toMD5(mCode));
if (!mS){
smsReturnVO.setSendSuccess(false);
}
return ApiResult.ok(smsReturnVO);
}
MD5加密
/**
* Md5加密,加密規(guī)則與客戶端一致*/
public class MD5Utils {
public static String toMD5(String s){
String mStr = "頭部特殊字符" + s + "尾部特殊字符";
try {
mStr = DigestUtils.md5DigestAsHex(mStr.getBytes(StandardCharsets.UTF_8));
} catch (Exception e) {
e.printStackTrace();
}
return mStr;
}
}
發(fā)送工具類
/**
* 發(fā)送短信通知
* 多發(fā)
*List<String> mobiles = new ArrayList<>();
*mobiles.add("15*******13");
*mobiles.add("13*******27");
*mobiles.add("17*******56");
*String s= getSplitString(mobiles);
*/
public class SengSmsUtils {
// 簽名
private static final String signName = "簽名管理-簽名名稱";
// 模板
private static final String templateCode = "模板管理-模板CODE";
// 阿里云短信配置信息
private static final String accessKeyId = "AccessKey管理-創(chuàng)建AccessKey";
private static final String accessKeySecret = "創(chuàng)建后會(huì)顯示";
private static final String REGION_ID = "cn-hangzhou"; //固定不用改
private static final String PRODUCT = "Dysmsapi"; //固定不用改
private static final String DOMAIN = "dysmsapi.aliyuncs.com"; //固定不用改
public static boolean sendSMS(String mobile,String mCode) {
try {
IClientProfile profile = DefaultProfile.getProfile(REGION_ID, accessKeyId, accessKeySecret);
DefaultProfile.addEndpoint(REGION_ID, REGION_ID, PRODUCT, DOMAIN);
IAcsClient acsClient = new DefaultAcsClient(profile);
SendSmsRequest request = new SendSmsRequest();
request.setMethod(MethodType.POST);
// 手機(jī)號可以單個(gè)也可以多個(gè)(多個(gè)用逗號隔開,如:15*******13,13*******27,17*******56)
request.setPhoneNumbers(mobile);
request.setSignName(signName);
request.setTemplateCode(templateCode);
request.setTemplateParam("{\"code\":"+"'"+mCode+"'"+"}");
SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
if ((sendSmsResponse.getCode() != null) && (sendSmsResponse.getCode().equals("OK"))) {
return true;
} else {
return false;
}
} catch (ClientException e) {
return false;
}
}
/**
* 獲取逗號分隔的拼接字符串
*/
public static String getSplitString(List<String> str) {
StringBuilder newS = new StringBuilder();
if (str != null && str.size() > 0) {
for (String s : str) {
newS.append(s).append(",");
}
}
if (newS.length() > 0){
newS.deleteCharAt(newS.length() - 1);// 刪除最后一個(gè)多余的逗號
}
return newS.toString();
}
}
接口返回?cái)?shù)據(jù)
/**
* 發(fā)送驗(yàn)證碼返回?cái)?shù)據(jù)類*/
@Data
public class SmsReturnVO {
//是否發(fā)送成功
private Boolean sendSuccess;
//發(fā)送成功攜帶驗(yàn)證碼
private String mCode;
}
此時(shí),調(diào)用接口后,會(huì)將加密后的驗(yàn)證碼返回給接口調(diào)用端,接口調(diào)用端 在輸入框數(shù)據(jù)驗(yàn)證碼后進(jìn)行MD5 加密,與服務(wù)端給的對比即可 (加密規(guī)則要與服務(wù)端對應(yīng))
補(bǔ)充,在發(fā)送工具類中的參數(shù)在阿里云中如何查看
簽名管理-簽名名稱
模板管理-模板CODE
文章來源:http://www.zghlxwxcb.cn/news/detail-830931.html
AccessKey管理-創(chuàng)建AccessKey
文章來源地址http://www.zghlxwxcb.cn/news/detail-830931.html
完結(jié),撒花
到了這里,關(guān)于使用阿里云發(fā)送短信的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!