@@ -16,8 +16,10 @@ public enum WeiXinServiceCmd implements SignServiceCommand { | |||
REFUNDQUERYV2("微信V2退款查询","refundV2Query", AtsQueryRefundV2Request.class), | |||
VEHICLEUSERSTATE("微信车主状态查询及获取签约参数","vehicleUserState", AtsVehicleUserStateRequest.class), | |||
MPSENDMESSAGE("微信公众号发送订阅信息","mpSendMessage", WxMpSendMessageRequest.class), | |||
MPMESSAGElIST("微信公众号获取模板列表","mpMessageList", WxMpMessageTemplateListRequest.class), | |||
MPISSUBSCRIBED("微信公众号是否订阅","isSubscribed", WxMpIsSubscribedRequest.class), | |||
MINISENDMESSAGE("微信小程序发送信息","miniSendMessage", WxMiniSendMessageRequest.class), | |||
MINIMESSAGElIST("微信小程序获取模板列表","miniMessageList", WxMiniMessageTemplateListRequest.class), | |||
; | |||
@@ -0,0 +1,42 @@ | |||
package cn.com.taiji.core.model.comm.protocol.ats.weiXin; | |||
import java.util.List; | |||
import com.fasterxml.jackson.annotation.JsonProperty; | |||
import lombok.Getter; | |||
import lombok.Setter; | |||
/** | |||
* 微信小程序-消息模板dto | |||
* | |||
*/ | |||
@Getter | |||
@Setter | |||
public class WxMiniMessageTemplateListDto { | |||
// 模板ID | |||
@JsonProperty("priTmplId") | |||
private String priTmplId; | |||
// 模板标题 | |||
@JsonProperty("title") | |||
private String title; | |||
// 模板内容(含占位符) | |||
@JsonProperty("content") | |||
private String content; | |||
// 示例内容 | |||
@JsonProperty("example") | |||
private String example; | |||
// 模板类型 | |||
@JsonProperty("type") | |||
private Integer type; | |||
// 枚举值列表(根据实际情况调整类型) | |||
@JsonProperty("keywordEnumValueList") | |||
private List<Object> keywordEnumValueList; | |||
} | |||
@@ -0,0 +1,54 @@ | |||
package cn.com.taiji.core.model.comm.protocol.ats.weiXin; | |||
import java.util.ArrayList; | |||
import com.google.common.collect.Lists; | |||
import cn.com.taiji.common.manager.net.http.ServiceHandleException; | |||
import cn.com.taiji.core.model.comm.protocol.ats.AbstractAtsRequest; | |||
import cn.com.taiji.core.model.comm.protocol.valid.ErrorMsgBuilder; | |||
import cn.com.taiji.core.model.comm.protocol.valid.GlyServiceError; | |||
import cn.hutool.core.collection.CollectionUtil; | |||
import lombok.Getter; | |||
import lombok.Setter; | |||
/** | |||
* 微信小程序-获取消息模板列表 | |||
* | |||
* @Author weicailin | |||
* @Date 2023/5/18 18:15 | |||
* @Email 13079168756@163.com | |||
*/ | |||
@Getter | |||
@Setter | |||
public class WxMiniMessageTemplateListRequest extends AbstractAtsRequest<WxMiniMessageTemplateListResponse> { | |||
public WxMiniMessageTemplateListRequest() { | |||
super(WeiXinServiceCmd.MINIMESSAGElIST); | |||
} | |||
private String clientId; | |||
public WxMiniMessageTemplateListRequest valid() throws ServiceHandleException { | |||
final ArrayList<String> failParamInfo = Lists.newArrayList(); | |||
if (clientId == null || clientId.trim().isEmpty()) | |||
failParamInfo.add("消息客户端id"); | |||
//检验输错的数据参数 | |||
if (!CollectionUtil.isEmpty(failParamInfo)) { | |||
throw GlyServiceError.RESPONSE_ERROR.toHandleException(String.join("、", failParamInfo) + ",不能为空"); | |||
} | |||
return this; | |||
} | |||
public String getClientId() { | |||
return clientId; | |||
} | |||
@Override | |||
protected void validate(ErrorMsgBuilder builder) { | |||
} | |||
} |
@@ -0,0 +1,15 @@ | |||
package cn.com.taiji.core.model.comm.protocol.ats.weiXin; | |||
import java.util.List; | |||
import cn.com.taiji.core.model.comm.protocol.ats.AbstractAtsResponse; | |||
import lombok.Getter; | |||
import lombok.Setter; | |||
@Getter | |||
@Setter | |||
public class WxMiniMessageTemplateListResponse extends AbstractAtsResponse { | |||
private List<WxMiniMessageTemplateListDto> list; | |||
} |
@@ -36,7 +36,7 @@ public class WxMiniSendMessageRequest extends AbstractAtsRequest<WxMiniSendMessa | |||
//接收者(用户)的 openid | |||
// private String openid; | |||
private List<String> wxOpenidList; | |||
private String wxOpenId; | |||
//模板内容,格式形如 { "key1": { "value": any }, "key2": { "value": any } }的object | |||
// private String dataJson; | |||
//模板内容,格式形如 { "key1": { "value": any }, "key2": { "value": any } }的object | |||
@@ -70,7 +70,7 @@ public class WxMiniSendMessageRequest extends AbstractAtsRequest<WxMiniSendMessa | |||
// if (openid == null || openid.trim().isEmpty()) | |||
// failParamInfo.add("用户openid"); | |||
if (CollectionUtils.isEmpty(wxOpenidList)) | |||
if (StringUtils.hasText(wxOpenId)) | |||
failParamInfo.add("微信用户openid列表"); | |||
@@ -106,104 +106,6 @@ public class WxMiniSendMessageRequest extends AbstractAtsRequest<WxMiniSendMessa | |||
return this; | |||
} | |||
public String getClientId() { | |||
return clientId; | |||
} | |||
public String getTemplateId() { | |||
return templateId; | |||
} | |||
public String getPage() { | |||
return page; | |||
} | |||
// public String getOpenid() { | |||
// return openid; | |||
// } | |||
public List<String> getWxOpenidList() { | |||
return wxOpenidList; | |||
} | |||
// public String getDataJson() { | |||
// return dataJson; | |||
// } | |||
public Object getDataObject() { | |||
return dataObject; | |||
} | |||
public String getMiniProgramState() { | |||
return miniProgramState; | |||
} | |||
public String getLang() { | |||
return lang; | |||
} | |||
public LocalDateTime getSendTime() { | |||
return sendTime; | |||
} | |||
public String getTitle() { | |||
return title; | |||
} | |||
public void setClientId(String clientId) { | |||
this.clientId = clientId; | |||
} | |||
public void setTemplateId(String templateId) { | |||
this.templateId = templateId; | |||
} | |||
public void setPage(String page) { | |||
this.page = page; | |||
} | |||
public void setWxOpenidList(List<String> wxOpenidList) { | |||
this.wxOpenidList = wxOpenidList; | |||
} | |||
public void setDataObject(Object dataObject) { | |||
this.dataObject = dataObject; | |||
} | |||
public void setMiniProgramState(String miniProgramState) { | |||
this.miniProgramState = miniProgramState; | |||
} | |||
public void setLang(String lang) { | |||
this.lang = lang; | |||
} | |||
public void setSendTime(LocalDateTime sendTime) { | |||
this.sendTime = sendTime; | |||
} | |||
public void setTitle(String title) { | |||
this.title = title; | |||
} | |||
public String getTemplateName() { | |||
return templateName; | |||
} | |||
public void setTemplateName(String templateName) { | |||
this.templateName = templateName; | |||
} | |||
public String getTemplateExample() { | |||
return templateExample; | |||
} | |||
public void setTemplateExample(String templateExample) { | |||
this.templateExample = templateExample; | |||
} | |||
@Override | |||
protected void validate(ErrorMsgBuilder builder) { | |||
@@ -0,0 +1,34 @@ | |||
package cn.com.taiji.core.model.comm.protocol.ats.weiXin; | |||
import com.fasterxml.jackson.annotation.JsonProperty; | |||
import lombok.Getter; | |||
import lombok.Setter; | |||
/** | |||
* 微信小程序-消息模板dto | |||
* | |||
*/ | |||
@Getter | |||
@Setter | |||
public class WxMpMessageTemplateListDto { | |||
@JsonProperty("template_id") | |||
private String templateId; | |||
@JsonProperty("title") | |||
private String title; | |||
@JsonProperty("primary_industry") | |||
private String primaryIndustry; | |||
@JsonProperty("deputy_industry") | |||
private String deputyIndustry; | |||
@JsonProperty("content") | |||
private String content; | |||
@JsonProperty("example") | |||
private String example; | |||
} | |||
@@ -0,0 +1,54 @@ | |||
package cn.com.taiji.core.model.comm.protocol.ats.weiXin; | |||
import java.util.ArrayList; | |||
import com.google.common.collect.Lists; | |||
import cn.com.taiji.common.manager.net.http.ServiceHandleException; | |||
import cn.com.taiji.core.model.comm.protocol.ats.AbstractAtsRequest; | |||
import cn.com.taiji.core.model.comm.protocol.valid.ErrorMsgBuilder; | |||
import cn.com.taiji.core.model.comm.protocol.valid.GlyServiceError; | |||
import cn.hutool.core.collection.CollectionUtil; | |||
import lombok.Getter; | |||
import lombok.Setter; | |||
/** | |||
* 微信公众号-获取消息模板列表 | |||
* | |||
* @Author weicailin | |||
* @Date 2023/5/18 18:15 | |||
* @Email 13079168756@163.com | |||
*/ | |||
@Getter | |||
@Setter | |||
public class WxMpMessageTemplateListRequest extends AbstractAtsRequest<WxMpMessageTemplateListResponse> { | |||
public WxMpMessageTemplateListRequest() { | |||
super(WeiXinServiceCmd.MPMESSAGElIST); | |||
} | |||
private String clientId; | |||
public WxMpMessageTemplateListRequest valid() throws ServiceHandleException { | |||
final ArrayList<String> failParamInfo = Lists.newArrayList(); | |||
if (clientId == null || clientId.trim().isEmpty()) | |||
failParamInfo.add("消息客户端id"); | |||
//检验输错的数据参数 | |||
if (!CollectionUtil.isEmpty(failParamInfo)) { | |||
throw GlyServiceError.RESPONSE_ERROR.toHandleException(String.join("、", failParamInfo) + ",不能为空"); | |||
} | |||
return this; | |||
} | |||
public String getClientId() { | |||
return clientId; | |||
} | |||
@Override | |||
protected void validate(ErrorMsgBuilder builder) { | |||
} | |||
} |
@@ -0,0 +1,22 @@ | |||
package cn.com.taiji.core.model.comm.protocol.ats.weiXin; | |||
import java.util.List; | |||
import cn.com.taiji.core.model.comm.protocol.ats.AbstractAtsResponse; | |||
import lombok.Getter; | |||
import lombok.Setter; | |||
/** | |||
* 微信公众号-订阅消息发送 | |||
* @Author weicailin | |||
* @Date 2023/5/18 18:15 | |||
* @Email 13079168756@163.com | |||
*/ | |||
@Getter | |||
@Setter | |||
public class WxMpMessageTemplateListResponse extends AbstractAtsResponse { | |||
private List<WxMpMessageTemplateListDto> list; | |||
} |
@@ -8,7 +8,8 @@ import cn.com.taiji.common.manager.net.http.ServiceHandleException; | |||
import cn.com.taiji.core.model.comm.protocol.ats.AbstractAtsRequest; | |||
import cn.com.taiji.core.model.comm.protocol.valid.ErrorMsgBuilder; | |||
import cn.com.taiji.core.model.comm.protocol.valid.GlyServiceError; | |||
import org.springframework.util.CollectionUtils; | |||
import lombok.Getter; | |||
import lombok.Setter; | |||
import org.springframework.util.StringUtils; | |||
import com.google.common.collect.Lists; | |||
@@ -20,7 +21,8 @@ import cn.hutool.core.collection.CollectionUtil; | |||
/** | |||
* 微信公众号-订阅消息发送 | |||
*/ | |||
@Getter | |||
@Setter | |||
public class WxMpSendMessageRequest extends AbstractAtsRequest<WxMpSendMessageResponse> { | |||
public WxMpSendMessageRequest() { | |||
@@ -41,7 +43,7 @@ public class WxMpSendMessageRequest extends AbstractAtsRequest<WxMpSendMessageRe | |||
/*** | |||
* 接收者openid | |||
*/ | |||
private List<String> mpOpenidList; | |||
private String mpOpenId; | |||
/*** | |||
* 模板ID | |||
@@ -90,7 +92,7 @@ public class WxMpSendMessageRequest extends AbstractAtsRequest<WxMpSendMessageRe | |||
if (data == null) | |||
failParamInfo.add("消息内容"); | |||
if (CollectionUtils.isEmpty(mpOpenidList)) | |||
if (!StringUtils.hasText(mpOpenId)) | |||
failParamInfo.add("公众号用户openid列表"); | |||
if (!StringUtils.hasText(templateName)) | |||
@@ -111,102 +113,6 @@ public class WxMpSendMessageRequest extends AbstractAtsRequest<WxMpSendMessageRe | |||
return this; | |||
} | |||
public String getClientId() { | |||
return clientId; | |||
} | |||
public LocalDateTime getSendTime() { | |||
return sendTime; | |||
} | |||
public String getTitle() { | |||
return title; | |||
} | |||
public String getTemplateName() { | |||
return templateName; | |||
} | |||
public String getTemplateExample() { | |||
return templateExample; | |||
} | |||
public List<String> getMpOpenidList() { | |||
return mpOpenidList; | |||
} | |||
public String getTemplateId() { | |||
return templateId; | |||
} | |||
public Object getData() { | |||
return data; | |||
} | |||
public String getUrl() { | |||
return url; | |||
} | |||
public Object getMiniprogram() { | |||
return miniprogram; | |||
} | |||
public String getPagePath() { | |||
return pagePath; | |||
} | |||
public String getClientMsgId() { | |||
return clientMsgId; | |||
} | |||
public void setClientId(String clientId) { | |||
this.clientId = clientId; | |||
} | |||
public void setSendTime(LocalDateTime sendTime) { | |||
this.sendTime = sendTime; | |||
} | |||
public void setTitle(String title) { | |||
this.title = title; | |||
} | |||
public void setTemplateName(String templateName) { | |||
this.templateName = templateName; | |||
} | |||
public void setTemplateExample(String templateExample) { | |||
this.templateExample = templateExample; | |||
} | |||
public void setMpOpenidList(List<String> mpOpenidList) { | |||
this.mpOpenidList = mpOpenidList; | |||
} | |||
public void setTemplateId(String templateId) { | |||
this.templateId = templateId; | |||
} | |||
public void setData(Object data) { | |||
this.data = data; | |||
} | |||
public void setUrl(String url) { | |||
this.url = url; | |||
} | |||
public void setMiniprogram(Object miniprogram) { | |||
this.miniprogram = miniprogram; | |||
} | |||
public void setPagePath(String pagePath) { | |||
this.pagePath = pagePath; | |||
} | |||
public void setClientMsgId(String clientMsgId) { | |||
this.clientMsgId = clientMsgId; | |||
} | |||
@Override | |||
protected void validate(ErrorMsgBuilder builder) { | |||
@@ -1,5 +1,6 @@ | |||
package cn.com.taiji.core.repo.jpa.msgw; | |||
import java.time.LocalDateTime; | |||
import java.util.List; | |||
import cn.com.taiji.core.entity.dict.msgw.MessageType; | |||
@@ -23,6 +24,6 @@ public interface MsgwSendDetailsRepo extends AbstractJpaRepo<MsgwSendDetails, St | |||
"AND (:endDateTime IS NULL OR m.insertTime <= :endDateTime)") | |||
long countStatistics(@Param("messageType") MessageType messageType, | |||
@Param("sendResult") MessageResult sendResult, | |||
@Param("startDateTime") String startDateTime, | |||
@Param("endDateTime") String endDateTime); | |||
@Param("startDateTime") LocalDateTime startDateTime, | |||
@Param("endDateTime") LocalDateTime endDateTime); | |||
} |
@@ -2,6 +2,8 @@ package cn.com.taiji.core.repo.request.msgw; | |||
import cn.com.taiji.common.pub.dao.HqlBuilder; | |||
import cn.com.taiji.common.repo.request.jpa.JpaDateTimePageableDataRequest; | |||
import cn.com.taiji.core.entity.dict.msgw.MessageResult; | |||
import cn.com.taiji.core.entity.dict.msgw.MessageType; | |||
import cn.com.taiji.core.entity.msgw.MsgwSendDetails; | |||
import lombok.Getter; | |||
import lombok.Setter; | |||
@@ -10,7 +12,8 @@ import lombok.Setter; | |||
@Setter | |||
public class MsgwSendDetailsPageRequest extends JpaDateTimePageableDataRequest<MsgwSendDetails>{ | |||
private MessageType messageType; | |||
private MessageResult sendResult; | |||
public MsgwSendDetailsPageRequest() { | |||
@@ -21,7 +24,10 @@ public class MsgwSendDetailsPageRequest extends JpaDateTimePageableDataRequest<M | |||
@Override | |||
public HqlBuilder toSelectHql(){ | |||
HqlBuilder hql = new HqlBuilder("from MsgwSendDetails where 1=1 "); | |||
hql.append(" and messageType=:messageType", messageType); | |||
hql.append(" and sendResult=:sendResult", sendResult); | |||
hql.append(" and insertTime>=:startTime", startTime); | |||
hql.append(" and insertTime<=:endTime", endTime); | |||
return hql; | |||
} | |||
@@ -10,6 +10,7 @@ dependencies { | |||
implementation "${groupname}:comm-core:1.0.0-SNAPSHOT" | |||
implementation "${groupname}:sample-protocol:1.0.0-SNAPSHOT" | |||
implementation "${groupname}:ias-protocol:1.0.0-SNAPSHOT" | |||
implementation "${groupname}:ats-protocol:1.0.0-SNAPSHOT" | |||
implementation('cn.com.taiji.common:sso-client:2.3.10.7') | |||
implementation "org.springframework.boot:spring-boot-starter-security" | |||
implementation "com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery" |
@@ -0,0 +1,59 @@ | |||
package cn.com.taiji.msgw.api; | |||
import javax.validation.Valid; | |||
import cn.com.taiji.common.model.dao.Pagination; | |||
import cn.com.taiji.core.repo.request.msgw.MsgwSendDetailsPageRequest; | |||
import cn.com.taiji.msgw.dto.*; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.validation.annotation.Validated; | |||
import org.springframework.web.bind.annotation.PostMapping; | |||
import org.springframework.web.bind.annotation.RequestBody; | |||
import org.springframework.web.bind.annotation.RequestMapping; | |||
import org.springframework.web.bind.annotation.RestController; | |||
import cn.com.taiji.common.manager.ManagerException; | |||
import cn.com.taiji.common.web.ApiResponse; | |||
import cn.com.taiji.msgw.manager.messageWaitSend.MessageWaitSendManager; | |||
import cn.com.taiji.msgw.model.FormatException; | |||
import io.swagger.annotations.Api; | |||
import io.swagger.annotations.ApiOperation; | |||
@Api(tags = {"005.推送管理-公用"}) | |||
@RestController | |||
@RequestMapping("/message") | |||
public class MessageSharedController { | |||
@Autowired | |||
private MessageWaitSendManager messageWaitSendManager; | |||
@ApiOperation(value = "分页查询") | |||
@PostMapping(value = "/page") | |||
public ApiResponse<Pagination> page(@Validated @RequestBody MsgwSendDetailsPageRequest request) throws ManagerException { | |||
Pagination page = messageWaitSendManager.page(request); | |||
return ApiResponse.of(page); | |||
} | |||
@ApiOperation(value = "明细") | |||
@PostMapping(value = "/view") | |||
public ApiResponse<MessageSendDetailsResponseDto> view(@RequestBody @Valid MessageSendDetailsRequestDto request) throws ManagerException { | |||
MessageSendDetailsResponseDto response = messageWaitSendManager.view(request); | |||
return ApiResponse.of(response); | |||
} | |||
@ApiOperation(value = "消息重发") | |||
@PostMapping(value = "/retry") | |||
public ApiResponse<MessageRetryResponseDto> retry(@RequestBody @Valid MessageRetryRequestDto request) throws ManagerException, FormatException { | |||
MessageRetryResponseDto response = messageWaitSendManager.messageRetry(request); | |||
return ApiResponse.of(response); | |||
} | |||
@ApiOperation(value = "消息统计") | |||
@PostMapping(value = "/statistics") | |||
public ApiResponse<MessageStatisticsResponseDto> statistics(@RequestBody @Valid MessageStatisticsRequestDto request) throws ManagerException { | |||
MessageStatisticsResponseDto response = messageWaitSendManager.messageStatistics(request); | |||
return ApiResponse.of(response); | |||
} | |||
} |
@@ -0,0 +1,42 @@ | |||
package cn.com.taiji.msgw.api; | |||
import javax.validation.Valid; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.web.bind.annotation.PostMapping; | |||
import org.springframework.web.bind.annotation.RequestBody; | |||
import org.springframework.web.bind.annotation.RequestMapping; | |||
import org.springframework.web.bind.annotation.RestController; | |||
import cn.com.taiji.common.manager.ManagerException; | |||
import cn.com.taiji.common.web.ApiResponse; | |||
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.WxMiniMessageTemplateListRequest; | |||
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.WxMiniMessageTemplateListResponse; | |||
import cn.com.taiji.msgw.manager.weixin.WxManager; | |||
import io.swagger.annotations.Api; | |||
import io.swagger.annotations.ApiOperation; | |||
/** | |||
* @Author ChenChao | |||
* @Date 2024/10/7 0:15 | |||
* @Description | |||
*/ | |||
@Api(tags = {"007.推送管理-微信小程序"}) | |||
@RestController | |||
@RequestMapping("/wxMini/push") | |||
public class WxMiniPushController { | |||
@Autowired | |||
private WxManager wxManager; | |||
@ApiOperation(value = "微信小程序-消息模板列表") | |||
@PostMapping(value = "/wxMiniMessageList") | |||
public ApiResponse<WxMiniMessageTemplateListResponse> wxMiniMessageList(@RequestBody @Valid WxMiniMessageTemplateListRequest request) throws ManagerException { | |||
WxMiniMessageTemplateListResponse response = wxManager.MiniMessageTemplateList(request); | |||
return ApiResponse.of(response); | |||
} | |||
} |
@@ -0,0 +1,43 @@ | |||
package cn.com.taiji.msgw.api; | |||
import javax.validation.Valid; | |||
import cn.com.taiji.core.manager.tools.minio.MinioUtile; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.web.bind.annotation.PostMapping; | |||
import org.springframework.web.bind.annotation.RequestBody; | |||
import org.springframework.web.bind.annotation.RequestMapping; | |||
import org.springframework.web.bind.annotation.RestController; | |||
import cn.com.taiji.common.manager.ManagerException; | |||
import cn.com.taiji.common.web.ApiResponse; | |||
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.WxMpMessageTemplateListRequest; | |||
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.WxMpMessageTemplateListResponse; | |||
import cn.com.taiji.msgw.manager.weixin.WxManager; | |||
import io.swagger.annotations.Api; | |||
import io.swagger.annotations.ApiOperation; | |||
/** | |||
* @Author ChenChao | |||
* @Date 2024/10/7 0:15 | |||
* @Description | |||
*/ | |||
@Api(tags = {"006.推送管理-微信公众号"}) | |||
@RestController | |||
@RequestMapping("/wxMp/push") | |||
public class WxMpPushController { | |||
@Autowired | |||
private WxManager wxManager; | |||
@Autowired | |||
private MinioUtile minioUtile; | |||
@ApiOperation(value = "微信公众号-消息模板列表") | |||
@PostMapping(value = "/wxMpMessageList") | |||
public ApiResponse<WxMpMessageTemplateListResponse> wxMpMessageList(@RequestBody @Valid WxMpMessageTemplateListRequest request) throws ManagerException { | |||
WxMpMessageTemplateListResponse response = wxManager.MpMessageTemplateList(request); | |||
return ApiResponse.of(response); | |||
} | |||
} |
@@ -31,7 +31,7 @@ import cn.com.taiji.msgw.model.MyFinals; | |||
basePackages = {"cn.com.taiji." + AppConfig.APP_NAME + ".repo.jpa", "cn.com.taiji.core.repo.jpa"}, | |||
repositoryFactoryBeanClass = MyJpaRespositoryFactoryBean.class) | |||
@EnableTransactionManagement(mode = AdviceMode.ASPECTJ, proxyTargetClass = true) | |||
@ComponentScan(value = "cn.com.taiji.core.manager.comm.client.feign") | |||
@ComponentScan(value = {"cn.com.taiji.core.manager.comm.client.feign","cn.com.taiji.core.manager.tools.minio"}) | |||
public class AppConfig extends AbstractManager { | |||
public static final String APP_NAME = "msgw"; | |||
@Autowired |
@@ -0,0 +1,17 @@ | |||
package cn.com.taiji.msgw.dto; | |||
import javax.validation.constraints.NotBlank; | |||
import cn.com.taiji.core.dto.AbstractStaffBizRequestDTO; | |||
import io.swagger.annotations.ApiModelProperty; | |||
import lombok.Getter; | |||
import lombok.Setter; | |||
@Getter | |||
@Setter | |||
public class MessageSendDetailsRequestDto extends AbstractStaffBizRequestDTO { | |||
@ApiModelProperty(value = "子表id",required = true) | |||
@NotBlank(message = "id不能为空") | |||
private String sendDetailsId; | |||
} |
@@ -0,0 +1,12 @@ | |||
package cn.com.taiji.msgw.dto; | |||
import cn.com.taiji.common.entity.BaseEntity; | |||
import cn.com.taiji.core.entity.msgw.MsgwSendDetails; | |||
import lombok.Setter; | |||
@Setter | |||
public class MessageSendDetailsResponseDto extends BaseEntity { | |||
private MsgwSendDetails sendDetails; | |||
} |
@@ -0,0 +1,21 @@ | |||
package cn.com.taiji.msgw.manager.weixin; | |||
import cn.com.taiji.common.manager.ManagerException; | |||
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.WxMiniMessageTemplateListRequest; | |||
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.WxMiniMessageTemplateListResponse; | |||
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.WxMpMessageTemplateListRequest; | |||
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.WxMpMessageTemplateListResponse; | |||
/** | |||
* 微信开发工具(小程序、公众号) | |||
* @Author weicailin | |||
* @Date 2023/5/18 16:14 | |||
* @Email 13079168756@163.com | |||
*/ | |||
public interface WxManager { | |||
WxMpMessageTemplateListResponse MpMessageTemplateList(WxMpMessageTemplateListRequest request) throws ManagerException; | |||
WxMiniMessageTemplateListResponse MiniMessageTemplateList(WxMiniMessageTemplateListRequest request) throws ManagerException; | |||
} |
@@ -0,0 +1,38 @@ | |||
package cn.com.taiji.msgw.manager.weixin; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.stereotype.Service; | |||
import cn.com.taiji.common.manager.ManagerException; | |||
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.WxMiniMessageTemplateListRequest; | |||
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.WxMiniMessageTemplateListResponse; | |||
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.WxMpMessageTemplateListRequest; | |||
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.WxMpMessageTemplateListResponse; | |||
import cn.com.taiji.core.repo.jpa.msgw.MsgwSendDetailsRepo; | |||
import cn.com.taiji.msgw.manager.AbstractCommManager; | |||
/** | |||
* 微信开发工具(小程序、公众号) | |||
* | |||
* @Author weicailin | |||
* @Date 2023/5/18 16:14 | |||
* @Email 13079168756@163.com | |||
*/ | |||
@Service | |||
public class WxManagerImpl extends AbstractCommManager implements WxManager { | |||
@Autowired | |||
private MsgwSendDetailsRepo sendDetailsRepo; | |||
@Override | |||
public WxMpMessageTemplateListResponse MpMessageTemplateList(WxMpMessageTemplateListRequest request) throws ManagerException { | |||
WxMpMessageTemplateListResponse response = jsonPostRepeat(request); | |||
return response; | |||
} | |||
@Override | |||
public WxMiniMessageTemplateListResponse MiniMessageTemplateList(WxMiniMessageTemplateListRequest request) throws ManagerException { | |||
WxMiniMessageTemplateListResponse response = jsonPostRepeat(request); | |||
return response; | |||
} | |||
} |
@@ -11,9 +11,9 @@ import java.io.IOException; | |||
*/ | |||
public interface WxManager { | |||
WxMiniSendMessageResponse miniSendMessageV2(WxMiniSendMessageRequest request, String apiKey) throws IOException, ServiceHandleException; | |||
WxMiniSendMessageResponse miniSendMessageV2(WxMiniSendMessageRequest request) throws IOException, ServiceHandleException; | |||
WxMpSendMessageResponse mpSendMessage(WxMpSendMessageRequest request, String apiKey) throws IOException, ServiceHandleException; | |||
WxMpSendMessageResponse mpSendMessage(WxMpSendMessageRequest request) throws IOException, ServiceHandleException; | |||
WxMpIsSubscribedResponse serviceHandle(WxMpIsSubscribedRequest request) throws ServiceHandleException; | |||
@@ -2,16 +2,8 @@ package cn.com.taiji.ats.manager.clientConfig; | |||
import java.io.IOException; | |||
import java.util.ArrayList; | |||
import java.util.HashMap; | |||
import java.util.List; | |||
import java.util.Map; | |||
import cn.com.taiji.ats.model.wx.WxUserInfoModel; | |||
import cn.com.taiji.ats.tools.HttpClientUtil; | |||
import cn.com.taiji.common.manager.net.http.ServiceHandleException; | |||
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.*; | |||
import cn.com.taiji.core.model.comm.protocol.valid.GlyServiceError; | |||
import cn.hutool.json.JSONUtil; | |||
import org.slf4j.Logger; | |||
import org.slf4j.LoggerFactory; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
@@ -19,13 +11,18 @@ import org.springframework.beans.factory.annotation.Value; | |||
import org.springframework.http.HttpMethod; | |||
import org.springframework.stereotype.Service; | |||
import cn.com.taiji.ats.tools.WxRequestAccessTokenUtil; | |||
import cn.com.taiji.ats.manager.tools.wx.WxRequestUrls; | |||
import cn.com.taiji.ats.manager.tools.wx.WxSendRequestUtil; | |||
import cn.com.taiji.ats.model.WxUserInfoVO; | |||
import cn.com.taiji.ats.model.protocol.channel.wx.dto.WxMiniSendMessageDto; | |||
import cn.com.taiji.ats.model.protocol.channel.wx.dto.WxMpSendMessageDto; | |||
import cn.com.taiji.ats.model.wx.WxUserInfoModel; | |||
import cn.com.taiji.ats.tools.HttpClientUtil; | |||
import cn.com.taiji.ats.tools.WxRequestAccessTokenUtil; | |||
import cn.com.taiji.common.manager.ManagerException; | |||
import cn.com.taiji.common.manager.net.http.ServiceHandleException; | |||
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.*; | |||
import cn.com.taiji.core.model.comm.protocol.valid.GlyServiceError; | |||
import cn.hutool.json.JSONUtil; | |||
/** | |||
* 微信开发工具(小程序、公众号) | |||
@@ -56,7 +53,7 @@ public class WxManagerImpl implements WxManager { | |||
// @PushRecord(description = WX_MINI_SUB_MSG_DESC) | |||
@Override | |||
public WxMiniSendMessageResponse miniSendMessageV2(WxMiniSendMessageRequest request, String apiKey) throws IOException, ServiceHandleException { | |||
public WxMiniSendMessageResponse miniSendMessageV2(WxMiniSendMessageRequest request) throws IOException, ServiceHandleException { | |||
//1、获取调用微信接口的accessToken凭证 | |||
String accessToken = wxRequestAccessTokenUtil.getStableAccessToken(miniAppid, miniSecret, false, MINI_ACCESS_STABLE_TOKEN_PREFIX); | |||
//2、发送消息 | |||
@@ -69,46 +66,28 @@ public class WxManagerImpl implements WxManager { | |||
logger.info("********** 微信小程序订阅消息发送 START **********"); | |||
int successCount = 0; | |||
String errorReason = "部分微信小程序订阅消息发送失败!"; | |||
List<String> failTouserList = new ArrayList<>(); | |||
//1、设置url参数 | |||
String url = String.format(WxRequestUrls.MINI_SEND_MESSAGE_URL, accessToken); | |||
String wxOpenId = request.getWxOpenId(); | |||
//2、dto设置值 | |||
for (String wxOpenid : request.getWxOpenidList()) { | |||
WxMiniSendMessageDto wxMiniSendMessageDto = new WxMiniSendMessageDto( | |||
request.getTemplateId(), | |||
request.getPage(), | |||
wxOpenid, | |||
request.getDataObject(), | |||
request.getMiniProgramState(), | |||
request.getLang() | |||
); | |||
//3、发送微信小程序消息 | |||
try { | |||
wxSendRequestUtil.sendRequest(HttpMethod.POST, url, wxMiniSendMessageDto); | |||
successCount++; | |||
} catch (Exception e) { | |||
errorReason = e.getMessage(); | |||
logger.error(e.toString()); | |||
failTouserList.add(wxOpenid); | |||
//消息发送失败告警 | |||
if (successCount != request.getWxOpenidList().size()) { | |||
// MessageAlarmRequest alarmRequest = new MessageAlarmRequest( | |||
// message.getId(), | |||
// failTouserList, | |||
// request.getWxOpenidList().size(), | |||
// successCount, | |||
// errorReason); | |||
// pushMessageAlarmManager.messageAlarm(alarmRequest); | |||
} | |||
// throw new ManagerException("微信小程序订阅消息推送失败!"); | |||
throw GlyServiceError.RESPONSE_ERROR.toHandleException("微信小程序订阅消息推送失败!"); | |||
} | |||
WxMiniSendMessageDto wxMiniSendMessageDto = new WxMiniSendMessageDto( | |||
request.getTemplateId(), | |||
request.getPage(), | |||
wxOpenId, | |||
request.getDataObject(), | |||
request.getMiniProgramState(), | |||
request.getLang() | |||
); | |||
//3、发送微信小程序消息 | |||
try { | |||
wxSendRequestUtil.sendRequest(HttpMethod.POST, url, wxMiniSendMessageDto); | |||
} catch (Exception e) { | |||
logger.error(e.toString()); | |||
failTouserList.add(wxOpenId); | |||
throw GlyServiceError.RESPONSE_ERROR.toHandleException("微信小程序订阅消息推送失败!"); | |||
} | |||
logger.info("********** 微信小程序订阅消息发送 END **********"); | |||
@@ -119,7 +98,7 @@ public class WxManagerImpl implements WxManager { | |||
// @PushRecord(description = WX_MP_TMP_MSG_DESC) | |||
@Override | |||
public WxMpSendMessageResponse mpSendMessage(WxMpSendMessageRequest request, String apiKey) throws IOException, ServiceHandleException { | |||
public WxMpSendMessageResponse mpSendMessage(WxMpSendMessageRequest request) throws IOException, ServiceHandleException { | |||
//1、获取调用微信接口的accessToken凭证 | |||
String accessToken = wxRequestAccessTokenUtil.getStableAccessToken(mpAppid, mpSecret, false, MP_ACCESS_STABLE_TOKEN_PREFIX); | |||
//2、发送消息 | |||
@@ -130,39 +109,34 @@ public class WxManagerImpl implements WxManager { | |||
private void sendWxMpMessage(WxMpSendMessageRequest request, String accessToken) { | |||
logger.info("********** 微信公众号模板消息发送 START **********"); | |||
int successCount = 0; | |||
String errorReason = "部分微信公众号模板消息发送失败!"; | |||
List<String> failTouserList = new ArrayList<>(); | |||
//1、设置url参数 | |||
String url = String.format(WxRequestUrls.MP_SEND_MESSAGE_URL, accessToken); | |||
//2、dto设置值 | |||
for (String mpOpenid : request.getMpOpenidList()) { | |||
String appid = null; | |||
if (request.getMiniprogram() != null) { | |||
appid = miniAppid; | |||
} | |||
WxMpSendMessageDto wxMpSendMessageDto = new WxMpSendMessageDto( | |||
mpOpenid, | |||
request.getTemplateId(), | |||
request.getData(), | |||
request.getUrl(), | |||
request.getMiniprogram(), | |||
appid, | |||
request.getPagePath(), | |||
request.getClientMsgId() | |||
); | |||
//3、发送微信公众号消息 | |||
try { | |||
wxSendRequestUtil.sendRequest(HttpMethod.POST, url, wxMpSendMessageDto); | |||
successCount++; | |||
} catch (Exception e) { | |||
errorReason = e.getMessage(); | |||
logger.error(e.toString()); | |||
failTouserList.add(mpOpenid); | |||
} | |||
String appid = null; | |||
String mpOpenid = request.getMpOpenId(); | |||
if (request.getMiniprogram() != null) { | |||
appid = miniAppid; | |||
} | |||
WxMpSendMessageDto wxMpSendMessageDto = new WxMpSendMessageDto( | |||
mpOpenid, | |||
request.getTemplateId(), | |||
request.getData(), | |||
request.getUrl(), | |||
request.getMiniprogram(), | |||
appid, | |||
request.getPagePath(), | |||
request.getClientMsgId() | |||
); | |||
//3、发送微信公众号消息 | |||
try { | |||
wxSendRequestUtil.sendRequest(HttpMethod.POST, url, wxMpSendMessageDto); | |||
} catch (Exception e) { | |||
logger.error(e.toString()); | |||
failTouserList.add(mpOpenid); | |||
} | |||
logger.info("********** 微信公众号模板消息发送 END **********"); | |||
} | |||
@@ -176,7 +150,7 @@ public class WxManagerImpl implements WxManager { | |||
accessToken = wxRequestAccessTokenUtil.getStableAccessToken(mpAppid, mpSecret, | |||
false, MP_ACCESS_STABLE_TOKEN_PREFIX); | |||
} catch (ManagerException | IOException e) { | |||
} catch (ManagerException e) { | |||
throw GlyServiceError.RESPONSE_ERROR.toHandleException(e.getMessage()); | |||
} | |||
//2、获取微信用户信息(包含订阅状态) | |||
@@ -197,7 +171,6 @@ public class WxManagerImpl implements WxManager { | |||
String url = String.format(WxRequestUrls.MP_GET_USERINFO_URL, accessToken, request.getOpenId()); | |||
//3、微信公众号-获取微信用户信息 | |||
String resJson = HttpClientUtil.sendGet(url); | |||
return JSONUtil.parseObj(resJson).toBean(WxUserInfoModel.class); | |||
} | |||
@@ -75,8 +75,12 @@ public class WinXinServiceHandler extends AbstractAtsServiceHandler<WeiXinServic | |||
return wxMessageManager.isSubscribed((WxMpIsSubscribedRequest) request); | |||
case MPSENDMESSAGE: | |||
return wxMessageManager.wxMpSendMessageHandler((WxMpSendMessageRequest) request); | |||
case MPMESSAGElIST: | |||
return wxMessageManager.wxMpMessageTemplateList((WxMpMessageTemplateListRequest) request); | |||
case MINISENDMESSAGE: | |||
return wxMessageManager.wxMiniSendMessageHandler((WxMiniSendMessageRequest) request); | |||
case MINIMESSAGElIST: | |||
return wxMessageManager.wxMiniMessageTemplateList((WxMiniMessageTemplateListRequest) request); | |||
case VEHICLEUSERSTATE: | |||
return vehicleUserStateManager.serviceHandle((AtsVehicleUserStateRequest) request); | |||
default: |
@@ -12,7 +12,9 @@ import cn.com.taiji.core.model.comm.protocol.ats.weiXin.*; | |||
public interface WxMessageManager { | |||
WxMiniMessageTemplateListResponse wxMiniMessageTemplateList(WxMiniMessageTemplateListRequest request) throws ServiceHandleException; | |||
WxMiniSendMessageResponse wxMiniSendMessageHandler(WxMiniSendMessageRequest request) throws ServiceHandleException; | |||
WxMpMessageTemplateListResponse wxMpMessageTemplateList(WxMpMessageTemplateListRequest request) throws ServiceHandleException; | |||
WxMpSendMessageResponse wxMpSendMessageHandler(WxMpSendMessageRequest request) throws ServiceHandleException; | |||
WxMpIsSubscribedResponse isSubscribed(WxMpIsSubscribedRequest request) throws ServiceHandleException; | |||
} |
@@ -1,12 +1,22 @@ | |||
package cn.com.taiji.ats.manager.handler.wx; | |||
import java.io.IOException; | |||
import java.util.List; | |||
import org.slf4j.Logger; | |||
import org.slf4j.LoggerFactory; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.beans.factory.annotation.Value; | |||
import org.springframework.stereotype.Service; | |||
import com.alibaba.fastjson2.JSON; | |||
import com.fasterxml.jackson.databind.JsonNode; | |||
import com.fasterxml.jackson.databind.ObjectMapper; | |||
import cn.com.taiji.ats.api.TokenHelper; | |||
import cn.com.taiji.ats.manager.clientConfig.WxManager; | |||
import cn.com.taiji.ats.manager.tools.wx.WxRequestUrls; | |||
import cn.com.taiji.ats.tools.HttpClientUtil; | |||
import cn.com.taiji.ats.tools.WxRequestAccessTokenUtil; | |||
import cn.com.taiji.common.manager.ManagerException; | |||
import cn.com.taiji.common.manager.net.http.ServiceHandleException; | |||
@@ -22,16 +32,53 @@ import cn.com.taiji.core.model.comm.protocol.valid.GlyServiceError; | |||
@Service | |||
public class WxMessageManagerImpl implements WxMessageManager { | |||
@Value("${wx.mini.appid}") | |||
private String miniAppid; | |||
@Value("${wx.mini.secret}") | |||
private String miniSecret; | |||
@Value("${wx.mp.appid}") | |||
private String mpAppid; | |||
@Value("${wx.mp.secret}") | |||
private String mpSecret; | |||
private final static String MINI_ACCESS_STABLE_TOKEN_PREFIX = "MINI_STABLE_ACCESS_TOKEN-"; | |||
private final static String MP_ACCESS_STABLE_TOKEN_PREFIX = "MP_STABLE_ACCESS_TOKEN-"; | |||
@Autowired | |||
WxRequestAccessTokenUtil wxRequestAccessTokenUtil; | |||
@Autowired | |||
private WxManager wxManager; | |||
private String apikeyPrefix = "PUSH_CHANNEL_"; | |||
public static Logger logger = LoggerFactory.getLogger(TokenHelper.class); | |||
@Override | |||
public WxMiniMessageTemplateListResponse wxMiniMessageTemplateList(WxMiniMessageTemplateListRequest request) throws ServiceHandleException { | |||
// 1、获取调用微信接口的accessToken凭证 | |||
String accessToken = wxRequestAccessTokenUtil.getStableAccessToken(miniAppid, miniSecret, false, | |||
MINI_ACCESS_STABLE_TOKEN_PREFIX); | |||
// 2、设置url参数 | |||
String url = String.format(WxRequestUrls.MINI_MESSAGE_TEMPLATE_LIST_URL, accessToken); | |||
String resJson = null; | |||
ObjectMapper mapper = new ObjectMapper(); | |||
JsonNode rootNode = null; | |||
List<WxMiniMessageTemplateListDto> dataList = null; | |||
try { | |||
resJson = HttpClientUtil.sendPost(url, JSON.toJSONString(request), accessToken); | |||
rootNode = mapper.readTree(resJson); | |||
JsonNode dataArray = rootNode.get("data"); | |||
dataList = mapper.readValue( | |||
dataArray.toString(), | |||
mapper.getTypeFactory().constructCollectionType(List.class, WxMiniMessageTemplateListDto.class) | |||
); | |||
} catch (IOException e) { | |||
throw new RuntimeException(e); | |||
} | |||
WxMiniMessageTemplateListResponse response = new WxMiniMessageTemplateListResponse(); | |||
response.setList(dataList); | |||
return response; | |||
} | |||
/** | |||
* 微信小程序-订阅消息发送 | |||
* | |||
@@ -39,8 +86,8 @@ public class WxMessageManagerImpl implements WxMessageManager { | |||
* @return | |||
*/ | |||
@Override | |||
public WxMiniSendMessageResponse wxMiniSendMessageHandler(WxMiniSendMessageRequest request) throws ServiceHandleException { | |||
String suffix = "WXMINISENDMESSAGE"; | |||
public WxMiniSendMessageResponse wxMiniSendMessageHandler(WxMiniSendMessageRequest request) | |||
throws ServiceHandleException { | |||
WxMiniSendMessageResponse response = null; | |||
logger.info("------- 微信小程序-订阅消息推送 START -------"); | |||
logger.info("接收的request:{}", request.toJson()); | |||
@@ -48,19 +95,48 @@ public class WxMessageManagerImpl implements WxMessageManager { | |||
request.valid(); | |||
// 3、创建消息记录 | |||
try { | |||
// 4、判断立刻发送,还是延迟发送 | |||
response = wxManager.miniSendMessageV2(request, apikeyPrefix + suffix); | |||
// 4、立刻发送 | |||
response = wxManager.miniSendMessageV2(request); | |||
logger.info("返回的response:{}", response.toJson()); | |||
} catch (Exception e) { | |||
logger.error("", e); | |||
throw GlyServiceError.RESPONSE_ERROR.toHandleException("微信小程序订阅消息推送失败!"); | |||
// throw new ManagerException("微信小程序订阅消息推送失败!"); | |||
// throw new ManagerException("微信小程序订阅消息推送失败!"); | |||
} finally { | |||
logger.info("------- 微信小程序-订阅消息推送 END -------"); | |||
} | |||
return response; | |||
} | |||
@Override | |||
public WxMpMessageTemplateListResponse wxMpMessageTemplateList(WxMpMessageTemplateListRequest request) | |||
throws ServiceHandleException { | |||
// 1、获取调用微信接口的accessToken凭证 | |||
String accessToken = | |||
wxRequestAccessTokenUtil.getStableAccessToken(mpAppid, mpSecret, false, MP_ACCESS_STABLE_TOKEN_PREFIX); | |||
// 2、设置url参数 | |||
String url = String.format(WxRequestUrls.MP_MESSAGE_TEMPLATE_LIST_URL, accessToken); | |||
// 3、获取模板列表 | |||
String resJson = null; | |||
ObjectMapper mapper = new ObjectMapper(); | |||
JsonNode rootNode = null; | |||
List<WxMpMessageTemplateListDto> dataList = null; | |||
try { | |||
resJson = HttpClientUtil.sendPost(url, JSON.toJSONString(request), accessToken); | |||
rootNode = mapper.readTree(resJson); | |||
JsonNode dataArray = rootNode.get("template_list"); | |||
dataList = mapper.readValue( | |||
dataArray.toString(), | |||
mapper.getTypeFactory().constructCollectionType(List.class, WxMpMessageTemplateListDto.class) | |||
); | |||
} catch (IOException e) { | |||
throw new RuntimeException(e); | |||
} | |||
WxMpMessageTemplateListResponse response = new WxMpMessageTemplateListResponse(); | |||
response.setList(dataList); | |||
return response; | |||
} | |||
/** | |||
* 微信公众号-推送订阅消息 | |||
* | |||
@@ -69,16 +145,16 @@ public class WxMessageManagerImpl implements WxMessageManager { | |||
* @throws ManagerException | |||
*/ | |||
@Override | |||
public WxMpSendMessageResponse wxMpSendMessageHandler(WxMpSendMessageRequest request) throws ServiceHandleException { | |||
String suffix = "WXMPSENDMESSAGE"; | |||
public WxMpSendMessageResponse wxMpSendMessageHandler(WxMpSendMessageRequest request) | |||
throws ServiceHandleException { | |||
WxMpSendMessageResponse response = null; | |||
logger.info("------- 微信公众号-推送订阅消息 START -------"); | |||
logger.info("接收的request:{}", request.toJson()); | |||
// 1、入参校验 | |||
request.valid(); | |||
try { | |||
// 4、判断立刻发送,还是延迟发送 | |||
response = wxManager.mpSendMessage(request, apikeyPrefix + suffix); | |||
// 4、发送 | |||
response = wxManager.mpSendMessage(request); | |||
logger.info("返回的response:{}", response.toJson()); | |||
} catch (Exception e) { | |||
logger.error("", e); |
@@ -1,38 +0,0 @@ | |||
package cn.com.taiji.ats.model.protocol.channel.wx; | |||
import java.util.ArrayList; | |||
import cn.com.taiji.ats.model.FormatException; | |||
import cn.com.taiji.common.entity.BaseEntity; | |||
import com.google.common.collect.Lists; | |||
import cn.hutool.core.collection.CollectionUtil; | |||
/** | |||
* 微信小程序-获取消息模板列表 | |||
* | |||
*/ | |||
public class WxMiniMessageTemplateListRequest extends BaseEntity { | |||
private String clientId; | |||
public WxMiniMessageTemplateListRequest valid() throws FormatException { | |||
final ArrayList<String> failParamInfo = Lists.newArrayList(); | |||
if (clientId == null || clientId.trim().isEmpty()) | |||
failParamInfo.add("消息客户端id"); | |||
//检验输错的数据参数 | |||
if (!CollectionUtil.isEmpty(failParamInfo)) { | |||
throw new FormatException(String.join("、", failParamInfo) + ",不能为空"); | |||
} | |||
return this; | |||
} | |||
public String getClientId() { | |||
return clientId; | |||
} | |||
} |
@@ -1,12 +0,0 @@ | |||
package cn.com.taiji.ats.model.protocol.channel.wx; | |||
import cn.com.taiji.common.entity.BaseEntity; | |||
/** | |||
* 微信小程序-订阅消息发送 | |||
* | |||
*/ | |||
public class WxMiniMessageTemplateListResponse extends BaseEntity { | |||
} |
@@ -1,36 +0,0 @@ | |||
package cn.com.taiji.ats.model.protocol.channel.wx; | |||
import java.util.ArrayList; | |||
import cn.com.taiji.ats.model.FormatException; | |||
import cn.com.taiji.common.entity.BaseEntity; | |||
import com.google.common.collect.Lists; | |||
import cn.hutool.core.collection.CollectionUtil; | |||
/** | |||
* 微信公众号-获取消息模板列表 | |||
* | |||
*/ | |||
public class WxMpMessageTemplateListRequest extends BaseEntity { | |||
private String clientId; | |||
public WxMpMessageTemplateListRequest valid() throws FormatException { | |||
final ArrayList<String> failParamInfo = Lists.newArrayList(); | |||
if (clientId == null || clientId.trim().isEmpty()) | |||
failParamInfo.add("消息客户端id"); | |||
//检验输错的数据参数 | |||
if (!CollectionUtil.isEmpty(failParamInfo)) { | |||
throw new FormatException(String.join("、", failParamInfo) + ",不能为空"); | |||
} | |||
return this; | |||
} | |||
public String getClientId() { | |||
return clientId; | |||
} | |||
} |
@@ -1,12 +0,0 @@ | |||
package cn.com.taiji.ats.model.protocol.channel.wx; | |||
import cn.com.taiji.common.entity.BaseEntity; | |||
/** | |||
* 微信公众号-订阅消息发送 | |||
* | |||
*/ | |||
public class WxMpMessageTemplateListResponse extends BaseEntity { | |||
} |
@@ -42,7 +42,7 @@ public class WxRequestAccessTokenUtil { | |||
* (1)false 时为普通调用模式,access_token 有效期内重复调用该接口不会更新 access_token | |||
* (2)true 时为强制刷新模式,会导致上次获取的 access_token 失效,并返回新的 access_token | |||
*/ | |||
public String getStableAccessToken(String appid, String secret, boolean forceRefresh, String tokenType) throws IOException, ServiceHandleException { | |||
public String getStableAccessToken(String appid, String secret, boolean forceRefresh, String tokenType) throws ServiceHandleException { | |||
//根据类型设置key | |||
String redisKey = null; | |||
redisKey = tokenType + appid; | |||
@@ -61,7 +61,12 @@ public class WxRequestAccessTokenUtil { | |||
paramMap.put("appid", appid); | |||
paramMap.put("secret", secret); | |||
paramMap.put("force_refresh", forceRefresh); | |||
String resJson = HttpClientUtil.sendPost(url, JSONUtil.toJsonStr(paramMap), null); | |||
String resJson = null; | |||
try { | |||
resJson = HttpClientUtil.sendPost(url, JSONUtil.toJsonStr(paramMap), null); | |||
} catch (IOException e) { | |||
throw new RuntimeException(e); | |||
} | |||
WxAccessTokenModel tokenModel = JSONUtil.parseObj(resJson).toBean(WxAccessTokenModel.class); | |||
//3、responseBody非空校验 |
@@ -84,9 +84,18 @@ public class QtkPushController | |||
request.setTemplateId("_1PdLnnYSkRXQ91YzUxz9RIyp83k4ba9b5Y98OKgbV0");//模板id,暂时写死 | |||
request.setTitle("ETC产品办理成功通知"); | |||
request.setClientId("bfc4040bda90473d8ceab246555361a3"); | |||
request.setMpOpenidList(new ArrayList<>(List.of("ogb3at8mxCLrkNot6F84_jdP0_E0")));//公众号openid | |||
request.setMpOpenId("ogb3at8mxCLrkNot6F84_jdP0_E0");//公众号openid | |||
WxMpSendMessageResponse response = wxMessageManager.wxMpSendMessageHandler(request); | |||
return response; | |||
} | |||
@ApiOperation(value = "微信公众号-列表测试") | |||
@PostMapping(value = "/testWx") | |||
public WxMpMessageTemplateListResponse test1() throws ManagerException, FormatException { | |||
WxMpMessageTemplateListRequest request = new WxMpMessageTemplateListRequest(); | |||
request.setClientId("bfc4040bda90473d8ceab246555361a3"); | |||
WxMpMessageTemplateListResponse response = wxMessageManager.wxMpMessageTemplateList(request); | |||
return response; | |||
} | |||
} |