From d2e62d2fbfe6365e62020223f2784c9a652e2d9f Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Fri, 28 Feb 2025 20:15:11 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=B0=81=E8=A3=85=E6=AD=A3=E5=85=83?= =?UTF-8?q?=E5=B7=A5=E5=85=B7=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../thirdparty/service/impl/ZyMerService.java | 5 -- .../service/impl/zy/ZyMerServiceImpl.java | 84 +++--------------- .../thirdparty/utils/zy/api/ZyApiTool.java | 87 +++++++++++++++++++ .../java/com/bsd/pjcloud/admin/ZyTest.java | 8 +- 4 files changed, 107 insertions(+), 77 deletions(-) create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/utils/zy/api/ZyApiTool.java diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/ZyMerService.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/ZyMerService.java index a4f58c4a9..afe80813f 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/ZyMerService.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/ZyMerService.java @@ -8,11 +8,6 @@ import com.bsd.pjcloud.thirdparty.vo.zy.mer.*; public interface ZyMerService { - /** - * 获取token - */ - ZyMerGetTokenVo getTokenApi(); - /** * 商户信息同步 */ diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/zy/ZyMerServiceImpl.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/zy/ZyMerServiceImpl.java index 5e80c2875..645ff09d0 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/zy/ZyMerServiceImpl.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/zy/ZyMerServiceImpl.java @@ -12,6 +12,7 @@ import com.bsd.pjcloud.thirdparty.dto.zy.mer.ZyMerSyncDealerInfoDto; import com.bsd.pjcloud.thirdparty.dto.zy.mer.ZyMerSyncEnterpriseInfoDto; import com.bsd.pjcloud.thirdparty.service.impl.ZyMerService; import com.bsd.pjcloud.thirdparty.utils.zy.api.ZyApi; +import com.bsd.pjcloud.thirdparty.utils.zy.api.ZyApiTool; import com.bsd.pjcloud.thirdparty.vo.zy.mer.*; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -36,35 +37,7 @@ public class ZyMerServiceImpl implements ZyMerService { private final ZyConfig zyConfig; - private final StringRedisTemplate redisTemplate; - - /** - * 获取token - * - * @return - */ - @Override - public ZyMerGetTokenVo getTokenApi() { - String url = zyConfig.getBaseUrl() + ZyApi.Mer.GET_TOKEN; - url = String.format(url, zyConfig.getAppId(), zyConfig.getAppSecret()); - try { - String res = HttpRequest.get(url) - .contentType("application/x-www-form-urlencoded") - .execute() - .body(); - if (ObjectUtil.isEmpty(res)) { - throw new RuntimeException("response is empty"); - } - ZyMerGetTokenVo vo = JSONUtil.toBean(res, ZyMerGetTokenVo.class); - if (!vo.isSuccess()) { - throw new RuntimeException(String.format("请求错误res|%s|url|%s|", res, url)); - } - return vo; - } catch (Exception e) { - log.error("|{}||getTokenApi|意外的错误error", e.getMessage()); - } - return null; - } + private final ZyApiTool zyApiTool; /** * 商户信息同步 @@ -73,10 +46,10 @@ public class ZyMerServiceImpl implements ZyMerService { public ZyMerSyncDealerInfoVo syncDealerInfoApi(ZyMerSyncDealerInfoDto dto) { String url = zyConfig.getBaseUrl() + ZyApi.Mer.SYNC_DEALER_INFO; try { - url = String.format(url, getToken()); + url = String.format(url, zyApiTool.getToken()); Map encryptionBody = new HashMap<>(); encryptionBody.put("dealers", dto); - String body = getEncryptionDto(encryptionBody); + String body = zyApiTool.getEncryptionDto(encryptionBody); String res = HttpRequest.post(url) .body(body) .execute() @@ -90,7 +63,7 @@ public class ZyMerServiceImpl implements ZyMerService { } return vo; } catch (Exception e) { - log.error("|{}||syncDealerInfo|意外的错误error", e.getMessage()); + log.error("|{}||syncDealerInfo|意外的错误error|{}|", TAG, e.getMessage()); } return null; } @@ -102,10 +75,10 @@ public class ZyMerServiceImpl implements ZyMerService { public ZyMerSyncEnterpriseInfoVo syncEnterpriseInfoApi(ZyMerSyncEnterpriseInfoDto dto) { String url = zyConfig.getBaseUrl() + ZyApi.Mer.SYNC_ENTERPRISE_INFO; try { - url = String.format(url, getToken()); + url = String.format(url, zyApiTool.getToken()); Map encryptionBody = new HashMap<>(); encryptionBody.put("enterprises", dto); - String body = getEncryptionDto(encryptionBody); + String body = zyApiTool.getEncryptionDto(encryptionBody); String res = HttpRequest.post(url) .body(body) .execute() @@ -119,7 +92,7 @@ public class ZyMerServiceImpl implements ZyMerService { } return vo; } catch (Exception e) { - log.error("|{}||syncEnterpriseInfo|意外的错误error", e.getMessage()); + log.error("|{}||syncEnterpriseInfo|意外的错误error|{}|", TAG, e.getMessage()); } return null; } @@ -131,10 +104,10 @@ public class ZyMerServiceImpl implements ZyMerService { public ZyMerSyncAccountInfoVo syncAccountInfoApi(ZyMerSyncAccountInfoDto dto) { String url = zyConfig.getBaseUrl() + ZyApi.Mer.SYNC_ACCOUNT_INFO; try { - url = String.format(url, getToken()); + url = String.format(url, zyApiTool.getToken()); Map encryptionBody = new HashMap<>(); encryptionBody.put("accounts", dto); - String body = getEncryptionDto(encryptionBody); + String body = zyApiTool.getEncryptionDto(encryptionBody); String res = HttpRequest.post(url) .body(body) .execute() @@ -148,7 +121,7 @@ public class ZyMerServiceImpl implements ZyMerService { } return vo; } catch (Exception e) { - log.error("|{}||syncAccountInfo|意外的错误error", e.getMessage()); + log.error("|{}||syncAccountInfo|意外的错误error|{}|", TAG, e.getMessage()); } return null; } @@ -160,10 +133,10 @@ public class ZyMerServiceImpl implements ZyMerService { public ZyMerSyncAccClassInfoVo syncAccClassInfo(ZyMerSyncAccClassInfoDto dto) { String url = zyConfig.getBaseUrl() + ZyApi.Mer.SYNC_ACC_CLASS_INFO; try { - url = String.format(url, getToken()); + url = String.format(url, zyApiTool.getToken()); Map encryptionBody = new HashMap<>(); encryptionBody.put("accClasses", dto); - String body = getEncryptionDto(encryptionBody); + String body = zyApiTool.getEncryptionDto(encryptionBody); String res = HttpRequest.post(url) .body(body) .execute() @@ -176,39 +149,10 @@ public class ZyMerServiceImpl implements ZyMerService { throw new RuntimeException(String.format("请求错误res|%s|url|%s|body|%s|", res, url, body)); } return vo; - }catch (Exception e){ - log.error("|{}||syncAccClassInfo|意外的错误error", e.getMessage()); - } - return null; - } - - private String getToken() { - try { - String redisKey = CacheConstants.THIRDPARTY_ZY_MER_TOKEN; - String token = redisTemplate.opsForValue().get(redisKey); - if (ObjectUtil.isEmpty(token)) { - ZyMerGetTokenVo vo = getTokenApi(); - if (ObjectUtil.isNotEmpty(vo)) { - String accessToken = vo.getAccess_token(); - redisTemplate.opsForValue().set(redisKey, accessToken); - return accessToken; - } - } - return token; } catch (Exception e) { - log.error("|{}|token获取错误无法进行,意外的错误error", e.getMessage()); + log.error("|{}||syncAccClassInfo|意外的错误error|{}|", TAG, e.getMessage()); } return null; } - private String getEncryptionDto(T params) { - String json = JSONUtil.toJsonStr(params); - String encodedData = Base64.getEncoder().encodeToString(json.getBytes(StandardCharsets.UTF_8)); - String stringToSign = String.format("data=%s&key=%s", json, zyConfig.getAppId()); - String sign = md5Hex(stringToSign); - Map body = new HashMap<>(); - body.put("data", encodedData); - body.put("sign", sign); - return JSONUtil.toJsonStr(body); - } } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/utils/zy/api/ZyApiTool.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/utils/zy/api/ZyApiTool.java new file mode 100644 index 000000000..9daf770e2 --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/utils/zy/api/ZyApiTool.java @@ -0,0 +1,87 @@ +package com.bsd.pjcloud.thirdparty.utils.zy.api; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.http.HttpRequest; +import cn.hutool.json.JSONUtil; +import com.bsd.pjcloud.common.core.constant.CacheConstants; +import com.bsd.pjcloud.thirdparty.config.ZyConfig; +import com.bsd.pjcloud.thirdparty.vo.zy.mer.ZyMerGetTokenVo; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +import static org.apache.commons.codec.digest.DigestUtils.md5Hex; + +@Component +@Validated +@Slf4j +@RequiredArgsConstructor +public class ZyApiTool { + + private final String TAG = "正元请求工具类"; + + private final ZyConfig zyConfig; + + private final StringRedisTemplate redisTemplate; + + public ZyMerGetTokenVo getTokenApi() { + String url = zyConfig.getBaseUrl() + ZyApi.Mer.GET_TOKEN; + url = String.format(url, zyConfig.getAppId(), zyConfig.getAppSecret()); + try { + String res = HttpRequest.get(url) + .contentType("application/x-www-form-urlencoded") + .execute() + .body(); + if (ObjectUtil.isEmpty(res)) { + throw new RuntimeException("response is empty"); + } + ZyMerGetTokenVo vo = JSONUtil.toBean(res, ZyMerGetTokenVo.class); + if (!vo.isSuccess()) { + throw new RuntimeException(String.format("请求错误res|%s|url|%s|", res, url)); + } + return vo; + } catch (Exception e) { + log.error("|{}||getTokenApi|意外的错误error|{}|", TAG, e.getMessage()); + } + return null; + } + + public String getToken() { + try { + String redisKey = CacheConstants.THIRDPARTY_ZY_MER_TOKEN; + String token = redisTemplate.opsForValue().get(redisKey); + if (ObjectUtil.isEmpty(token)) { + ZyMerGetTokenVo vo = getTokenApi(); + if (ObjectUtil.isNotEmpty(vo)) { + String accessToken = vo.getAccess_token(); + redisTemplate.opsForValue().set(redisKey, accessToken); + return accessToken; + } + } + return token; + } catch (Exception e) { + log.error("|{}|token获取错误无法进行,意外的错误error|{}|", TAG, e.getMessage()); + } + return null; + } + + public String getEncryptionDto(T params) { + String json = JSONUtil.toJsonStr(params); + String encodedData = Base64.getEncoder().encodeToString(json.getBytes(StandardCharsets.UTF_8)); + String stringToSign = String.format("data=%s&key=%s", json, zyConfig.getAppId()); + String sign = md5Hex(stringToSign); + Map body = new HashMap<>(); + body.put("data", encodedData); + body.put("sign", sign); + return JSONUtil.toJsonStr(body); + } + +} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/test/java/com/bsd/pjcloud/admin/ZyTest.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/test/java/com/bsd/pjcloud/admin/ZyTest.java index 79b9d3fc8..da980b754 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/test/java/com/bsd/pjcloud/admin/ZyTest.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/test/java/com/bsd/pjcloud/admin/ZyTest.java @@ -7,6 +7,7 @@ import com.bsd.pjcloud.thirdparty.dto.zy.mer.ZyMerSyncAccountInfoDto; import com.bsd.pjcloud.thirdparty.dto.zy.mer.ZyMerSyncDealerInfoDto; import com.bsd.pjcloud.thirdparty.dto.zy.mer.ZyMerSyncEnterpriseInfoDto; import com.bsd.pjcloud.thirdparty.service.impl.ZyMerService; +import com.bsd.pjcloud.thirdparty.utils.zy.api.ZyApiTool; import com.bsd.pjcloud.thirdparty.vo.zy.mer.*; import jakarta.annotation.Resource; import org.junit.jupiter.api.Test; @@ -23,6 +24,9 @@ public class ZyTest { @Resource private ZyMerService zyMerService; + @Resource + private ZyApiTool zyApiTool; + /************************** start mer start **************************/ /** @@ -30,8 +34,8 @@ public class ZyTest { */ @Test public void merGetTokenApi() { - ZyMerGetTokenVo vo = zyMerService.getTokenApi(); - System.out.println(1); + ZyMerGetTokenVo vo = zyApiTool.getTokenApi(); + System.out.println(vo); } /**