| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- package com.ydtech.modules.admin.components;
- import com.ydtech.config.properties.WechatCustomerProperties;
- import com.ydtech.modules.admin.components.wechat.customer.request.*;
- import com.ydtech.modules.admin.components.wechat.customer.response.*;
- import com.ydtech.modules.admin.constants.WechatCustomerEnum;
- import com.ydtech.modules.order.components.InsCrawlerOrderComponents;
- import com.ydtech.modules.order.constants.OrderCacheConstant;
- import com.ydtech.modules.protocol.utils.AssertionUtils;
- import com.ydtech.utils.cache.BaseCacheConfig;
- import com.ydtech.utils.cache.RedissonUtils;
- import lombok.RequiredArgsConstructor;
- import lombok.extern.slf4j.Slf4j;
- import me.chanjar.weixin.common.util.crypto.WxCryptUtil;
- import org.springframework.http.HttpHeaders;
- import org.springframework.stereotype.Component;
- import org.springframework.web.client.RestTemplate;
- import java.util.concurrent.TimeUnit;
- /**
- * @description: 【微信客服】 发送请求实体
- * @author: wenks
- * @date: 2024/11/28 15:35
- **/
- @Slf4j
- @Component
- @RequiredArgsConstructor
- public class WechatCustomerComponents {
- private final RestTemplate restTemplate;
- private final WechatCustomerProperties wechatCustomerProperties;
- private final RedissonUtils redissonUtils;
- private final InsCrawlerOrderComponents insCrawlerOrderComponents;
- private <T, B extends CustomerBaseResponse> B request(WechatCustomerEnum wechatCustomer, T requestBody, Class<B> responseType, HttpHeaders httpHeaders) {
- String token = getToken();
- String url = WechatCustomerEnum.URL + wechatCustomer.getUri() + "?access_token=" + token;
- return insCrawlerOrderComponents.request(url, "wechatCustomer", wechatCustomer.getDesc(), requestBody, responseType, httpHeaders);
- }
- public WxCryptUtil getWxCryptUtil() {
- return new WxCryptUtil(wechatCustomerProperties.getToken(), wechatCustomerProperties.getEncodingAesKey(), wechatCustomerProperties.getCorpId());
- }
- /**
- * 获取调用凭证access_token
- *
- * @return access_token
- */
- private String getToken() {
- return redissonUtils.getFromRedis(() -> {
- CustomerGetTokenRequest customerGetTokenRequest = new CustomerGetTokenRequest(wechatCustomerProperties.getCorpId(), wechatCustomerProperties.getSecret());
- String url = WechatCustomerEnum.URL + WechatCustomerEnum.GET_ACCESS_TOKEN.getUri() + customerGetTokenRequest.getUrlParams();
- CustomerGetTokenResponse customerGetTokenResponse = restTemplate.getForObject(url, CustomerGetTokenResponse.class);
- AssertionUtils.isEmpty(customerGetTokenResponse, "获取调用凭证access_token异常");
- String accessToken = customerGetTokenResponse.getAccessToken();
- return new BaseCacheConfig<String>().setExpiresIn(customerGetTokenResponse.getExpiresIn()).setTimeUnit(TimeUnit.SECONDS).setData(accessToken);
- }, OrderCacheConstant.WECHAT_CUSTOMER_TOKEN);
- }
- /**
- * 获取客服账号列表
- *
- * @param customerListRequest 请求实体
- * @return 客服账号列表
- */
- public CustomerListResponse list(CustomerListRequest customerListRequest) {
- return request(WechatCustomerEnum.LIST, customerListRequest, CustomerListResponse.class, new HttpHeaders());
- }
- /**
- * 获取客服账号链接
- *
- * @param customerAddContactWayRequest 请求实体
- * @return 客服账号链接
- */
- public CustomerAddContactWayResponse addContactWay(CustomerAddContactWayRequest customerAddContactWayRequest) {
- return request(WechatCustomerEnum.ADD_CONTACT_WAY, customerAddContactWayRequest, CustomerAddContactWayResponse.class, new HttpHeaders());
- }
- /**
- * 获取消息
- *
- * @param customerSendMsgOnEventRequest 请求实体
- * @return 消息信息
- */
- public CustomerSendMsgOnEventResponse sendMsgOnEvent(CustomerSendMsgOnEventRequest customerSendMsgOnEventRequest) {
- return request(WechatCustomerEnum.SEND_MSG_ON_EVENT, customerSendMsgOnEventRequest, CustomerSendMsgOnEventResponse.class, new HttpHeaders());
- }
- /**
- * 发送客服欢迎语
- *
- * @param customerSyncMsgRequest 请求实体
- * @return 成功失败
- */
- public CustomerSyncMsgResponse syncMsg(CustomerSyncMsgRequest customerSyncMsgRequest) {
- return request(WechatCustomerEnum.SYNC_MSG, customerSyncMsgRequest, CustomerSyncMsgResponse.class, new HttpHeaders());
- }
- }
|