76 lines
2.7 KiB
Java
76 lines
2.7 KiB
Java
|
|
package com.klp.utils;
|
|||
|
|
|
|||
|
|
import com.alibaba.fastjson2.JSON;
|
|||
|
|
import com.alibaba.fastjson2.JSONArray;
|
|||
|
|
import com.alibaba.fastjson2.JSONObject;
|
|||
|
|
import com.klp.domain.vo.WmsExpressVo;
|
|||
|
|
import com.yundasys.OpenApiHttpUtils;
|
|||
|
|
|
|||
|
|
import java.security.MessageDigest;
|
|||
|
|
|
|||
|
|
public class YdRouteQueryUtil {
|
|||
|
|
// 请根据实际环境切换key/secret
|
|||
|
|
private static final String APP_KEY = "004160"; // 生产环境
|
|||
|
|
private static final String APP_SECRET = "ac9ee46d749e44b98e7a9e38f3c8f8f3"; // 生产环境
|
|||
|
|
private static final String API_URL = "https://openapi.yundaex.com/openapi/outer/logictis/query";
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 查询韵达轨迹
|
|||
|
|
* @param mailNo 运单号
|
|||
|
|
* @return 查询结果JSON
|
|||
|
|
*/
|
|||
|
|
public static String queryRoute(String mailNo) {
|
|||
|
|
String jsonParams = "{\"mailno\":\"" + mailNo + "\"}";
|
|||
|
|
return OpenApiHttpUtils.doPostJson(API_URL, jsonParams, APP_KEY, APP_SECRET);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 解析韵达返回数据,转为WmsExpressVo
|
|||
|
|
*/
|
|||
|
|
public static WmsExpressVo parseData(String result) {
|
|||
|
|
if (result == null || result.trim().isEmpty()) {
|
|||
|
|
return null;
|
|||
|
|
}
|
|||
|
|
try {
|
|||
|
|
JSONObject json = JSON.parseObject(result);
|
|||
|
|
JSONObject data = json.getJSONObject("data");
|
|||
|
|
if (data == null) return null;
|
|||
|
|
JSONArray steps = data.getJSONArray("steps");
|
|||
|
|
if (steps == null || steps.isEmpty()) return null;
|
|||
|
|
JSONObject last = steps.getJSONObject(steps.size() - 1);
|
|||
|
|
WmsExpressVo vo = new WmsExpressVo();
|
|||
|
|
vo.setExpressCode(data.getString("mailno"));
|
|||
|
|
vo.setLastUpdateTime(last.getDate("time"));
|
|||
|
|
vo.setLastStatus(last.getString("action"));
|
|||
|
|
vo.setRemark(last.getString("description"));
|
|||
|
|
return vo;
|
|||
|
|
} catch (Exception e) {
|
|||
|
|
e.printStackTrace();
|
|||
|
|
}
|
|||
|
|
return null;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// MD5签名算法(如需自定义签名,可用此方法)
|
|||
|
|
public static String md5(String str, String charset) throws Exception {
|
|||
|
|
MessageDigest md = MessageDigest.getInstance("MD5");
|
|||
|
|
md.update(str.getBytes(charset));
|
|||
|
|
byte[] result = md.digest();
|
|||
|
|
StringBuilder sb = new StringBuilder(32);
|
|||
|
|
for (byte b : result) {
|
|||
|
|
int val = b & 0xff;
|
|||
|
|
if (val <= 0xf) sb.append("0");
|
|||
|
|
sb.append(Integer.toHexString(val));
|
|||
|
|
}
|
|||
|
|
return sb.toString().toLowerCase();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// main方法测试
|
|||
|
|
public static void main(String[] args) {
|
|||
|
|
String mailNo = "464569453467736";
|
|||
|
|
String result = queryRoute(mailNo);
|
|||
|
|
System.out.println("韵达原始返回:" + result);
|
|||
|
|
WmsExpressVo vo = parseData(result);
|
|||
|
|
System.out.println("解析后:" + vo);
|
|||
|
|
}
|
|||
|
|
}
|