package com.panzhihua.sangeshenbian.utils;
|
|
import cn.hutool.core.date.DateUtil;
|
import com.alibaba.fastjson.JSON;
|
import com.aliyun.dysmsapi20170525.Client;
|
import com.aliyun.dysmsapi20170525.models.SendBatchSmsRequest;
|
import com.aliyun.dysmsapi20170525.models.SendBatchSmsResponse;
|
import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
|
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
|
import com.aliyun.teaopenapi.models.Config;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.lang3.StringUtils;
|
|
import java.util.Collections;
|
import java.util.Date;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
|
@Slf4j
|
public class AliSmsUtil {
|
private static final String ACCESS_KEY_ID = "LTAI5t8EwfjWRWs7tJGimAQG";
|
private static final String ACCESS_KEY_SECRET = "UjuTDcXO14dSQ7STg8Pf3idjLqwx1M";
|
private static final String SIGN_NAME = "花城e十";
|
private static final String TIME_OUT_TEMPLATE_CODE = "SMS_479120493";
|
private static final String EXPIRE_TEMPLATE_CODE = "SMS_479510160";
|
/**
|
* 发送诉求超时提醒短信
|
* @param phoneList
|
* @param title
|
*/
|
public static void sendTimeoutMessage(List<String> phoneList, String title) {
|
|
Map<String, String> param = new HashMap<>(3);
|
param.put("title", title);
|
sendBatchSms(phoneList, SIGN_NAME, TIME_OUT_TEMPLATE_CODE, param);
|
}
|
|
/**
|
* 发送诉求临期短信
|
* @param phoneList
|
* @param title
|
* @param closingTime
|
* @param days
|
*/
|
public static void sendExpireMessage(List<String> phoneList, String title, Date closingTime, Integer days) {
|
Map<String, String> param = new HashMap<>(3);
|
param.put("title", title);
|
param.put("time", DateUtil.format(closingTime, "yyyy-MM-dd HH:mm:ss"));
|
param.put("times", String.valueOf(days));
|
sendBatchSms(phoneList, SIGN_NAME, EXPIRE_TEMPLATE_CODE, param);
|
}
|
|
/**
|
* 阿里发送短信
|
*
|
* @param phone
|
* @param signName
|
* @param templateCode
|
* @param param
|
* @return
|
*/
|
private boolean sendSms(String phone, String signName, String templateCode, Map<String, String> param) {
|
// 可自助调整超时时间
|
System.setProperty("sun.net.client.defaultConnectTimeout", "30000");
|
System.setProperty("sun.net.client.defaultReadTimeout", "30000");
|
try {
|
|
// 初始化请求客户端
|
Client client = createClient();
|
|
// 构造请求对象,请填入请求参数值
|
SendSmsRequest sendSmsRequest = new SendSmsRequest()
|
.setPhoneNumbers(phone)
|
.setSignName(signName)
|
.setTemplateCode(templateCode)
|
.setTemplateParam(JSON.toJSONString(param));
|
//if (aliSmsConfig.isDebug()) {
|
// log.info("短信 DEBUG code= {}", param);
|
// return true;
|
//}
|
// 获取响应对象
|
SendSmsResponse sendSmsResponse = client.sendSms(sendSmsRequest);
|
// hint 此处可能会抛出异常,注意catch
|
if (StringUtils.equalsIgnoreCase("ok", sendSmsResponse.getBody().getCode())) {
|
return true;
|
} else {
|
log.error("{}短信发送失败:{}", phone, sendSmsResponse.getBody().getMessage());
|
}
|
} catch (Exception e) {
|
log.error("{}短信发送失败:{}", phone, e.getMessage(),e);
|
throw new RuntimeException("短信发送失败", e);
|
}
|
return false;
|
}
|
private static boolean sendBatchSms(List<String> phones, String signName, String templateCode, Map<String, String> param) {
|
// 可自助调整超时时间
|
System.setProperty("sun.net.client.defaultConnectTimeout", "30000");
|
System.setProperty("sun.net.client.defaultReadTimeout", "30000");
|
try {
|
|
// 初始化请求客户端
|
Client client = createClient();
|
|
// 构造请求对象,请填入请求参数值
|
SendBatchSmsRequest request = new SendBatchSmsRequest()
|
.setPhoneNumberJson(JSON.toJSONString(phones)) // 手机号数组JSON
|
.setSignNameJson(JSON.toJSONString(Collections.nCopies(phones.size(), SIGN_NAME)))
|
.setTemplateCode(templateCode)
|
.setTemplateParamJson(JSON.toJSONString(Collections.nCopies(phones.size(), param))); // 参数数组JSON
|
//if (aliSmsConfig.isDebug()) {
|
// log.info("短信 DEBUG code= {}", param);
|
// return true;
|
//}
|
// 获取响应对象
|
SendBatchSmsResponse sendBatchSmsResponse = client.sendBatchSms(request);
|
// hint 此处可能会抛出异常,注意catch
|
if (StringUtils.equalsIgnoreCase("ok", sendBatchSmsResponse.getBody().getCode())) {
|
return true;
|
} else {
|
log.error("{}短信发送失败:{}", JSON.toJSONString(phones), sendBatchSmsResponse.getBody().getMessage());
|
}
|
} catch (Exception e) {
|
log.error("{}短信发送失败:{}", JSON.toJSONString(phones), e.getMessage(),e);
|
throw new RuntimeException("短信发送失败", e);
|
}
|
return false;
|
}
|
public static Client createClient() throws Exception {
|
Config config = new Config()
|
// 配置 AccessKey ID
|
.setAccessKeyId(ACCESS_KEY_ID)
|
// 配置 AccessKey Secret
|
.setAccessKeySecret(ACCESS_KEY_SECRET);
|
|
// 配置 Endpoint
|
config.endpoint = "dysmsapi.aliyuncs.com";
|
|
return new Client(config);
|
}
|
|
}
|