WechatCustomerComponents.java 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. package com.ydtech.modules.admin.components;
  2. import com.ydtech.config.properties.WechatCustomerProperties;
  3. import com.ydtech.modules.admin.components.wechat.customer.request.*;
  4. import com.ydtech.modules.admin.components.wechat.customer.response.*;
  5. import com.ydtech.modules.admin.constants.WechatCustomerEnum;
  6. import com.ydtech.modules.order.components.InsCrawlerOrderComponents;
  7. import com.ydtech.modules.order.constants.OrderCacheConstant;
  8. import com.ydtech.modules.protocol.utils.AssertionUtils;
  9. import com.ydtech.utils.cache.BaseCacheConfig;
  10. import com.ydtech.utils.cache.RedissonUtils;
  11. import lombok.RequiredArgsConstructor;
  12. import lombok.extern.slf4j.Slf4j;
  13. import me.chanjar.weixin.common.util.crypto.WxCryptUtil;
  14. import org.springframework.http.HttpHeaders;
  15. import org.springframework.stereotype.Component;
  16. import org.springframework.web.client.RestTemplate;
  17. import java.util.concurrent.TimeUnit;
  18. /**
  19. * @description: 【微信客服】 发送请求实体
  20. * @author: wenks
  21. * @date: 2024/11/28 15:35
  22. **/
  23. @Slf4j
  24. @Component
  25. @RequiredArgsConstructor
  26. public class WechatCustomerComponents {
  27. private final RestTemplate restTemplate;
  28. private final WechatCustomerProperties wechatCustomerProperties;
  29. private final RedissonUtils redissonUtils;
  30. private final InsCrawlerOrderComponents insCrawlerOrderComponents;
  31. private <T, B extends CustomerBaseResponse> B request(WechatCustomerEnum wechatCustomer, T requestBody, Class<B> responseType, HttpHeaders httpHeaders) {
  32. String token = getToken();
  33. String url = WechatCustomerEnum.URL + wechatCustomer.getUri() + "?access_token=" + token;
  34. return insCrawlerOrderComponents.request(url, "wechatCustomer", wechatCustomer.getDesc(), requestBody, responseType, httpHeaders);
  35. }
  36. public WxCryptUtil getWxCryptUtil() {
  37. return new WxCryptUtil(wechatCustomerProperties.getToken(), wechatCustomerProperties.getEncodingAesKey(), wechatCustomerProperties.getCorpId());
  38. }
  39. /**
  40. * 获取调用凭证access_token
  41. *
  42. * @return access_token
  43. */
  44. private String getToken() {
  45. return redissonUtils.getFromRedis(() -> {
  46. CustomerGetTokenRequest customerGetTokenRequest = new CustomerGetTokenRequest(wechatCustomerProperties.getCorpId(), wechatCustomerProperties.getSecret());
  47. String url = WechatCustomerEnum.URL + WechatCustomerEnum.GET_ACCESS_TOKEN.getUri() + customerGetTokenRequest.getUrlParams();
  48. CustomerGetTokenResponse customerGetTokenResponse = restTemplate.getForObject(url, CustomerGetTokenResponse.class);
  49. AssertionUtils.isEmpty(customerGetTokenResponse, "获取调用凭证access_token异常");
  50. String accessToken = customerGetTokenResponse.getAccessToken();
  51. return new BaseCacheConfig<String>().setExpiresIn(customerGetTokenResponse.getExpiresIn()).setTimeUnit(TimeUnit.SECONDS).setData(accessToken);
  52. }, OrderCacheConstant.WECHAT_CUSTOMER_TOKEN);
  53. }
  54. /**
  55. * 获取客服账号列表
  56. *
  57. * @param customerListRequest 请求实体
  58. * @return 客服账号列表
  59. */
  60. public CustomerListResponse list(CustomerListRequest customerListRequest) {
  61. return request(WechatCustomerEnum.LIST, customerListRequest, CustomerListResponse.class, new HttpHeaders());
  62. }
  63. /**
  64. * 获取客服账号链接
  65. *
  66. * @param customerAddContactWayRequest 请求实体
  67. * @return 客服账号链接
  68. */
  69. public CustomerAddContactWayResponse addContactWay(CustomerAddContactWayRequest customerAddContactWayRequest) {
  70. return request(WechatCustomerEnum.ADD_CONTACT_WAY, customerAddContactWayRequest, CustomerAddContactWayResponse.class, new HttpHeaders());
  71. }
  72. /**
  73. * 获取消息
  74. *
  75. * @param customerSendMsgOnEventRequest 请求实体
  76. * @return 消息信息
  77. */
  78. public CustomerSendMsgOnEventResponse sendMsgOnEvent(CustomerSendMsgOnEventRequest customerSendMsgOnEventRequest) {
  79. return request(WechatCustomerEnum.SEND_MSG_ON_EVENT, customerSendMsgOnEventRequest, CustomerSendMsgOnEventResponse.class, new HttpHeaders());
  80. }
  81. /**
  82. * 发送客服欢迎语
  83. *
  84. * @param customerSyncMsgRequest 请求实体
  85. * @return 成功失败
  86. */
  87. public CustomerSyncMsgResponse syncMsg(CustomerSyncMsgRequest customerSyncMsgRequest) {
  88. return request(WechatCustomerEnum.SYNC_MSG, customerSyncMsgRequest, CustomerSyncMsgResponse.class, new HttpHeaders());
  89. }
  90. }