新增百度短信发送
This commit is contained in:
parent
40ef9fbe27
commit
200df01713
@ -22,10 +22,6 @@
|
||||
<groupId>cn.zyjblogs.starter</groupId>
|
||||
<artifactId>zyjblogs-common-spring-boot-starter</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.aliyun</groupId>
|
||||
<artifactId>alibabacloud-dysmsapi20170525</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>cn.zyjblogs.starter</groupId>
|
||||
<artifactId>zyjblogs-mybatisplus-spring-boot-starter</artifactId>
|
||||
@ -38,10 +34,7 @@
|
||||
<groupId>cn.zyjblogs.starter</groupId>
|
||||
<artifactId>zyjblogs-oauth-spring-boot-starter</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.tencentcloudapi</groupId>
|
||||
<artifactId>tencentcloud-sdk-java-sms</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<artifactId>zyjblogs-web-spring-boot-starter</artifactId>
|
||||
<groupId>cn.zyjblogs.starter</groupId>
|
||||
@ -54,5 +47,39 @@
|
||||
<groupId>com.alibaba.fastjson2</groupId>
|
||||
<artifactId>fastjson2</artifactId>
|
||||
</dependency>
|
||||
<!--=============================sms短信sdk begin========================== -->
|
||||
|
||||
<!-- 阿里云-->
|
||||
<dependency>
|
||||
<groupId>com.aliyun</groupId>
|
||||
<artifactId>alibabacloud-dysmsapi20170525</artifactId>
|
||||
</dependency>
|
||||
<!-- 腾讯云-->
|
||||
<dependency>
|
||||
<groupId>com.tencentcloudapi</groupId>
|
||||
<artifactId>tencentcloud-sdk-java-sms</artifactId>
|
||||
</dependency>
|
||||
<!-- https://mvnrepository.com/artifact/com.baidubce/bce-java-sdk -->
|
||||
<dependency>
|
||||
<groupId>com.baidubce</groupId>
|
||||
<artifactId>bce-java-sdk</artifactId>
|
||||
<version>0.10.253</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<artifactId>log4j</artifactId>
|
||||
<groupId>log4j</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>slf4j-log4j12</artifactId>
|
||||
<groupId>org.slf4j</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>org.apache.hbase</groupId>
|
||||
<artifactId>hbase-client</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
|
||||
<!--=============================sms短信sdk end========================== -->
|
||||
</dependencies>
|
||||
</project>
|
@ -4,6 +4,7 @@ package cn.zyjblogs.sms.configuration;
|
||||
import cn.zyjblogs.sms.provider.CompositeSmsGranter;
|
||||
import cn.zyjblogs.sms.provider.SmsGranter;
|
||||
import cn.zyjblogs.sms.provider.aliyun.AliSmsHandleGranter;
|
||||
import cn.zyjblogs.sms.provider.baidu.BaiduBceSmsHandleGranter;
|
||||
import cn.zyjblogs.sms.provider.tencent.TenSmsHandleGranter;
|
||||
import cn.zyjblogs.sms.task.constant.ProviderType;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
@ -22,6 +23,7 @@ public class SmsConfiguration {
|
||||
List<SmsGranter> list = new ArrayList<>();
|
||||
list.add(new AliSmsHandleGranter(ProviderType.ALI));
|
||||
list.add(new TenSmsHandleGranter(ProviderType.TENCENT));
|
||||
list.add(new BaiduBceSmsHandleGranter(ProviderType.BAIDU));
|
||||
return new CompositeSmsGranter(list);
|
||||
}
|
||||
}
|
||||
|
@ -8,10 +8,27 @@ import cn.zyjblogs.starter.common.exception.AbstractBusinessException;
|
||||
*/
|
||||
public class SmsRuntimeException extends AbstractBusinessException {
|
||||
|
||||
private String code;
|
||||
private String requestId;
|
||||
|
||||
public String getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
public String getRequestId() {
|
||||
return requestId;
|
||||
}
|
||||
|
||||
public SmsRuntimeException() {
|
||||
super();
|
||||
}
|
||||
|
||||
public SmsRuntimeException(String message, String code, String requestId) {
|
||||
super(message);
|
||||
this.code = code;
|
||||
this.requestId = requestId;
|
||||
}
|
||||
|
||||
public SmsRuntimeException(String message) {
|
||||
super(message);
|
||||
}
|
||||
|
@ -2,10 +2,11 @@ package cn.zyjblogs.sms.provider;
|
||||
|
||||
|
||||
import cn.zyjblogs.sms.common.SmsRequest;
|
||||
import cn.zyjblogs.sms.common.SmsResponse;
|
||||
import cn.zyjblogs.sms.provider.baidu.BaiduBceSmsHandleGranter;
|
||||
import cn.zyjblogs.sms.task.constant.ProviderType;
|
||||
import cn.zyjblogs.sms.task.constant.TaskStatus;
|
||||
import cn.zyjblogs.sms.task.dto.TaskResultDTO;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedList;
|
||||
@ -38,7 +39,7 @@ public class CompositeSmsGranter implements SmsGranter {
|
||||
if (granter1 != null) {
|
||||
return granter1.sendSms(providerType, smsRequest);
|
||||
}
|
||||
return new TaskResultDTO(new LinkedList<>(), TaskStatus.SUCCESS);
|
||||
return new TaskResultDTO(new LinkedList<>(), TaskStatus.FAIL);
|
||||
}
|
||||
|
||||
|
||||
|
@ -19,6 +19,7 @@ import com.aliyun.sdk.service.dysmsapi20170525.models.SendSmsResponseBody;
|
||||
import darabonba.core.client.ClientOverrideConfiguration;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
@ -34,7 +35,9 @@ import java.util.concurrent.CompletableFuture;
|
||||
@Slf4j
|
||||
public class AliSmsHandleGranter extends AbstractSmsGranter {
|
||||
private static final ProviderType PROVIDER_TYPE = ProviderType.ALI;
|
||||
|
||||
public AliSmsHandleGranter() {
|
||||
super(PROVIDER_TYPE);
|
||||
}
|
||||
public AliSmsHandleGranter(ProviderType providerType) {
|
||||
super(providerType);
|
||||
}
|
||||
|
@ -0,0 +1,139 @@
|
||||
package cn.zyjblogs.sms.provider.baidu;
|
||||
|
||||
import cn.zyjblogs.sms.common.SmsRequest;
|
||||
import cn.zyjblogs.sms.common.SmsResponse;
|
||||
import cn.zyjblogs.sms.exception.SmsRuntimeException;
|
||||
import cn.zyjblogs.sms.provider.AbstractSmsGranter;
|
||||
import cn.zyjblogs.sms.provider.SmsGranter;
|
||||
import cn.zyjblogs.sms.task.constant.ProviderType;
|
||||
import cn.zyjblogs.sms.task.constant.SendStatus;
|
||||
import cn.zyjblogs.sms.task.constant.TaskStatus;
|
||||
import cn.zyjblogs.sms.task.dto.TaskResultDTO;
|
||||
import cn.zyjblogs.starter.common.utils.collect.Lists;
|
||||
import cn.zyjblogs.starter.common.utils.string.StringUtils;
|
||||
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import com.baidubce.BceServiceException;
|
||||
import com.baidubce.auth.DefaultBceCredentials;
|
||||
import com.baidubce.services.sms.SmsClient;
|
||||
import com.baidubce.services.sms.SmsClientConfiguration;
|
||||
import com.baidubce.services.sms.model.SendMessageItem;
|
||||
import com.baidubce.services.sms.model.SendMessageV3Request;
|
||||
import com.baidubce.services.sms.model.SendMessageV3Response;
|
||||
import lombok.SneakyThrows;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* @author zhuyijun
|
||||
*/
|
||||
public class BaiduBceSmsHandleGranter extends AbstractSmsGranter {
|
||||
private final Logger log = LoggerFactory.getLogger(BaiduBceSmsHandleGranter.class);
|
||||
private static final ProviderType PROVIDER_TYPE = ProviderType.BAIDU;
|
||||
public BaiduBceSmsHandleGranter() {
|
||||
super(PROVIDER_TYPE);
|
||||
}
|
||||
public BaiduBceSmsHandleGranter(ProviderType providerType) {
|
||||
super(providerType);
|
||||
}
|
||||
private static final String ENDPOINT = "http://smsv3.bj.baidubce.com";
|
||||
|
||||
@Override
|
||||
public TaskResultDTO sendSms(SmsRequest smsRequest) {
|
||||
return getSmsResponse(smsRequest);
|
||||
}
|
||||
|
||||
|
||||
private TaskResultDTO getSmsResponse(SmsRequest smsRequest) {
|
||||
SmsClient client = createClient(smsRequest);
|
||||
SendMessageV3Request sendSmsRequest = new SendMessageV3Request();
|
||||
sendSmsRequest.setTemplate(smsRequest.getTemplateCode());
|
||||
sendSmsRequest.setContentVar(parseParam(smsRequest.getTemplateParams()));
|
||||
sendSmsRequest.setSignatureId(smsRequest.getSignName());
|
||||
sendSmsRequest.setCustom(smsRequest.getTaskId());
|
||||
List<List<String>> phones = Lists.partition(smsRequest.getTelNums(), 200);
|
||||
try {
|
||||
List<SmsResponse> responses = new LinkedList<>();
|
||||
for (List<String> phone : phones) {
|
||||
sendSmsRequest.setMobile(String.join(",",phone));
|
||||
SendMessageV3Response sendMessageV3Response = client.sendMessage(sendSmsRequest);
|
||||
if (sendMessageV3Response != null && sendMessageV3Response.isSuccess()) {
|
||||
List<SendMessageItem> data = sendMessageV3Response.getData();
|
||||
for (SendMessageItem sendStatus : data) {
|
||||
responses.add(SmsResponse.builder()
|
||||
.code(sendStatus.getCode())
|
||||
.phoneNumber(sendStatus.getMobile())
|
||||
.bizId(sendStatus.getMessageId())
|
||||
.sendStatus(ProviderType.BAIDU.getTaskStatus(sendStatus.getCode()))
|
||||
.ext(smsRequest.getTaskId())
|
||||
.message(sendStatus.getMessage())
|
||||
.build());
|
||||
}
|
||||
}else if (sendMessageV3Response != null && !sendMessageV3Response.isSuccess()){
|
||||
throw new SmsRuntimeException(sendMessageV3Response.getMessage(),sendMessageV3Response.getRequestId(),sendMessageV3Response.getCode());
|
||||
} else {
|
||||
throw new SmsRuntimeException("发送失败","-1","-1");
|
||||
}
|
||||
}
|
||||
return new TaskResultDTO(responses, TaskStatus.SUCCESS);
|
||||
}catch (SmsRuntimeException e) {
|
||||
log.error("发送短信失败 错误信息:{} ",e.getMessage());
|
||||
List<String> telNum1 = smsRequest.getTelNums();
|
||||
List<SmsResponse> responses = new LinkedList<>();
|
||||
for (String phone : telNum1) {
|
||||
responses.add(SmsResponse.builder()
|
||||
.code(e.getCode())
|
||||
.sendStatus(SendStatus.FAIL)
|
||||
.phoneNumber(phone)
|
||||
.bizId(e.getRequestId())
|
||||
.ext(smsRequest.getTaskId())
|
||||
.message(e.getMessage())
|
||||
.build());
|
||||
}
|
||||
return new TaskResultDTO(responses, TaskStatus.FAIL);
|
||||
} catch (Exception e) {
|
||||
log.error("发送短信失败 错误信息:{} ",e.getMessage());
|
||||
List<String> telNum1 = smsRequest.getTelNums();
|
||||
List<SmsResponse> responses = new LinkedList<>();
|
||||
for (String phone : telNum1) {
|
||||
responses.add(SmsResponse.builder()
|
||||
.code("-1")
|
||||
.sendStatus(SendStatus.FAIL)
|
||||
.phoneNumber(phone)
|
||||
.bizId("-1")
|
||||
.ext(smsRequest.getTaskId())
|
||||
.message(e.getMessage())
|
||||
.build());
|
||||
}
|
||||
return new TaskResultDTO(responses, TaskStatus.FAIL);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@SneakyThrows
|
||||
public static SmsClient createClient(SmsRequest smsRequest) {
|
||||
SmsClientConfiguration config = new SmsClientConfiguration();
|
||||
config.setCredentials(new DefaultBceCredentials(smsRequest.getAccessKey(),smsRequest.getAccessSecret()));
|
||||
if (!StringUtils.isEmpty(smsRequest.getEndPoint())){
|
||||
config.setEndpoint(smsRequest.getEndPoint());
|
||||
} else {
|
||||
config.setEndpoint(ENDPOINT);
|
||||
}
|
||||
return new SmsClient(config);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public SmsGranter getGranter(ProviderType providerType) {
|
||||
if (PROVIDER_TYPE.equals(providerType)) {
|
||||
return this;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
@ -22,6 +22,7 @@ import com.tencentcloudapi.sms.v20210111.models.SendStatus;
|
||||
import lombok.SneakyThrows;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
@ -34,9 +35,11 @@ import java.util.Set;
|
||||
* @author zhuyijun
|
||||
*/
|
||||
public class TenSmsHandleGranter extends AbstractSmsGranter {
|
||||
Logger log = LoggerFactory.getLogger(TenSmsHandleGranter.class);
|
||||
private static Logger log = LoggerFactory.getLogger(TenSmsHandleGranter.class);
|
||||
private static final ProviderType PROVIDER_TYPE = ProviderType.TENCENT;
|
||||
|
||||
public TenSmsHandleGranter() {
|
||||
super(PROVIDER_TYPE);
|
||||
}
|
||||
public TenSmsHandleGranter(ProviderType providerType) {
|
||||
super(providerType);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user