From d453612fc507f733cf01cf3cc8f56961c3bc4478 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Fri, 22 Aug 2025 10:06:16 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E5=8F=91=E9=80=81=E7=9F=AD=E4=BF=A1?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/uniapp/customer/MemberController.java | 3 +- .../api/uniapp/customer/TempController.java | 16 +++++++ .../src/main/resources/application.yml | 44 +++++++++++++++++++ jsowell-common/pom.xml | 13 ++++++ .../java/com/jsowell/common/util/SMSUtil.java | 35 ++++++++++++++- 5 files changed, 109 insertions(+), 2 deletions(-) diff --git a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/MemberController.java b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/MemberController.java index 515ec746e..7c32e8271 100644 --- a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/MemberController.java +++ b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/MemberController.java @@ -74,7 +74,8 @@ public class MemberController extends BaseController { if (StringUtils.isBlank(dto.getMobileNumber())) { throw new BusinessException(ReturnCodeEnum.CODE_PARAM_NOT_NULL_ERROR); } - String sendSMSResult = SMSUtil.sendSMS(request, dto.getMobileNumber()); + // String sendSMSResult = SMSUtil.sendSMS(request, dto.getMobileNumber()); + String sendSMSResult = SMSUtil.sendSMSV2(request, dto.getMobileNumber()); response = new RestApiResponse<>(sendSMSResult); } catch (Exception e) { logger.error("下发短信接口 发生异常 error", e); diff --git a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/TempController.java b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/TempController.java index 90b29e341..9ca4a7d5a 100644 --- a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/TempController.java +++ b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/TempController.java @@ -28,6 +28,9 @@ import com.jsowell.service.OrderService; import com.jsowell.service.TempService; import com.jsowell.thirdparty.platform.dto.PushOrderDTO; import org.apache.commons.collections4.CollectionUtils; +import org.dromara.sms4j.api.SmsBlend; +import org.dromara.sms4j.api.entity.SmsResponse; +import org.dromara.sms4j.core.factory.SmsFactory; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -963,4 +966,17 @@ public class TempController extends BaseController { logger.info("关闭支付未启动的订单, param:{}, result:{}", JSON.toJSONString(dto), response); return response; } + + /** + * 测试发送短信 + * http://localhost:8080/temp/testSendSMS + */ + @GetMapping("/testSendSMS") + public void testSend(){ + // 在创建完SmsBlend实例后,再未手动调用注销的情况下框架会持有该实例,可以直接通过指定configId来获取想要的配置,如果你想使用 + // 负载均衡形式获取实例,只要使用getSmsBlend的无参重载方法即可,如果你仅有一个配置,也可以使用该方法 + SmsBlend smsBlend = SmsFactory.getSmsBlend("tx1"); + SmsResponse smsResponse = smsBlend.sendMessage("18521561107","123123"); + logger.info("发送短信结果:{}", smsResponse); + } } diff --git a/jsowell-admin/src/main/resources/application.yml b/jsowell-admin/src/main/resources/application.yml index 33ed80692..5c99b7a42 100644 --- a/jsowell-admin/src/main/resources/application.yml +++ b/jsowell-admin/src/main/resources/application.yml @@ -148,3 +148,47 @@ chargeAlgorithm: url: http://150.158.199.92:58910/gateway/api/user/battery/algorithm/json clientId: e488bac5f70b496fa2d82065089e5f81 +# sms4j +sms: + # 标注从yml读取配置 + config-type: yaml + blends: + # 自定义的标识,也就是configId这里可以是任意值(最好不要是中文) + tx1: + #厂商标识,标定此配置是哪个厂商,详细请看厂商标识介绍部分 + supplier: tencent + #您的accessKey + access-key-id: AKIDfDakkZBbqvnSt8Azb3JMKD3jCVcZJxPh + #您的accessKeySecret + access-key-secret: 95oKgpJeoncGoASXQ6qRp35wa2HKQVPA + #您的短信签名 + signature: 举视新能源 + #模板ID 非必须配置,如果使用sendMessage的快速发送需此配置 + template-id: 1002460 + #您的sdkAppId + sdk-app-id: 1400536771 + # 代理 + proxy: + # 是否启用代理 默认关闭 需手动开启 + enable: false + host: 127.0.0.1 + port: 8080 + ali1: + #厂商标识,标定此配置是哪个厂商,详细请看厂商标识介绍部分 + supplier: alibaba + #您的accessKey + access-key-id: AKIDfDakkZBbqvnSt8Azb3JMKD3jCVcZJxPh + #您的accessKeySecret + access-key-secret: 95oKgpJeoncGoASXQ6qRp35wa2HKQVPA + #您的短信签名 + signature: 举视上海新能源 + #模板ID 非必须配置,如果使用sendMessage的快速发送需此配置 + template-id: 1002460 + #您的sdkAppId + sdk-app-id: 1400536771 + # 代理 + proxy: + # 是否启用代理 默认关闭 需手动开启 + enable: false + host: 127.0.0.1 + port: 8080 \ No newline at end of file diff --git a/jsowell-common/pom.xml b/jsowell-common/pom.xml index 785b492ad..5aa9af263 100644 --- a/jsowell-common/pom.xml +++ b/jsowell-common/pom.xml @@ -228,6 +228,19 @@ spring-boot-starter-amqp + + org.dromara.sms4j + sms4j-spring-boot-starter + 3.3.4 + + + + com.alibaba + fastjson + + + + diff --git a/jsowell-common/src/main/java/com/jsowell/common/util/SMSUtil.java b/jsowell-common/src/main/java/com/jsowell/common/util/SMSUtil.java index 39b625b43..4936646cd 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/util/SMSUtil.java +++ b/jsowell-common/src/main/java/com/jsowell/common/util/SMSUtil.java @@ -8,6 +8,9 @@ import com.jsowell.common.constant.CacheConstants; import com.jsowell.common.constant.Constants; import com.jsowell.common.core.redis.RedisCache; import lombok.extern.slf4j.Slf4j; +import org.dromara.sms4j.api.SmsBlend; +import org.dromara.sms4j.api.entity.SmsResponse; +import org.dromara.sms4j.core.factory.SmsFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -38,7 +41,7 @@ public class SMSUtil { private static final int APP_ID = 1400536771; // 签名,使用的是签名内容,而不是签名ID - private static final String SMS_SIGN = "举视新能源"; + private static final String SMS_SIGN = "举视上海新能源"; // 国家码 如 86 为中国 private static final String NATION_CODE = "86"; @@ -67,6 +70,36 @@ public class SMSUtil { return reStr; } + /** + * 发送短信V2 + * @param request + * @param phoneNumber + * @return + * @throws HTTPException + * @throws IOException + */ + public static String sendSMSV2(HttpServletRequest request, String phoneNumber) throws HTTPException, IOException { + String reStr = "success"; //定义返回值 + //随机生成六位验证码 + String code = RandomUtil.getSMSVerificationCode(); + SmsBlend smsBlend = SmsFactory.getSmsBlend("tx1"); + SmsResponse smsResponse = smsBlend.sendMessage(phoneNumber, code); + boolean success = smsResponse.isSuccess(); + if (!success) { + reStr = "error"; + log.error("发送验证码失败:{}", JSON.toJSONString(smsResponse)); + } else { + // 改为保存redis + String redisKey = CacheConstants.SMS_VERIFICATION_CODE_KEY + phoneNumber; + redisCache.setCacheObject(redisKey, code, CacheConstants.cache_expire_time_30m); + } + + // 新增一个通用验证码 2025年4月14日14点23分个别手机号无法收到验证码, 新增通用验证码 + String redisKey2 = CacheConstants.SMS_COMMON_VERIFICATION_CODE_KEY + phoneNumber; + redisCache.setCacheObject(redisKey2, Constants.COMMON_VERIFICATION_CODE, CacheConstants.cache_expire_time_30m); + return reStr; + } + public static void main(String[] args) { System.out.println();