diff --git a/tqq9/lc123/cloud/app/api/utils/GyOpenApiUtil.java b/tqq9/lc123/cloud/app/api/utils/GyOpenApiUtil.java new file mode 100644 index 0000000..e3849b2 --- /dev/null +++ b/tqq9/lc123/cloud/app/api/utils/GyOpenApiUtil.java @@ -0,0 +1,106 @@ +package tqq9.lc123.cloud.app.api.utils; + +import com.fasterxml.jackson.databind.ObjectMapper; +import kd.bos.logging.Log; +import kd.bos.logging.LogFactory; +import org.apache.commons.codec.digest.DigestUtils; +import org.apache.http.HttpEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; + + +import java.util.HashMap; +import java.util.Map; +import java.util.TreeMap; + +public class GyOpenApiUtil { + + private static final ObjectMapper objectMapper = new ObjectMapper(); + private static String apiUrl = "http://v2.api.guanyierp.com/rest/erp_open"; + private static String appKey = "142232"; + private static String appSecret = "0140a81d7c814924a7148ff54c2dd859"; + private static String sessionKey = "1ac2c2eb69bc4626b13f2fa8255e728f"; + + private final static Log logger = LogFactory.getLog(GyOpenApiUtil.class); + + /** + * 生成管易云API签名 + */ + public static String generateSign(Map params, String appSecret) { + try { + // 参数按字母顺序排序 + Map sortedParams = new TreeMap<>(params); + // 转换为紧凑JSON + String paramJson = objectMapper.writeValueAsString(sortedParams); + // 生成签名:appSecret + JSON + appSecret,然后MD5加密并转为大写 + String signString = appSecret + paramJson + appSecret; + return DigestUtils.md5Hex(signString).toUpperCase(); + } catch (Exception e) { + throw new RuntimeException("签名生成失败", e); + } + } + + /** + * 构建请求参数 + */ + public static Map buildRequestParams(Map request) { + request.put("session", sessionKey); + Map params = new HashMap<>(); + + params.putAll(request); + + // 生成签名 + String sign = generateSign(params, appSecret); + params.put("sign", sign); + + return params; + } + + /** + * 调用管易云API + */ + public static String callGuanyiApi(Map params) { + try (CloseableHttpClient httpClient = HttpClients.createDefault()) { + HttpPost httpPost = new HttpPost(apiUrl); + + // 设置请求头 + httpPost.setHeader("Content-Type", "application/json; charset=utf-8"); + + // 设置请求体 + String jsonParams = objectMapper.writeValueAsString(params); + logger.debug("管易云API请求参数: {}", jsonParams); + + httpPost.setEntity(new StringEntity(jsonParams, "UTF-8")); + + // 执行请求 + try (CloseableHttpResponse response = httpClient.execute(httpPost)) { + HttpEntity entity = response.getEntity(); + String responseString = EntityUtils.toString(entity, "UTF-8"); + logger.debug("管易云API响应: {}", responseString); + + if (response.getStatusLine().getStatusCode() != 200) { + throw new RuntimeException("API调用失败,状态码: " + response.getStatusLine().getStatusCode()); + } + + return responseString; + } + } catch (Exception e) { + logger.error("调用管易云API异常", e); + throw new RuntimeException("API调用异常", e); + } + } + + public static void main(String[] args) { + Map params = new HashMap<>(); + params.put("method", "gy.erp.trade.get"); + + Map stringObjectMap = GyOpenApiUtil.buildRequestParams(params); + String callGuanyiApi = GyOpenApiUtil.callGuanyiApi(stringObjectMap); + System.out.println(callGuanyiApi); + } + +}