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); } }