首先要導入阿里雲的依賴
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.1.1</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>1.0.0</version>
</dependency>
編寫工具類
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Slf4j
@Component
public class SmsUtils
{
//產品名稱:阿里雲短信API產品,開發者無需替換
private static final String product = "Dysmsapi";
//產品域名,開發者無需替換
private static final String domain = "dysmsapi.aliyuncs.com";
/**
* 阿里短信服務接口
*
*/
public static SendSmsResponse sendSms(String accessKeyId, String accessKeySecret,String phone ,String signName ,String templateCode,String data) {
SendSmsResponse sendSmsResponse = null;
try {
//可自助調整超時時間
System.setProperty("sun.net.client.defaultConnectTimeout", "5000");
System.setProperty("sun.net.client.defaultReadTimeout", "5000");
//初始化acsClient,暫不支持region化
/ //accessKeyId 控制台找
//accessKeySecret 在創建用戶的時候與上面的KeyId一起出現,只出現一次,第一次要記得保存,否則后面找不到需要重新創建
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(phone);
//必填:短信簽名-在短信控制台中找
request.setSignName(signName);
//必填:短信模板-在短信控制台中找
request.setTemplateCode(templateCode);
//可選:要發送的內容,這里data要注意格式,是map格式轉為String的
request.setTemplateParam(data);
//可選:outId為提供給業務方擴展字段,最終在短信回執消息中將此值帶回給調用者
request.setOutId("0");
//此處可能會拋出異常
sendSmsResponse = acsClient.getAcsResponse(request);
} catch (ClientException e) {
log.error("-----------調用失敗--------------");
}
return sendSmsResponse;
}
可寫個測試方法調試
public static void main(String[] args) {
String accessKeyId = "LTxxxxxxxxXXXXXXXUAQ";
String accessKeySecret = "rZNxxxxxxxxXXXXXXXXKC";
String phone = "13xxxxxxx41";
String signName = "xxxx";
String templateCode = "SMS_xxxxxxx";
Map<String, String> map = new HashMap<String, String>();
map.put("code", "888888");
JSONObject obj = JSONObject.fromObject(map);
String data = obj.toString();
try {
SendSmsResponse sendSmsResponse = SmsUtils.sendSms(accessKeyId,accessKeySecret,phone,signName,templateCode,data);
System.out.println("-----------------success------------");
} catch (Exception e) {
System.out.println("--------------fail--------"+e);
}
}
注意:templateCode短信模塊里面的內容,例如:您有新的訂單待處理,當前狀態:${status},訂單摘要:${remark},請及時處理。
這里有兩個參數要傳,map.put("status","xxxx"),map.put("remark","xxx"),這里map的key鍵一定要對應模板的${status}
