diff --git a/ballcat-starters/ballcat-spring-boot-starter-sms/pom.xml b/ballcat-starters/ballcat-spring-boot-starter-sms/pom.xml index 00d7114f788033595512423b72155e15e4f8a5d8..5e94420de7d00025a8f8cd04afb8f52e5d4f0255 100644 --- a/ballcat-starters/ballcat-spring-boot-starter-sms/pom.xml +++ b/ballcat-starters/ballcat-spring-boot-starter-sms/pom.xml @@ -40,7 +40,13 @@ com.tencentcloudapi tencentcloud-sdk-java - 3.1.42 + 3.1.270 + + + + com.aliyun + dysmsapi20170525 + 2.0.9 diff --git a/ballcat-starters/ballcat-spring-boot-starter-sms/src/main/java/com/hccake/starter/sms/SmsAutoConfiguration.java b/ballcat-starters/ballcat-spring-boot-starter-sms/src/main/java/com/hccake/starter/sms/SmsAutoConfiguration.java index 9f19c3c85408f62e16ef529cc500e3b31481f211..4ae38e61418e5f5120cd460779620058b389cc57 100644 --- a/ballcat-starters/ballcat-spring-boot-starter-sms/src/main/java/com/hccake/starter/sms/SmsAutoConfiguration.java +++ b/ballcat-starters/ballcat-spring-boot-starter-sms/src/main/java/com/hccake/starter/sms/SmsAutoConfiguration.java @@ -1,6 +1,7 @@ package com.hccake.starter.sms; import com.fasterxml.jackson.databind.ObjectMapper; +import com.hccake.starter.sms.impl.AliyunSenderImpl; import com.hccake.starter.sms.impl.TencentSenderImpl; import com.hccake.starter.sms.impl.TianYiHongSenderImpl; import com.hccake.starter.sms.properties.SmsProperties; @@ -12,6 +13,7 @@ import org.springframework.context.annotation.Bean; /** * @author lingting 2020/4/26 9:45 + * @author 疯狂的狮子Li 2022-04-21 */ @EnableConfigurationProperties({ SmsProperties.class }) public class SmsAutoConfiguration { @@ -33,4 +35,11 @@ public class SmsAutoConfiguration { return new TianYiHongSenderImpl(properties); } + @Bean + @ConditionalOnMissingBean(SmsSender.class) + @ConditionalOnProperty(name = "ballcat.sms.type", havingValue = "ALIYUN") + public SmsSender aliyunSmsSender(ObjectMapper om) { + return new AliyunSenderImpl(properties, om); + } + } diff --git a/ballcat-starters/ballcat-spring-boot-starter-sms/src/main/java/com/hccake/starter/sms/SmsSenderParams.java b/ballcat-starters/ballcat-spring-boot-starter-sms/src/main/java/com/hccake/starter/sms/SmsSenderParams.java index ac781da5e0b91d02397605eeae3e25e1e369eeb4..bd488e1568cc05449520e0b93a5456dee3b94183 100644 --- a/ballcat-starters/ballcat-spring-boot-starter-sms/src/main/java/com/hccake/starter/sms/SmsSenderParams.java +++ b/ballcat-starters/ballcat-spring-boot-starter-sms/src/main/java/com/hccake/starter/sms/SmsSenderParams.java @@ -6,13 +6,11 @@ import lombok.Setter; import lombok.ToString; import lombok.experimental.Accessors; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.util.*; /** * @author lingting 2020/4/26 11:40 + * @author 疯狂的狮子Li 2022-04-21 */ @ToString @Getter @@ -33,6 +31,11 @@ public class SmsSenderParams { */ private List templateParam = new ArrayList<>(); + /** + * 短信模板参数 aliyun专用 + */ + private Map aliyunTemplateParam = new HashMap<>(); + /** * 短信内容 */ diff --git a/ballcat-starters/ballcat-spring-boot-starter-sms/src/main/java/com/hccake/starter/sms/SmsSenderResult.java b/ballcat-starters/ballcat-spring-boot-starter-sms/src/main/java/com/hccake/starter/sms/SmsSenderResult.java index f7c530ffe9a64be68892da869695fbebfcbafaf7..cd352a05f63ad9b36339a9fe0b1953b24fdcf5d9 100644 --- a/ballcat-starters/ballcat-spring-boot-starter-sms/src/main/java/com/hccake/starter/sms/SmsSenderResult.java +++ b/ballcat-starters/ballcat-spring-boot-starter-sms/src/main/java/com/hccake/starter/sms/SmsSenderResult.java @@ -14,6 +14,7 @@ import lombok.experimental.Accessors; * 短信发送结果 * * @author lingting 2020/4/26 13:22 + * @author 疯狂的狮子Li 2022-04-21 */ @Getter @Accessors(chain = true) @@ -121,6 +122,18 @@ public class SmsSenderResult { return result; } + @SneakyThrows + public static SmsSenderResult generateAliyun(String resp, String req, Set phoneNumbers) { + SmsSenderResult result = new SmsSenderResult(); + result.res = resp; + // 没有异常就是成功! + result.success = true; + result.platform = TypeEnum.ALIYUN.name(); + result.target = JsonUtils.toJson(phoneNumbers); + result.req = req; + return result; + } + @SneakyThrows @Override public String toString() { diff --git a/ballcat-starters/ballcat-spring-boot-starter-sms/src/main/java/com/hccake/starter/sms/enums/TypeEnum.java b/ballcat-starters/ballcat-spring-boot-starter-sms/src/main/java/com/hccake/starter/sms/enums/TypeEnum.java index bc7e6df7358c2ddd28c4f74b5d20f60dac333e9a..2f9579abf313f68f86e3a3e76973bd0cc5279da2 100644 --- a/ballcat-starters/ballcat-spring-boot-starter-sms/src/main/java/com/hccake/starter/sms/enums/TypeEnum.java +++ b/ballcat-starters/ballcat-spring-boot-starter-sms/src/main/java/com/hccake/starter/sms/enums/TypeEnum.java @@ -2,6 +2,7 @@ package com.hccake.starter.sms.enums; /** * @author lingting 2020-08-30 22:20 + * @author 疯狂的狮子Li 2022-04-21 */ public enum TypeEnum { @@ -15,6 +16,8 @@ public enum TypeEnum { TIAN_YI_HONG, + ALIYUN, + ; } diff --git a/ballcat-starters/ballcat-spring-boot-starter-sms/src/main/java/com/hccake/starter/sms/impl/AliyunSenderImpl.java b/ballcat-starters/ballcat-spring-boot-starter-sms/src/main/java/com/hccake/starter/sms/impl/AliyunSenderImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..7aa0d45eb97129dd06fbdc5de7d9f5966e8c1275 --- /dev/null +++ b/ballcat-starters/ballcat-spring-boot-starter-sms/src/main/java/com/hccake/starter/sms/impl/AliyunSenderImpl.java @@ -0,0 +1,63 @@ +package com.hccake.starter.sms.impl; + +import cn.hutool.core.collection.CollUtil; +import com.aliyun.dysmsapi20170525.Client; +import com.aliyun.dysmsapi20170525.models.SendSmsRequest; +import com.aliyun.dysmsapi20170525.models.SendSmsResponse; +import com.aliyun.teaopenapi.models.Config; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.hccake.ballcat.common.util.JsonUtils; +import com.hccake.starter.sms.SmsSender; +import com.hccake.starter.sms.SmsSenderParams; +import com.hccake.starter.sms.SmsSenderResult; +import com.hccake.starter.sms.enums.TypeEnum; +import com.hccake.starter.sms.properties.SmsProperties; +import com.hccake.starter.sms.properties.extra.Aliyun; +import lombok.SneakyThrows; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; + +import java.util.*; + +/** + * @author 疯狂的狮子Li 2022-04-21 + */ +@ConditionalOnProperty(name = "ballcat.sms.type", havingValue = "ALIYUN") +public class AliyunSenderImpl extends BaseServiceImpl implements SmsSender { + + private final Client client; + + private final Aliyun aliyun; + + private final ObjectMapper om; + + @SneakyThrows + public AliyunSenderImpl(SmsProperties properties, ObjectMapper om) { + aliyun = properties.getAliyun(); + Config config = new Config() + // 您的AccessKey ID + .setAccessKeyId(aliyun.getAccessKeyId()) + // 您的AccessKey Secret + .setAccessKeySecret(aliyun.getAccessKeySecret()) + // 访问的域名 + .setEndpoint(aliyun.getEndpoint()); + client = new Client(config); + this.om = om; + } + + @Override + public SmsSenderResult send(SmsSenderParams sp) { + try { + SendSmsRequest req = new SendSmsRequest() + .setPhoneNumbers(CollUtil.join(sp.getPhoneNumbers(), ",")) + .setSignName(aliyun.getSignName()) + .setTemplateCode(aliyun.getTemplateId()) + .setTemplateParam(om.writeValueAsString(sp.getAliyunTemplateParam())); + + SendSmsResponse resp = client.sendSms(req); + return SmsSenderResult.generateAliyun(om.writeValueAsString(resp), sp.toString(), sp.getPhoneNumbers()); + } catch (Exception e) { + return errRet(TypeEnum.ALIYUN, sp.getPhoneNumbers(), "阿里云平台发送短信出现异常!", e); + } + } + +} diff --git a/ballcat-starters/ballcat-spring-boot-starter-sms/src/main/java/com/hccake/starter/sms/properties/SmsProperties.java b/ballcat-starters/ballcat-spring-boot-starter-sms/src/main/java/com/hccake/starter/sms/properties/SmsProperties.java index 123704169d8412c77d075911a88de4d2e5975dfa..3f13a851e7c0d8426637882241ded1d7e795438f 100644 --- a/ballcat-starters/ballcat-spring-boot-starter-sms/src/main/java/com/hccake/starter/sms/properties/SmsProperties.java +++ b/ballcat-starters/ballcat-spring-boot-starter-sms/src/main/java/com/hccake/starter/sms/properties/SmsProperties.java @@ -2,6 +2,7 @@ package com.hccake.starter.sms.properties; import com.hccake.starter.sms.enums.TypeEnum; import com.hccake.starter.sms.properties.extra.Account; +import com.hccake.starter.sms.properties.extra.Aliyun; import com.hccake.starter.sms.properties.extra.Tencent; import com.hccake.starter.sms.properties.extra.TianYiHong; import lombok.Data; @@ -12,6 +13,7 @@ import java.util.Map; /** * @author lingting 2020/4/26 9:43 + * @author 疯狂的狮子Li 2022-04-21 */ @Data @ConfigurationProperties(prefix = "ballcat.sms") @@ -54,4 +56,10 @@ public class SmsProperties { @NestedConfigurationProperty private TianYiHong tianYiHong; + /** + * 阿里云所需额外参数 + */ + @NestedConfigurationProperty + private Aliyun aliyun; + } diff --git a/ballcat-starters/ballcat-spring-boot-starter-sms/src/main/java/com/hccake/starter/sms/properties/extra/Aliyun.java b/ballcat-starters/ballcat-spring-boot-starter-sms/src/main/java/com/hccake/starter/sms/properties/extra/Aliyun.java new file mode 100644 index 0000000000000000000000000000000000000000..9be5e1be367ee7f1f0403f6ec5d3b05c253dad90 --- /dev/null +++ b/ballcat-starters/ballcat-spring-boot-starter-sms/src/main/java/com/hccake/starter/sms/properties/extra/Aliyun.java @@ -0,0 +1,30 @@ +package com.hccake.starter.sms.properties.extra; + +import lombok.Data; + +/** + * @author 疯狂的狮子Li 2022-04-21 + */ +@Data +public class Aliyun { + + /** + * 配置节点 + */ + private String endpoint = "dysmsapi.aliyuncs.com"; + + private String accessKeyId; + + private String accessKeySecret; + + /* + * 短信签名名称 + */ + private String signName; + + /** + * 短信模板ID + */ + private String templateId; + +}