首先要導入阿里雲的依賴
<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}