107 lines
3.8 KiB
Java
107 lines
3.8 KiB
Java
|
|
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);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|