1、引入maven依賴:
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.0.6</version> <!-- 注:如提示報錯,先更新基礎包版,無法解決可聯系技術支援 -->
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>1.1.0</version>
</dependency>
2、參數常量定義 SmsKeyConstant.java :
package com.ygxk.lws.core.sms;
/**
* @Description 阿裡雲短信服務使用的Key的常量定義
* @Author Li Wei Shan
* @Date 2020-11-17 13:35
* @Version 1.0
**/
public class SmsKeyConstant {
public static final String PRODUCT = "Dysmsapi";//短信API産品名稱(短信産品名固定,無需修改)
public static final String DOMAIN = "dysmsapi.aliyuncs.com";//短信API産品域名(接口位址固定,無需修改)
//替換成你的AK
public static final String ACCESS_KEY_ID = "xxx";//你的accessKeyId
public static final String ACCESS_KEY_SECRET = "xxx";//你的accessKeySecret
}
3、短信服務工具類 SmsService.java :
package com.ygxk.lws.core.sms;
import com.alibaba.fastjson.JSONObject;
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;
/**
* @Description 阿裡雲短信服務
* @Author Li Wei Shan
* @Date 2020-11-17 13:36
* @Version 1.0
**/
public class SmsService {
/**
* @Description 阿裡雲短信服務 發送短信驗證碼
* @Author Li Wei Shan
* @Date 2020/11/17
* @Version 1.0
* @return*/
public static String sendCode(String mobile, String code, int type) throws ClientException {
String setTemplateCode;
//根據類型選擇短信模闆
switch (type) {
case 1://注冊
setTemplateCode = "SMS_155275111";
break;
case 2://找回密碼
setTemplateCode = "SMS_155275222";
break;
default :
setTemplateCode = "SMS_155275333";
break;
}
//設定逾時時間-可自行調整
System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
System.setProperty("sun.net.client.defaultReadTimeout", "10000");
//初始化ascClient,暫時不支援多region(請勿修改)
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", SmsKeyConstant.ACCESS_KEY_ID,
SmsKeyConstant.ACCESS_KEY_SECRET);
DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", SmsKeyConstant.PRODUCT, SmsKeyConstant.DOMAIN);
IAcsClient acsClient = new DefaultAcsClient(profile);
//組裝請求對象
SendSmsRequest request = new SendSmsRequest();
//使用post送出
request.setMethod(MethodType.POST);
//必填:待發送手機号。支援以逗号分隔的形式進行批量調用,批量上限為1000個手機号碼,批量調用相對于單條調用及時性稍有延遲,驗證碼類型的短信推薦使用單條調用的方式;發送國際/港澳台消息時,接收号碼格式為國際區号+号碼,如“85200000000”
request.setPhoneNumbers(mobile);
//必填:短信簽名-可在短信控制台中找到
request.setSignName("你的短信簽名");
//必填:短信模闆-可在短信控制台中找到,發送國際/港澳台消息時,請使用國際/港澳台短信模版
request.setTemplateCode(setTemplateCode);
//可選:模闆中的變量替換JSON串,如模闆内容為"親愛的${name},您的驗證碼為${code}"時,此處的值為
//友情提示:如果JSON中需要帶換行符,請參照标準的JSON協定對換行符的要求,比如短信内容中包含\r\n的情況在JSON中需要表示成\\r\\n,否則會導緻JSON在服務端解析失敗
//參考:request.setTemplateParam("{\"變量1\":\"值1\",\"變量2\":\"值2\",\"變量3\":\"值3\"}")
//短信驗證碼
JSONObject jsonObject = new JSONObject();
jsonObject.put("code",code);
request.setTemplateParam(String.valueOf(jsonObject));
//可選-上行短信擴充碼(擴充碼字段控制在7位或以下,無特殊需求使用者請忽略此字段)
//request.setSmsUpExtendCode("90997");
//可選:outId為提供給業務方擴充字段,最終在短信回執消息中将此值帶回給調用者
request.setOutId(mobile);
//請求失敗這裡會抛ClientException異常
SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
return sendSmsResponse.getCode();
}
}