New file |
| | |
| | | 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); |
| | | } |
| | | |
| | | } |