lc/tqq9/lc123/cloud/app/api/utils/GyOpenApiUtil.java

107 lines
3.8 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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