|
@@ -0,0 +1,80 @@
|
|
|
+package com.ruoyi.sms.core;
|
|
|
+
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
+import cn.hutool.core.util.ArrayUtil;
|
|
|
+import com.ruoyi.common.utils.StringUtils;
|
|
|
+import com.ruoyi.sms.config.properties.SmsProperties;
|
|
|
+import com.ruoyi.sms.entity.SmsResult;
|
|
|
+import com.ruoyi.sms.exception.SmsException;
|
|
|
+import com.tencentcloudapi.common.Credential;
|
|
|
+import com.tencentcloudapi.common.profile.ClientProfile;
|
|
|
+import com.tencentcloudapi.common.profile.HttpProfile;
|
|
|
+import com.tencentcloudapi.sms.v20190711.SmsClient;
|
|
|
+import com.tencentcloudapi.sms.v20190711.models.SendSmsRequest;
|
|
|
+import com.tencentcloudapi.sms.v20190711.models.SendSmsResponse;
|
|
|
+import com.tencentcloudapi.sms.v20190711.models.SendStatus;
|
|
|
+import lombok.SneakyThrows;
|
|
|
+
|
|
|
+import java.util.Arrays;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.Set;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * Tencent 短信模板
|
|
|
+ *
|
|
|
+ * @author Lion Li
|
|
|
+ * @version 4.2.0
|
|
|
+ */
|
|
|
+public class TencentSmsTemplate implements SmsTemplate {
|
|
|
+
|
|
|
+ private SmsProperties properties;
|
|
|
+
|
|
|
+ private SmsClient client;
|
|
|
+
|
|
|
+ @SneakyThrows(Exception.class)
|
|
|
+ public TencentSmsTemplate(SmsProperties smsProperties) {
|
|
|
+ this.properties = smsProperties;
|
|
|
+ Credential credential = new Credential(smsProperties.getAccessKeyId(), smsProperties.getAccessKeySecret());
|
|
|
+ HttpProfile httpProfile = new HttpProfile();
|
|
|
+ httpProfile.setEndpoint(smsProperties.getEndpoint());
|
|
|
+ ClientProfile clientProfile = new ClientProfile();
|
|
|
+ clientProfile.setHttpProfile(httpProfile);
|
|
|
+ this.client = new SmsClient(credential, "", clientProfile);
|
|
|
+ }
|
|
|
+
|
|
|
+ public SmsResult send(String phones, String templateId, Map<String, String> param) {
|
|
|
+ if (StringUtils.isBlank(phones)) {
|
|
|
+ throw new SmsException("手机号不能为空");
|
|
|
+ }
|
|
|
+ if (StringUtils.isBlank(templateId)) {
|
|
|
+ throw new SmsException("模板ID不能为空");
|
|
|
+ }
|
|
|
+ SendSmsRequest req = new SendSmsRequest();
|
|
|
+ Set<String> set = Arrays.stream(phones.split(",")).map(p -> "+86" + p).collect(Collectors.toSet());
|
|
|
+ req.setPhoneNumberSet(ArrayUtil.toArray(set, String.class));
|
|
|
+ if (CollUtil.isNotEmpty(param)) {
|
|
|
+ req.setTemplateParamSet(ArrayUtil.toArray(param.values(), String.class));
|
|
|
+ }
|
|
|
+ req.setTemplateID(templateId);
|
|
|
+ req.setSign(properties.getSignName());
|
|
|
+ req.setSmsSdkAppid(properties.getSdkAppId());
|
|
|
+ try {
|
|
|
+ SendSmsResponse resp = client.SendSms(req);
|
|
|
+ SmsResult.SmsResultBuilder builder = SmsResult.builder()
|
|
|
+ .isSuccess(true)
|
|
|
+ .message("send success")
|
|
|
+ .response(resp);
|
|
|
+ for (SendStatus sendStatus : resp.getSendStatusSet()) {
|
|
|
+ if (!"Ok".equals(sendStatus.getCode())) {
|
|
|
+ builder.isSuccess(false).message(sendStatus.getMessage());
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return builder.build();
|
|
|
+ } catch (Exception e) {
|
|
|
+ throw new SmsException(e.getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+}
|