From da782f7e48d68c55b09110692d67840a344b5874 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BF=9E=E6=89=AC?= Date: Thu, 14 Sep 2023 17:19:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E7=9B=9F=E5=95=86=E7=9F=AD=E4=BF=A1?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/cool/store/enums/SMSMsgEnum.java | 38 ++++++++ .../cool/store/dto/wx/MiniAppUrlLinkDTO.java | 15 +++ .../store/dto/wx/MiniAppUrlLinkReqDTO.java | 14 +++ .../com/cool/store/request/IntentSmsReq.java | 13 --- .../cool/store/request/InterviewSmsReq.java | 13 --- .../cool/store/request/SmsSendRequest.java | 53 +++++++++++ .../cool/store/response/SmsSendResponse.java | 38 ++++++++ coolstore-partner-service/pom.xml | 10 ++ .../java/com/cool/store/http/WechatRest.java | 19 ++++ .../com/cool/store/service/SmsService.java | 9 +- .../store/service/WechatMiniAppService.java | 2 + .../store/service/impl/FlowServiceImpl.java | 15 +-- .../impl/HyPartnerLineInfoServiceImpl.java | 6 +- .../service/impl/InterviewServiceImpl.java | 13 +-- .../store/service/impl/SmsServiceImpl.java | 95 ++++++++++++++----- .../impl/WechatMiniAppServiceImpl.java | 20 +++- .../cool/store/service/SmsServiceTest.java | 16 ++++ .../cool/store/controller/TestController.java | 9 ++ .../cool/store/config/SignValidateFilter.java | 1 + 19 files changed, 321 insertions(+), 78 deletions(-) create mode 100644 coolstore-partner-common/src/main/java/com/cool/store/enums/SMSMsgEnum.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/wx/MiniAppUrlLinkDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/wx/MiniAppUrlLinkReqDTO.java delete mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/IntentSmsReq.java delete mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/InterviewSmsReq.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/SmsSendRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/response/SmsSendResponse.java create mode 100644 coolstore-partner-service/src/test/java/com/cool/store/service/SmsServiceTest.java diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/SMSMsgEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/SMSMsgEnum.java new file mode 100644 index 000000000..aafb1d09b --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/SMSMsgEnum.java @@ -0,0 +1,38 @@ +package com.cool.store.enums; + +/** + * @Author: young.yu + * @Date: 2023-09-14 14:27 + * @Description: + */ +public enum SMSMsgEnum { + INTENTION_APPLY_PASS("意向申请通过","【沪上阿姨】恭喜您通过了加盟意向申请审核,请务必于{$var}前登录沪姨合伙人小程序完成面试预约时间申请,感谢您对沪上阿姨的关注与支持!点击转跳沪姨合伙人小程序:{$var}"), + + INTERVIEW_APPOINTMENT_PASS("预约面试通过通知","【沪上阿姨】你已成功预约{$var}进行沪上阿姨加盟资格面试,届时请通过沪姨合伙人小程序进行面试,面试时间约40分钟,请提前仔细阅读面试准备材料以及观看加盟说明视频,做好面试相应准备。请务必提前安排好您的时间。点击转跳沪姨合伙人小程序:{$var}"), + + INTERVIEW_PASS("面试通过通知","【沪上阿姨】恭喜您通过了加盟资格面试,接下来我们会为您安排专业的选址开发顾问协助您进行选址,请保持电话畅通,祝您早日选址成功!点击转跳沪姨合伙人小程序:{$var}"); + + private String title; + private String content; + + SMSMsgEnum(String title, String content) { + this.title = title; + this.content = content; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wx/MiniAppUrlLinkDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wx/MiniAppUrlLinkDTO.java new file mode 100644 index 000000000..7595de0e3 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wx/MiniAppUrlLinkDTO.java @@ -0,0 +1,15 @@ +package com.cool.store.dto.wx; + +import com.alibaba.fastjson.annotation.JSONField; +import lombok.Data; + +/** + * @Author: young.yu + * @Date: 2023-09-12 14:48 + * @Description: + */ +@Data +public class MiniAppUrlLinkDTO extends WXBaseResultDTO{ + @JSONField(name = "url_link") + private String urlLink; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wx/MiniAppUrlLinkReqDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wx/MiniAppUrlLinkReqDTO.java new file mode 100644 index 000000000..ac449eccf --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wx/MiniAppUrlLinkReqDTO.java @@ -0,0 +1,14 @@ +package com.cool.store.dto.wx; + +import com.alibaba.fastjson.annotation.JSONField; +import lombok.Data; + +/** + * @Author: young.yu + * @Date: 2023-09-12 14:48 + * @Description: + */ +@Data +public class MiniAppUrlLinkReqDTO{ + private String path; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/IntentSmsReq.java b/coolstore-partner-model/src/main/java/com/cool/store/request/IntentSmsReq.java deleted file mode 100644 index 986a74d4f..000000000 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/IntentSmsReq.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.cool.store.request; - -import lombok.Data; - -/** - * @Author: young.yu - * @Date: 2023-06-21 11:17 - * @Description: - */ -@Data -public class IntentSmsReq { - private String deadLine; -} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/InterviewSmsReq.java b/coolstore-partner-model/src/main/java/com/cool/store/request/InterviewSmsReq.java deleted file mode 100644 index ed53816e3..000000000 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/InterviewSmsReq.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.cool.store.request; - -import lombok.Data; - -/** - * @Author: young.yu - * @Date: 2023-06-21 11:17 - * @Description: - */ -@Data -public class InterviewSmsReq { - private String interviewStartTime; -} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/SmsSendRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/SmsSendRequest.java new file mode 100644 index 000000000..51c6b39b8 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/SmsSendRequest.java @@ -0,0 +1,53 @@ +package com.cool.store.request; + +import lombok.Data; + +/** + * + * @author zw.yang + * @date 2023-07-03 + * @Description:普通短信发送实体类 + */ +@Data +public class SmsSendRequest { + /** + * 用户账号,必填 + */ + private String account; + /** + * 用户密码,必填 + */ + private String password; + /** + * 短信内容。长度不能超过536个字符,必填 + */ + private String msg; + /** + * 手机号码和变量参数,多组参数使用英文分号;区分,必填 + */ + private String params; + + /** + * 定时发送短信时间。格式为yyyyMMddHHmm,值小于或等于当前时间则立即发送,默认立即发送,选填 + */ + private String sendtime; + /** + * 是否需要状态报告(默认false),选填 + */ + private String report; + /** + * 下发短信号码扩展码,纯数字,建议1-3位,选填 + */ + private String extend; + /** + * 该条短信在您业务系统内的ID,如订单号或者短信发送记录流水号,选填 + */ + private String uid; + + public SmsSendRequest(String account, String password, String msg, String params) { + this.account = account; + this.password = password; + this.msg = msg; + this.params = params; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/SmsSendResponse.java b/coolstore-partner-model/src/main/java/com/cool/store/response/SmsSendResponse.java new file mode 100644 index 000000000..8578d2d14 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/SmsSendResponse.java @@ -0,0 +1,38 @@ +package com.cool.store.response; + +import lombok.Data; + +/** + * + * @author zw.yang + * @date 2023-07-03 + * @Description:普通短信发送响应实体类 + */ +@Data +public class SmsSendResponse { + /** + * 响应时间 + */ + private String time; + /** + * 消息id + */ + private String msgId; + /** + * 状态码说明(成功返回空) + */ + private String errorMsg; + /** + * 状态码(详细参考提交响应状态码) + */ + private String code; + + /** + * 失败的个数 + */ + private String failNum; + /** + * 成功的个数 + */ + private String successNum; +} diff --git a/coolstore-partner-service/pom.xml b/coolstore-partner-service/pom.xml index 9e0778a20..5d776a6e1 100644 --- a/coolstore-partner-service/pom.xml +++ b/coolstore-partner-service/pom.xml @@ -99,6 +99,16 @@ org.apache.poi poi-ooxml + + junit + junit + test + + + org.junit.jupiter + junit-jupiter + test + \ No newline at end of file diff --git a/coolstore-partner-service/src/main/java/com/cool/store/http/WechatRest.java b/coolstore-partner-service/src/main/java/com/cool/store/http/WechatRest.java index d098b84f6..ddf8fabe4 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/http/WechatRest.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/http/WechatRest.java @@ -2,6 +2,8 @@ package com.cool.store.http; import com.alibaba.fastjson.JSONObject; import com.cool.store.dto.wx.CodeSessionDTO; +import com.cool.store.dto.wx.MiniAppUrlLinkDTO; +import com.cool.store.dto.wx.MiniAppUrlLinkReqDTO; import com.cool.store.dto.wx.PhoneInfoDTO; import com.cool.store.enums.ErrorCodeEnum; import com.cool.store.exception.ServiceException; @@ -41,6 +43,8 @@ public class WechatRest { */ String GET_USERPHONENUMBER = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=%s"; + String GET_MINIAPP_URL_LINK = "https://api.weixin.qq.com/wxa/generate_urllink?access_token=%s"; + public CodeSessionDTO miniProgramJsCodeSession(String appId, String secret, String jsCode){ log.info("WechatRest#miniProgramJsCodeSession, jsCode:{}", jsCode); @@ -90,4 +94,19 @@ public class WechatRest { return null; } + public MiniAppUrlLinkDTO getMiniAppUrlLink(String accessToken, MiniAppUrlLinkReqDTO miniAppUrlLinkReqDTO){ + String reqUrl = String.format(GET_MINIAPP_URL_LINK, accessToken); + String responseStr = null; + try { + responseStr = httpRestTemplateService.postForObject(reqUrl, miniAppUrlLinkReqDTO, String.class); + log.info("WechatRest#getUserPhoneNumber, reqUrl:{}, response:{}", reqUrl, responseStr); + if(StringUtils.isNotBlank(responseStr)){ + return JSONObject.parseObject(responseStr, MiniAppUrlLinkDTO.class); + } + } catch (Exception e) { + log.error("获取手机号异常", e); + } + return null; + } + } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/SmsService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/SmsService.java index 98803bb24..8a5ad31ff 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/SmsService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/SmsService.java @@ -1,7 +1,11 @@ package com.cool.store.service; import com.aliyun.dysmsapi20170525.models.SendSmsResponse; +import com.cool.store.enums.SMSMsgEnum; import com.cool.store.exception.ApiException; +import com.cool.store.response.SmsSendResponse; + +import java.io.IOException; /** * @Author: young.yu @@ -9,5 +13,8 @@ import com.cool.store.exception.ApiException; * @Description: */ public interface SmsService { - public SendSmsResponse sendSms(String params, String templateCode, String mobile) throws ApiException; + public SmsSendResponse sendSmsNormal(String phone, SMSMsgEnum smsMsgEnum, Object... objects); + + public SmsSendResponse sendSmsVariable(String phone, SMSMsgEnum smsMsgEnum,String... objects); + } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/WechatMiniAppService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/WechatMiniAppService.java index ea9f1c5a0..4097820f0 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/WechatMiniAppService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/WechatMiniAppService.java @@ -19,4 +19,6 @@ public interface WechatMiniAppService { String updateUserPhoneNumber(MobileUpdateRequest request, PartnerUserInfoVO userInfoVO); PartnerUserInfoVO getUserInfo(String mobile, String openId); + + String getMiniAppUrl(); } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FlowServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FlowServiceImpl.java index 47bfb7a1f..b32b61905 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FlowServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FlowServiceImpl.java @@ -16,10 +16,7 @@ import com.cool.store.dto.log.LogBasicDTO; import com.cool.store.dto.mdm.AccessTokenDTO; import com.cool.store.dto.response.MDMResultDTO; import com.cool.store.entity.*; -import com.cool.store.enums.ErrorCodeEnum; -import com.cool.store.enums.InspectionTyeEnum; -import com.cool.store.enums.OperateTypeEnum; -import com.cool.store.enums.WorkflowStatusEnum; +import com.cool.store.enums.*; import com.cool.store.exception.ApiException; import com.cool.store.exception.ServiceException; import com.cool.store.mapper.*; @@ -27,10 +24,7 @@ import com.cool.store.oss.OSSServer; import com.cool.store.request.*; import com.cool.store.request.data.flow.KeyText; import com.cool.store.request.data.flow.SkrRelshipProve; -import com.cool.store.service.FlowService; -import com.cool.store.service.HyPartnerLineInfoService; -import com.cool.store.service.LogService; -import com.cool.store.service.SmsService; +import com.cool.store.service.*; import com.cool.store.utils.*; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -103,7 +97,8 @@ public class FlowServiceImpl implements FlowService { @Autowired private HyInspectionMapper inspectionMapper; - + @Autowired + private WechatMiniAppService wechatMiniAppService; @Override @Transactional public void createQualifyVerify(CreateQualifyVerifyReq request) throws ApiException, IOException { @@ -279,7 +274,7 @@ public class FlowServiceImpl implements FlowService { inspectionMapper.insertSelective(hyInspectionDO); //发送加盟商资质审核通过短信 HyPartnerBaseInfoDO hyPartnerBaseInfoDO = hyPartnerBaseInfoDAO.getByPartnerLineId(partnerLineId); - smsService.sendSms(null, CommonConstants.SMS_TEMPLATE_CODE_VERIFY, hyPartnerBaseInfoDO.getMobile()); + smsService.sendSmsVariable(hyPartnerBaseInfoDO.getMobile(), SMSMsgEnum.INTERVIEW_PASS,wechatMiniAppService.getMiniAppUrl()); //记录日志 //这里记录的日志时间为 passTime,而不是当前时间,否则 getTipsInfo 接口返回的时间是这里记录的当前时间,与 passTime 不符 LogBasicDTO log = LogBasicDTO.builder().operateTime(DateUtil.format(passDate, CoolDateUtils.DATE_FORMAT_SEC)) diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerLineInfoServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerLineInfoServiceImpl.java index 57397a250..c0f34cd93 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerLineInfoServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerLineInfoServiceImpl.java @@ -94,6 +94,8 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService { @Resource HyFollowTaskDAO hyFollowTaskDAO; + @Autowired + private WechatMiniAppService wechatMiniAppService; @Override public StageCountVO selectStagePendingCount(String userId) { StageCountDTO stageCountDTO = hyPartnerLineInfoDAO.selectStagePendingCount(userId); @@ -474,9 +476,7 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService { hy.setCertifyFile(JSONObject.toJSONString(closeFollowRequest.getCertifyFile())); } hyPartnerBaseInfoDAO.updateByPrimaryKeySelective(hy); - IntentSmsReq intentSmsReq = new IntentSmsReq(); - intentSmsReq.setDeadLine(DateUtil.formatDateTime(hyPartnerLineInfoDO.getDeadline())); - smsService.sendSms(JSON.toJSONString(intentSmsReq),CommonConstants.SMS_TEMPLATE_CODE_INTENT, hy.getMobile()); + smsService.sendSmsVariable(hy.getMobile(), SMSMsgEnum.INTENTION_APPLY_PASS,DateUtil.formatDateTime(hyPartnerLineInfoDO.getDeadline()),wechatMiniAppService.getMiniAppUrl()); } //拒绝 diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/InterviewServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/InterviewServiceImpl.java index 1eb192533..ad95ce712 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/InterviewServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/InterviewServiceImpl.java @@ -24,10 +24,7 @@ import com.cool.store.exception.ServiceException; import com.cool.store.http.ISVHttpRequest; import com.cool.store.mapper.*; import com.cool.store.request.*; -import com.cool.store.service.EnterpriseUserService; -import com.cool.store.service.InterviewService; -import com.cool.store.service.LogService; -import com.cool.store.service.SmsService; +import com.cool.store.service.*; import com.cool.store.utils.CoolDateUtils; import com.cool.store.utils.StringUtil; import com.cool.store.utils.TRTCUtils; @@ -100,6 +97,9 @@ public class InterviewServiceImpl implements InterviewService { @Autowired private EnterpriseUserDAO enterpriseUserDAO; + + @Autowired + private WechatMiniAppService wechatMiniAppService; @Override public List getInterviewList(GetInterviewListReq request) { List interviewList = hyPartnerInterviewPlanMapper.getInterviewList(request); @@ -568,10 +568,7 @@ public class InterviewServiceImpl implements InterviewService { hyPartnerLineDO.setUpdateTime(new Date()); hyPartnerLineInfoMapper.updateByPrimaryKeySelective(hyPartnerLineDO); //异步发送短信给加盟商 - InterviewSmsReq interviewSmsReq = new InterviewSmsReq(); - interviewSmsReq.setInterviewStartTime(DateUtil.format(DateUtil.parse(interviewVO.getStartTime()), DatePattern.NORM_DATETIME_MINUTE_PATTERN)); - smsService.sendSms(JSON.toJSONString(interviewSmsReq),templateCode, partnerBaseInfo.getMobile()); - + smsService.sendSmsVariable(partnerBaseInfo.getMobile(), SMSMsgEnum.INTERVIEW_APPOINTMENT_PASS,DateUtil.format(DateUtil.parse(interviewVO.getStartTime()), DatePattern.NORM_DATETIME_MINUTE_PATTERN),wechatMiniAppService.getMiniAppUrl()); } @Override diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SmsServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SmsServiceImpl.java index d8b7dbb98..4049bf757 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SmsServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SmsServiceImpl.java @@ -1,55 +1,100 @@ package com.cool.store.service.impl; +import com.alibaba.fastjson.JSON; 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.cool.store.enums.SMSMsgEnum; import com.cool.store.exception.ApiException; +import com.cool.store.mq.util.HttpRestTemplateService; +import com.cool.store.request.SmsSendRequest; +import com.cool.store.response.SmsSendResponse; import com.cool.store.service.SmsService; +import com.cool.store.utils.StringUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import java.io.IOException; +import java.text.MessageFormat; + /** * @Author: young.yu * @Date: 2023-06-21 10:55 * @Description: */ +@Slf4j @Service public class SmsServiceImpl implements SmsService { - @Value("${hs.sms.accessKeyId:null}") - private String accessKeyId ; - - @Value("${hs.sms.accessKeySecret:null}") - private String accessKeySecret; + /** + * 普通短信请求url + */ + private final static String NORMAL_SMS_URL = "https://smssh1.253.com/msg/v1/send/json"; /** - * 发送短信 - * @param params Json格式的参数 - * @param mobile + * 普通短信请求url + */ + private final static String VARIABLE_SMS_URL = "https://smssh1.253.com/msg/variable/json"; + + /** + * 用户平台API账号 + */ + private final static String ACCOUNT = "N7567896"; + /** + * 用户平台API密码 + */ + public final static String PASS_WORD = "MpGD8g15v2cea3"; + + @Autowired + private HttpRestTemplateService httpRestTemplateService; + + /** + * 发送普通短信 + * @param phone 手机号码 + * @param smsMsgEnum 短信内容 * @return + * @throws IOException */ @Override @Async - public SendSmsResponse sendSms(String params,String templateCode, String mobile) throws ApiException { + public SmsSendResponse sendSmsNormal(String phone, SMSMsgEnum smsMsgEnum,Object... objects) { try { - Config config = new Config() - // 您的AccessKey ID - .setAccessKeyId(accessKeyId) - // 您的AccessKey Secret - .setAccessKeySecret(accessKeySecret); - SendSmsRequest sendSmsRequest = new SendSmsRequest() - .setPhoneNumbers(mobile) - .setSignName("沪上阿姨") - .setTemplateCode(templateCode) - .setTemplateParam(params); - Client client = new Client(config); - return client.sendSms(sendSmsRequest); - }catch (ApiException e){ - throw new ApiException(e.getMessage()); - } catch (Exception exception) { - throw new ApiException(exception.getMessage()); + SmsSendRequest smsSingleRequest = new SmsSendRequest(ACCOUNT, PASS_WORD, MessageFormat.format(smsMsgEnum.getContent(), objects), phone); + String requestJson = JSON.toJSONString(smsSingleRequest); + String response = httpRestTemplateService.postForObject(NORMAL_SMS_URL, requestJson, String.class); + SmsSendResponse smsSingleResponse = JSON.parseObject(response, SmsSendResponse.class); + return smsSingleResponse; + }catch (Exception e){ + log.error("短信发送异常:"+e.getMessage()); } + return null; + } + + /** + * 发送变量短信 + * @param params 手机号,参数 多个使用;隔开 例: 手机号1,参数A,参数B;手机号2,参数C,参数D + * @param msg 短信内容,变量使用{$var}标识 + * @return + * @throws IOException + */ + @Override + @Async + public SmsSendResponse sendSmsVariable(String phone, SMSMsgEnum smsMsgEnum,String... objects){ + // + //params 手机号,参数 多个使用;隔开 例: 手机号1,参数A,参数B;手机号2,参数C,参数D + StringBuffer params = new StringBuffer(phone); + for (String object : objects) { + params.append(",").append(object); + } + SmsSendRequest smsSingleRequest = new SmsSendRequest(ACCOUNT, PASS_WORD, smsMsgEnum.getContent(), params.toString()); + String requestJson = JSON.toJSONString(smsSingleRequest); + String response = httpRestTemplateService.postForObject(VARIABLE_SMS_URL, requestJson,String.class); + SmsSendResponse smsSingleResponse = JSON.parseObject(response, SmsSendResponse.class); + return smsSingleResponse; } } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/WechatMiniAppServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/WechatMiniAppServiceImpl.java index 0408c753f..389d24f7c 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/WechatMiniAppServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/WechatMiniAppServiceImpl.java @@ -2,12 +2,9 @@ package com.cool.store.service.impl; import cn.hutool.core.bean.BeanUtil; import com.alibaba.fastjson.JSONObject; -import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils; import com.cool.store.constants.CommonConstants; import com.cool.store.dao.*; -import com.cool.store.dto.wx.CodeSessionDTO; -import com.cool.store.dto.wx.MiniProgramLoginDTO; -import com.cool.store.dto.wx.PhoneInfoDTO; +import com.cool.store.dto.wx.*; import com.cool.store.entity.HyOpenAreaInfoDO; import com.cool.store.entity.HyPartnerLineInfoDO; import com.cool.store.entity.HyPartnerUserInfoDO; @@ -26,6 +23,7 @@ import com.cool.store.utils.UUIDUtils; import com.cool.store.vo.PartnerUserInfoVO; import com.cool.store.vo.wx.MiniProgramUserVO; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -71,7 +69,6 @@ public class WechatMiniAppServiceImpl implements WechatMiniAppService { @Value("${recommended.channel.id}") private Integer recommended; - @Override public PartnerUserInfoVO miniProgramLogin(MiniProgramLoginDTO param) { log.info("miniProgramLogin #param {}", JSONObject.toJSONString(param)); @@ -211,4 +208,17 @@ public class WechatMiniAppServiceImpl implements WechatMiniAppService { return userInfoVO; } + @Override + public String getMiniAppUrl() { + // 获取小程序token + String accessToken = wechatRest.getAccessToken(wxAppId, wxAppSecret); + MiniAppUrlLinkReqDTO miniAppUrlLinkReqDTO = new MiniAppUrlLinkReqDTO(); +// miniAppUrlLinkReqDTO.setPath(weixinIndexUrl); + MiniAppUrlLinkDTO miniAppUrlLink = wechatRest.getMiniAppUrlLink(accessToken, miniAppUrlLinkReqDTO); + if (miniAppUrlLink != null){ + return miniAppUrlLink.getUrlLink(); + } + return null; + } + } diff --git a/coolstore-partner-service/src/test/java/com/cool/store/service/SmsServiceTest.java b/coolstore-partner-service/src/test/java/com/cool/store/service/SmsServiceTest.java new file mode 100644 index 000000000..a34d01d75 --- /dev/null +++ b/coolstore-partner-service/src/test/java/com/cool/store/service/SmsServiceTest.java @@ -0,0 +1,16 @@ +package com.cool.store.service; + + +import org.junit.jupiter.api.Test; + +/** + * @Author: young.yu + * @Date: 2023-09-14 15:22 + * @Description: + */class SmsServiceTest { + + @Test + void sendSmsNormal() { + + } +} \ No newline at end of file diff --git a/coolstore-partner-webb/src/main/java/com/cool/store/controller/TestController.java b/coolstore-partner-webb/src/main/java/com/cool/store/controller/TestController.java index 8c0bf238e..0f24ff73a 100644 --- a/coolstore-partner-webb/src/main/java/com/cool/store/controller/TestController.java +++ b/coolstore-partner-webb/src/main/java/com/cool/store/controller/TestController.java @@ -26,6 +26,7 @@ import com.cool.store.service.*; import com.cool.store.vo.cuser.IdentityCardInfoVO; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -63,6 +64,9 @@ public class TestController { @Resource private FollowTaskService followTaskService; + @Autowired + private WechatMiniAppService wechatMiniAppService; + @PostMapping("/post") public ResponseResult get(@RequestBody List testRequestList){ log.info(JSONObject.toJSONString(testRequestList)); @@ -285,4 +289,9 @@ public class TestController { public ResponseResult initOpenArea() { return ResponseResult.success(openAreaService.addOpenArea()); } + + @GetMapping("/getMiniAppUrl") + public ResponseResult getMiniAppUrl(){ + return ResponseResult.success(wechatMiniAppService.getMiniAppUrl()); + } } diff --git a/coolstore-partner-webc/src/main/java/com/cool/store/config/SignValidateFilter.java b/coolstore-partner-webc/src/main/java/com/cool/store/config/SignValidateFilter.java index 1c3a6050b..c9a2e2a15 100644 --- a/coolstore-partner-webc/src/main/java/com/cool/store/config/SignValidateFilter.java +++ b/coolstore-partner-webc/src/main/java/com/cool/store/config/SignValidateFilter.java @@ -48,6 +48,7 @@ public class SignValidateFilter implements Filter { private static List patternList = Lists.newArrayList("/web/check/ok","/check/ok", + "/partner/mini/program/**", "/partner/mini/program/doc.html","/partner/mini/program/v2/api-docs","/**/test/**", "/partner/mini/program/oss/getUploadFileConfig", "/partner/mini/program/v1/partnerManage/partner/getIdentityCardInfo",