특급 추적 번호 조회 API는 SF 특급 조회, 우편 특급 조회, ZTO 특급 조회 등에 연결할 수 있습니다. 이들 특송물류회사는 특급주문번호 자동식별 인터페이스, 특급주문번호 조회 인터페이스 등 특송물류를 제공하고 있다. 전자상거래 기업이나 ERP 서비스 기업의 경우, 이 인터페이스를 자체 소프트웨어에 통합하면 기업의 경쟁력이 높아집니다. 다만, 각 주요 특급업체와 연결하여 인터페이스를 별도로 디버깅해야 한다는 단점이 있으며, 유지관리 비용이 많이 들고, 관리가 불편하다. 익스프레스 쿼리 API를 무료 도킹 제공하는 플랫폼 추천, 익스프레스 버드 오픈 플랫폼
1. 인터페이스 적용 시나리오
1. 전자상거래 플랫폼에서 쇼핑 후, 쇼핑 주문을 통한 물류 추적 시, 이 API를 호출하여 물류 정보 내역을 얻을 수 있습니다.
2.화물 조정 처리시 원클릭으로 운송장 물류 현황을 확인하세요
3. 일괄 추적 및 운송장 물류 정보를 얻으세요
2. Express Bird 오픈 플랫폼 계정을 등록하세요
2. 개발자 계정 정보(ID, API 키)는 Express Bird 백엔드에서 확인하세요
3. 기술적인 공동 디버깅을 수행하고 디버깅을 완료하세요. 물류 쿼리 API 주소: 웹 링크
4. 소프트웨어에 익스프레스 물류 쿼리 인터페이스를 통합하세요.
3. 기술 도킹
익스프레스 버드가 제공하는 특급 조회 인터페이스는 국내 주류 특급 배송의 주문 번호 조회를 적시 정보와 완전한 데이터로 포괄하는 400개 이상의 특송 물류 문의를 지원합니다.
인터페이스 이름: express.info.get
요청 방법: HTTP POST 요청 방법 인코딩 형식: utf-8
요청 예:
package com.zs.app;
import php.io.BufferedReader;
import php.io.IOException;
import php.io.InputStreamReader;
import php.io.OutputStreamWriter;
import php.io.UnsupportedEncodingException;
import php.net.HttpURLConnection;
import php.net.URL;
import php.net.URLEncoder;
import php.security.MessageDigest;
import php.util.HashMap;
import php.util.Map;
/**
*
* Express Bird 물류 추적 실시간 쿼리 인터페이스
*
* @Technical QQ Group: 456320272
* @see: 웹 링크
* @copyright:
*
* DEMO의 전자상거래 ID와 개인 키는 공식적으로 테스트하고 사용하고 있으므로 별도로 계정을 등록해주세요
* 하루에 쿼리량이 500건을 초과하는 경우 물류 추적 구독 푸시 인터페이스에 액세스하는 것이 좋습니다
*
* 공식 웹사이트에서 ID 및 Key를 신청하세요. : 웹링크
*/
public class KdniaoTrackQueryAPI {
//DEMO
public static void main(String[] args) {
KdniaoTrackQueryAPI api = new KdniaoTrackQueryAPI();
try {
String result = api.getOrderTracesByJson("ANE", "210001633605");
System.out.print(result);
} catch(예외 e) {
e.printStackTrace();
}
}
//전자상거래 ID
private String EBusinessID="1330422";
//익스프레스 버드에서 제공하는 전자상거래 암호화 개인키를 소중히 보관하시고, 유출되지 않도록 해주세요
private String AppKey="7611818b-6279-4398-8747-df2ca39e86b4";
//URL 요청
private String ReqURL ="웹 링크
/* *
* 주문 물류 트랙을 쿼리하는 Json 메서드
* @throws Exception
*/
public String getOrderTracesByJson(String expCode, String expNo)에서 예외 발생{
String requestData= "{'OrderCode':'','ShipperCode':'" + expCode + " ','LogisticCode':' " + expNo + "'}";
Map<String, String> params = new HashMap<String, String>();
params.put("RequestData", urlEncoder(requestData, "UTF -8"));
params.put("EBusinessID", EBusinessID);
params.put("RequestType", "1002");
String dataSign=encrypt(requestData, AppKey, "UTF-8");
params.put("DataSign" , urlEncoder(dataSign, "UTF-8"));
params.put("DataType", "2");
String result=sendPost(ReqURL, params);
//정보가 반환됨 회사의 비즈니스 처리에 따라.... ....
반환 결과;
}
/**
* MD5 암호화
* @param str content
* @param charset 인코딩 방법
* @throws Exception
*/
@SuppressWarnings("unused")
private String MD5(String str, String charset)에서 예외 발생 {
MessageDigest md = MessageDigest.getInstance(" MD5");
md.update(str.getBytes(charset));
byte[] result = md.digest();
StringBuffer sb = new StringBuffer(32);
for ( int i = 0; i < result.length; i++) {
int val = result[i] & 0xff;
if (val <= 0xf) {
sb.append("0");
}
sb .append(Integer.toHexString(val ));
}
return sb.toString().toLowerCase();
}
/**
* base64 인코딩
* @param str content
* @param charset 인코딩 방법
* @throws UnsupportedEncodingException
*/
private String base64(String str, String charset) throws UnsupportedEncodingException{
String Encode(str.getBytes(charset));
인코딩된 반환;
}
@SuppressWarnings("unused")
private String urlEncoder(String str, String charset) throws UnsupportedEncodingException{
String result = URLEncoder.encode(str, charset);
return result;
}
/* *
* 전자상거래 서명 서명 생성
* @param content content
* @param keyValue Appkey
* @param charset 인코딩 방법
* @throws UnsupportedEncodingException,Exception
* @return DataSign 서명
*/
@SuppressWarnings("unused")
private String encrypt (String content, String keyValue, String charset) throws UnsupportedEncodingException, Exception
{
if (keyValue != null)
{
return base64(MD5( content + keyValue, charset), charset);
}
return base64(MD5(content, charset), charset);
}
/**
* 지정된 URL로 POST 메소드 요청을 보냅니다
* @param url 요청을 보낼 URL
* @param params 요청의 매개변수 세트
* @return 원격 리소스의 응답 결과
*/
@SuppressWarnings("unused")
private String sendPost( 문자열 url, Map<String, String> params) {
OutputStreamWriter out = null;
BufferedReader in = null;
StringBuilder result = new StringBuilder();
try {
URL realUrl = new URL(url);
HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection();
// 发送POST请求必须设置如下两行
conn.setDoOutput(true);
conn.setDoInput(true);
// POST방법
conn.setRequestMethod("POST") ;
// 일반적으로 사용되는 기능
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent ",
"Mozilla/4.0(호환 가능; MSIE 6.0; Windows NT 5.1;SV1)");
conn.setRequestProperty("MessContent-Type", "application/x-www-form-urlencoded");
conn.connect();
// 获取URLConnection对象对应的输流流
out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
// 发送请求参数
if (params != null) {
StringBuilder param = new StringBuilder();
for (Map.Entry< 문자열, 문자열> 항목 : params.entrySet()) {
if(param.length()>0){
param.append("&");
}
param.append(entry.getKey());
param.append("=");
param.append(entry.getValue());
//System.out.println(entry.getKey()+":"+entry.getValue());
}
//System.out.println("param:"+param.toString());
out.write(param.toString());
}
// flash输流的缓冲
out.flush();
// URL의 응답을 읽기 위해 BufferedReader 입력 스트림을 정의합니다.
in = new BufferedReader(
new InputStreamReader(conn.getInputStream(), "UTF-8"));
String line;
while ((line = in. readLine( )) != null) {
result.append(line);
}
} catch (Exception e) {
e.printStackTrace();
}
//finally 블록을 사용하여 출력 스트림과 입력 스트림을 닫습니다.
마지막으로{
try{
if(out!=null){
out.close();
}
if(in!=null){
in.close();
}
}
catch(IOException ex) {
ex .printStackTrace();
}
}
return result.toString();
}
private static char[] base64EncodeChars = new char[] {
'A', 'B', 'C', 'D ', 'E', 'F', 'G', 'H',
'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P' ,
' Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
'Y', 'Z', 'a', 'b' , 'c', 'd', 'e', 'f',
'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n ',
'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
'w', 'x', 'y', 'z ', '0', '1', '2', '3',
'4', '5', '6', '7', '8', '9', '+', '/' };
public static String base64Encode(byte[] data) {
StringBuffer sb = new StringBuffer();
int len = data.length;
int i = 0;
int b1, b2, b3;
while ( i < len) {
b1 = data[i++] & 0xff;
if (i == len)
{
sb.append(base64EncodeChars[b1 >> 2]);
sb.append(base64EncodeChars [(b1 & 0x3) < ;< 4]);
sb.append("==");
break;
}
b2 = 데이터[i++] & 0xff;
if (i == len)
{
sb.append(base64EncodeChars[ b1 >>> 2]);
sb.append(base64EncodeChars[((b1 & 0x03) << 4) | ((b2 & 0xf0) >>> 4)]);
sb .append(base64EncodeChars[(b2 & 0x0f) << 2]);
sb.append("=");
break;
}
b3 = data[i++] & 0xff;
sb.append(base64EncodeChars[ b1 >>> 2]);
sb.append(base64EncodeChars[((b1 & 0x03) << 4) | ((b2 & 0xf0) >>> 4)]);
sb .append(base64EncodeChars[((b2 & 0x0f) << 2) | ((b3 & 0xc0) >>> 6)]);
sb.append(base64EncodeChars[b3 & 0x3f]);
}
return sb.toString();
}
}