GyOpenApiUtil 更新

This commit is contained in:
alex 2025-12-14 13:45:09 +08:00
parent f1b034064b
commit 59b6e0e966
1 changed files with 106 additions and 0 deletions

View File

@ -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<String, Object> params, String appSecret) {
try {
// 参数按字母顺序排序
Map<String, Object> 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<String, Object> buildRequestParams(Map<String, Object> request) {
request.put("session", sessionKey);
Map<String, Object> params = new HashMap<>();
params.putAll(request);
// 生成签名
String sign = generateSign(params, appSecret);
params.put("sign", sign);
return params;
}
/**
* 调用管易云API
*/
public static String callGuanyiApi(Map<String, Object> 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<String, Object> params = new HashMap<>();
params.put("method", "gy.erp.trade.get");
Map<String, Object> stringObjectMap = GyOpenApiUtil.buildRequestParams(params);
String callGuanyiApi = GyOpenApiUtil.callGuanyiApi(stringObjectMap);
System.out.println(callGuanyiApi);
}
}