Commit 52b51254fc1247531f319cdcf1d81dccb3d80d9e
1 parent
515fca5c
云片短信的调试
Showing
5 changed files
with
82 additions
and
9 deletions
src/main/java/cn/iocoder/dashboard/framework/sms/core/client/impl/yunpian/YunpianSmsClient.java
| @@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil; | @@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil; | ||
| 4 | import cn.hutool.core.collection.CollectionUtil; | 4 | import cn.hutool.core.collection.CollectionUtil; |
| 5 | import cn.hutool.core.date.DateUtil; | 5 | import cn.hutool.core.date.DateUtil; |
| 6 | import cn.hutool.core.util.CharsetUtil; | 6 | import cn.hutool.core.util.CharsetUtil; |
| 7 | +import cn.hutool.core.util.StrUtil; | ||
| 7 | import cn.hutool.core.util.URLUtil; | 8 | import cn.hutool.core.util.URLUtil; |
| 8 | import cn.iocoder.dashboard.framework.sms.core.SmsConstants; | 9 | import cn.iocoder.dashboard.framework.sms.core.SmsConstants; |
| 9 | import cn.iocoder.dashboard.framework.sms.core.SmsResult; | 10 | import cn.iocoder.dashboard.framework.sms.core.SmsResult; |
| @@ -28,6 +29,8 @@ import java.util.List; | @@ -28,6 +29,8 @@ import java.util.List; | ||
| 28 | import java.util.Map; | 29 | import java.util.Map; |
| 29 | import java.util.StringJoiner; | 30 | import java.util.StringJoiner; |
| 30 | 31 | ||
| 32 | +import static com.yunpian.sdk.constant.Code.*; | ||
| 33 | + | ||
| 31 | /** | 34 | /** |
| 32 | * 云片短信客户端的实现类 | 35 | * 云片短信客户端的实现类 |
| 33 | * | 36 | * |
| @@ -51,7 +54,15 @@ public class YunpianSmsClient extends AbstractSmsClient { | @@ -51,7 +54,15 @@ public class YunpianSmsClient extends AbstractSmsClient { | ||
| 51 | 54 | ||
| 52 | @Override | 55 | @Override |
| 53 | public void doInit() { | 56 | public void doInit() { |
| 54 | - client = new YunpianClient(properties.getApiKey()); | 57 | + YunpianClient oldClient = client; |
| 58 | + // 初始化新的客户端 | ||
| 59 | + YunpianClient newClient = new YunpianClient(properties.getApiKey()); | ||
| 60 | + newClient.init(); | ||
| 61 | + this.client = newClient; | ||
| 62 | + // 销毁老的客户端 | ||
| 63 | + if (oldClient != null) { | ||
| 64 | + oldClient.close(); | ||
| 65 | + } | ||
| 55 | } | 66 | } |
| 56 | 67 | ||
| 57 | @Override | 68 | @Override |
| @@ -71,9 +82,8 @@ public class YunpianSmsClient extends AbstractSmsClient { | @@ -71,9 +82,8 @@ public class YunpianSmsClient extends AbstractSmsClient { | ||
| 71 | throw sendResult.getThrowable(); | 82 | throw sendResult.getThrowable(); |
| 72 | } | 83 | } |
| 73 | // 解析结果 | 84 | // 解析结果 |
| 74 | - SmsSingleSend data = sendResult.getData(); | ||
| 75 | return SmsResult.success(parseSendFailureType(sendResult), // 将 API 短信平台,解析成统一的错误码 | 85 | return SmsResult.success(parseSendFailureType(sendResult), // 将 API 短信平台,解析成统一的错误码 |
| 76 | - String.valueOf(data.getCode()), data.getMsg(), null, String.valueOf(data.getSid())); | 86 | + String.valueOf(sendResult.getCode()), formatResultMsg(sendResult), null, getApiSerialNo(sendResult)); |
| 77 | } | 87 | } |
| 78 | 88 | ||
| 79 | private static String formatTplValue(Map<String, Object> templateParams) { | 89 | private static String formatTplValue(Map<String, Object> templateParams) { |
| @@ -86,10 +96,31 @@ public class YunpianSmsClient extends AbstractSmsClient { | @@ -86,10 +96,31 @@ public class YunpianSmsClient extends AbstractSmsClient { | ||
| 86 | return joiner.toString(); | 96 | return joiner.toString(); |
| 87 | } | 97 | } |
| 88 | 98 | ||
| 99 | + private static String formatResultMsg(Result<SmsSingleSend> sendResult) { | ||
| 100 | + if (StrUtil.isEmpty(sendResult.getDetail())) { | ||
| 101 | + return sendResult.getMsg(); | ||
| 102 | + } | ||
| 103 | + return sendResult.getMsg() + " => " + sendResult.getDetail(); | ||
| 104 | + } | ||
| 105 | + | ||
| 89 | private static SmsSendFailureTypeEnum parseSendFailureType(Result<SmsSingleSend> sendResult) { | 106 | private static SmsSendFailureTypeEnum parseSendFailureType(Result<SmsSingleSend> sendResult) { |
| 107 | + Integer code = sendResult.getCode(); | ||
| 108 | + switch (code) { | ||
| 109 | + case ARGUMENT_MISSING: return SmsSendFailureTypeEnum.SMS_API_PARAM_ERROR; | ||
| 110 | + case BAD_ARGUMENT_FORMAT: return SmsSendFailureTypeEnum.SMS_TEMPLATE_PARAM_ERROR; | ||
| 111 | + case TPL_NOT_FOUND: return SmsSendFailureTypeEnum.SMS_TEMPLATE_NOT_EXISTS; | ||
| 112 | + case TPL_NOT_VALID: return SmsSendFailureTypeEnum.SMS_TMPLATE_INVALID; | ||
| 113 | + } | ||
| 90 | return SmsSendFailureTypeEnum.SMS_UNKNOWN; | 114 | return SmsSendFailureTypeEnum.SMS_UNKNOWN; |
| 91 | } | 115 | } |
| 92 | 116 | ||
| 117 | + private static String getApiSerialNo(Result<SmsSingleSend> sendResult) { | ||
| 118 | + if (sendResult.getData() == null) { | ||
| 119 | + return null; | ||
| 120 | + } | ||
| 121 | + return String.valueOf(sendResult.getData().getSid()); | ||
| 122 | + } | ||
| 123 | + | ||
| 93 | /** | 124 | /** |
| 94 | * 云片的比较复杂,又是加密又是套娃的 | 125 | * 云片的比较复杂,又是加密又是套娃的 |
| 95 | */ | 126 | */ |
src/main/java/cn/iocoder/dashboard/framework/sms/core/enums/SmsSendFailureTypeEnum.java
| @@ -12,14 +12,19 @@ import lombok.Getter; | @@ -12,14 +12,19 @@ import lombok.Getter; | ||
| 12 | @AllArgsConstructor | 12 | @AllArgsConstructor |
| 13 | public enum SmsSendFailureTypeEnum { | 13 | public enum SmsSendFailureTypeEnum { |
| 14 | 14 | ||
| 15 | - // ========== 模板相关(100 开头) ========== | 15 | + // ========== 渠道相关(100 开头) ========== |
| 16 | SMS_CHANNEL_CLIENT_NOT_EXISTS(100, "短信渠道的客户端不存在"), | 16 | SMS_CHANNEL_CLIENT_NOT_EXISTS(100, "短信渠道的客户端不存在"), |
| 17 | 17 | ||
| 18 | // ========== 模板相关(200 开头) ========== | 18 | // ========== 模板相关(200 开头) ========== |
| 19 | - SMS_TEMPLATE_DISABLE(200, "短信模板被禁用"), | 19 | + SMS_TEMPLATE_NOT_EXISTS(200, "短信模板不存在"), |
| 20 | + SMS_TEMPLATE_DISABLE(201, "短信模板被禁用"), // 例如说,我们在管理后台禁用了 | ||
| 21 | + SMS_TMPLATE_INVALID(202, "短信模板不可用"), // 例如说,短信模板正在审核中 | ||
| 22 | + SMS_TEMPLATE_PARAM_ERROR(203, "模板参数不正确"), | ||
| 20 | 23 | ||
| 21 | // ========== 其它相关(900 开头) ========== | 24 | // ========== 其它相关(900 开头) ========== |
| 22 | - SMS_SEND_EXCEPTION(900, "发送异常"), | 25 | + SMS_API_PARAM_ERROR(900, "请求参数缺失"), |
| 26 | + | ||
| 27 | + SMS_SEND_EXCEPTION(998, "发送异常"), | ||
| 23 | SMS_UNKNOWN(999, "未知错误,需要解析") | 28 | SMS_UNKNOWN(999, "未知错误,需要解析") |
| 24 | ; | 29 | ; |
| 25 | 30 |
src/test-integration/java/cn/iocoder/dashboard/framework/redis/core/stream/RedisStreamTest.java
| @@ -4,7 +4,7 @@ import cn.hutool.core.thread.ThreadUtil; | @@ -4,7 +4,7 @@ import cn.hutool.core.thread.ThreadUtil; | ||
| 4 | import cn.iocoder.dashboard.BaseRedisIntegrationTest; | 4 | import cn.iocoder.dashboard.BaseRedisIntegrationTest; |
| 5 | import cn.iocoder.dashboard.framework.redis.core.util.RedisMessageUtils; | 5 | import cn.iocoder.dashboard.framework.redis.core.util.RedisMessageUtils; |
| 6 | import cn.iocoder.dashboard.modules.system.mq.consumer.mail.SysMailSendConsumer; | 6 | import cn.iocoder.dashboard.modules.system.mq.consumer.mail.SysMailSendConsumer; |
| 7 | -import cn.iocoder.dashboard.modules.system.mq.consumer.sms.SysSmsSendConsumer; | 7 | +import cn.iocoder.dashboard.modules.system.mq.consumer.sms.SmsSendConsumer; |
| 8 | import cn.iocoder.dashboard.modules.system.mq.message.mail.SysMailSendMessage; | 8 | import cn.iocoder.dashboard.modules.system.mq.message.mail.SysMailSendMessage; |
| 9 | import cn.iocoder.dashboard.modules.system.mq.message.sms.SysSmsSendMessage; | 9 | import cn.iocoder.dashboard.modules.system.mq.message.sms.SysSmsSendMessage; |
| 10 | import org.junit.jupiter.api.Disabled; | 10 | import org.junit.jupiter.api.Disabled; |
| @@ -18,7 +18,7 @@ import java.util.concurrent.TimeUnit; | @@ -18,7 +18,7 @@ import java.util.concurrent.TimeUnit; | ||
| 18 | 18 | ||
| 19 | public class RedisStreamTest { | 19 | public class RedisStreamTest { |
| 20 | 20 | ||
| 21 | - @Import({SysSmsSendConsumer.class, SysMailSendConsumer.class}) | 21 | + @Import({SmsSendConsumer.class, SysMailSendConsumer.class}) |
| 22 | @Disabled | 22 | @Disabled |
| 23 | public static class ConsumerTest extends BaseRedisIntegrationTest { | 23 | public static class ConsumerTest extends BaseRedisIntegrationTest { |
| 24 | 24 | ||
| @@ -43,7 +43,7 @@ public class RedisStreamTest { | @@ -43,7 +43,7 @@ public class RedisStreamTest { | ||
| 43 | for (int i = 0; i < 100; i++) { | 43 | for (int i = 0; i < 100; i++) { |
| 44 | // 创建消息 | 44 | // 创建消息 |
| 45 | SysSmsSendMessage message = new SysSmsSendMessage(); | 45 | SysSmsSendMessage message = new SysSmsSendMessage(); |
| 46 | - message.setMobile("15601691300").setTemplateCode("test:" + i); | 46 | + message.setMobile("15601691300").setApiTemplateId("test:" + i); |
| 47 | // 发送消息 | 47 | // 发送消息 |
| 48 | RedisMessageUtils.sendStreamMessage(stringRedisTemplate, message); | 48 | RedisMessageUtils.sendStreamMessage(stringRedisTemplate, message); |
| 49 | } | 49 | } |
src/test-integration/java/cn/iocoder/dashboard/framework/sms/core/client/impl/yunpian/YunpianSmsClientIntegrationTest.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.framework.sms.core.client.impl.yunpian; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.dashboard.framework.sms.core.SmsResult; | ||
| 4 | +import cn.iocoder.dashboard.framework.sms.core.enums.SmsChannelEnum; | ||
| 5 | +import cn.iocoder.dashboard.framework.sms.core.property.SmsChannelProperties; | ||
| 6 | +import org.junit.jupiter.api.Test; | ||
| 7 | + | ||
| 8 | +import java.util.HashMap; | ||
| 9 | +import java.util.Map; | ||
| 10 | + | ||
| 11 | +/** | ||
| 12 | + * {@link YunpianSmsClient} 的集成测试 | ||
| 13 | + */ | ||
| 14 | +public class YunpianSmsClientIntegrationTest { | ||
| 15 | + | ||
| 16 | + @Test | ||
| 17 | + public void testSend() { | ||
| 18 | + // 创建配置类 | ||
| 19 | + SmsChannelProperties properties = new SmsChannelProperties(); | ||
| 20 | + properties.setId(1L); | ||
| 21 | + properties.setSignature("芋道"); | ||
| 22 | + properties.setCode(SmsChannelEnum.YUN_PIAN.getCode()); | ||
| 23 | + properties.setApiKey("1555a14277cb8a608cf45a9e6a80d510"); | ||
| 24 | + // 创建客户端 | ||
| 25 | + YunpianSmsClient smsClient = new YunpianSmsClient(properties); | ||
| 26 | + smsClient.init(); | ||
| 27 | + // 发送短信 | ||
| 28 | + Map<String, Object> templateParams = new HashMap<>(); | ||
| 29 | + templateParams.put("code", "1024"); | ||
| 30 | + templateParams.put("operation", "嘿嘿"); | ||
| 31 | +// SmsResult result = smsClient.send(1L, "15601691399", "4372216", templateParams); | ||
| 32 | + SmsResult result = smsClient.send(1L, "15601691399", "4383920", templateParams); | ||
| 33 | + System.out.println(result); | ||
| 34 | + } | ||
| 35 | + | ||
| 36 | +} |
src/test-integration/java/cn/iocoder/dashboard/framework/sms/core/client/package-info.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.framework.sms.core.client; |