國際快遞查詢接口JAVA示例-trackingmore


國際快遞查詢接口

國際快遞查詢接口的需求量很大,例如一些跨境電商B2C網站、快遞查詢APP、快遞櫃、跨境物流公司等都會需要用到國際快遞接口。

目前市面上的快遞接口,以國內快遞居多,有些雖然號稱支持多家國際快遞和國際郵政,但實際調用時,由於國際快遞網站變化較多,所以經常出現不穩定的情況。這里我要介紹的是trackingmore的國際快遞接口,他們一直專做國際快遞,支持的380家快遞也絕大部分是國外的郵政與快遞公司,所以提供的接口也非常可靠。

國際快遞特性(含國際郵政)

1.可在兩個網站查詢到信息:屬於萬國郵聯的國際郵政單號,可以分別在發件國家郵政官網與目的國家郵政官網查詢到數據。相對而言,國內快遞一般只需要在一個網站查詢數據。

2.海關問題:國際包裹是跨國包裹,需要通過兩國的海關查驗,有時候會被海關扣押,進而導致時效不如國內快遞穩定。

3.運輸時間長:國際郵政包裹相對國際快遞價格便宜很多,所以運輸時間也慢,甚至會需要1到2個月才能簽收。

4.多語言問題:由於包裹是跨國的,必然會涉及多語言問題,國內客戶需要看到的是中文信息,而國外客戶希望看到的是當地語言的物流信息。

國際快遞API特性(trackingmore)

1.包含發件國與目的國的數據:Trackingmore的API中包含的參數有 origin_info(發件國物流信息)和destination_info(目的國物流信息),所以通過該接口可以讓用戶看到最為完整的物信息。

2.智能識別快遞狀態:當檢測到包裹在海關停滯,或者包裹被退回等信息,Trackingmore會返回“exception”(可能異常)的狀態,幫助用戶第一時間發現異常件,從而盡早處理。

3.按照單號個數計費:由於國際包裹的運輸時間很長,完整的運輸周期可能需要兩個月,而每天至少需要查詢兩次以上。所以按照查詢單號個數計費而不是按照API調用次數計費,是最為良心的計費方式。

4.多語言API:針對不同的快遞商,可以按照語言返回不同的結果。包含中文、英文、日語、印度語、阿拉伯語等等。

對接示例

這里以Trackingmore為例,不同的接口的對接方式比較類似,都需要注冊,並生成自己的API key。以下以Trackingmore的實時查詢API為例。

  接口支持的消息接收方式為HTTP POST

  請求方法的編碼格式為 utf-8

  請求body部分的參數的數據格式為json 格式

接口參數      

接口請求地址

http://api.trackingmore.com/v2/trackings/realtime

 

請求頭部信息參數

參數名稱 類型 說明 是否必須
Content-Type: 
application/json
定義請求頭部的數據格式
Trackingmore-Api-Key: 
string Trackingmore 后台獲取的API

 

 

 

 

 請求body參數說明

參數說明 類型 說明 是否必須
tracking_number
string 查詢快遞的快遞單號
carrier_code
string trackingmore定義的快遞商簡碼,比如china ems 就是china-ema

 

 

 

 

carrier_code 參數是trackingmore 自己定義的快遞商家的簡碼,具體的可以在這里查看

還有需要注意的就是body部分這兩個參數需要時json數據格式。大概樣子就是這樣的

1 {
2     "tracking_number": "LK664578623CN", 3 "carrier_code": "china-ems" 4 }

返回參數定義

參數名稱 參數類型 參數說明 是否一定要返回該項值
code
數字 返回碼 成功返回200,失敗有其他隊列的錯誤碼
type string 接口類型 成功返回Success
message string 返回信息說明 成功返回Succes,失敗返回隊列的錯誤信息
data json 查詢到的物流信息 成功返回物流信息,失敗返回空

 

 

 

 

 

其他的狀態響應簡碼可以在這里看到。

 

返回示例

{
    "meta": { "code": 200, "type": "Success", "message": "Success" }, "data": { "items": [{ "id": "442f798ea35749e7605d1a73d4181a01", "tracking_number": "RE113184005HK", "carrier_code": "hong-kong-post", "status": "transit", "original_country": "Hong Kong [CN]", "destination_country": "Colombia", "itemTimeLength": null, "origin_info": { "weblink": "http:\/\/www.hongkongpost.hk\/", "phone": "852 2921 2222", "carrier_code": "hong-kong-post", "trackinfo": [{ "Details": "CO", "StatusDescription": "The item ( RE113184005HK ) left Hong Kong for its destination on 10-Oct-2015 ", "Date": "2015-10-09 00:00" }] }, "destination_info": { "weblink": "http:\/\/www.4-72.com.co\/", "phone": "(57-1) 4722000", "carrier_code": "colombia-post", "trackinfo": [{ "Date": "2015-10-22 20:52", "StatusDescription": "DIGITALIZADO", "Details": "CTP.CENTRO A" }, { "Date": "2015-10-22 17:02", "StatusDescription": "Registro de entrega exitosa", "Details": "" }, { "Date": "2015-10-22 16:55", "StatusDescription": "ENTREGADO", "Details": "CD.MONTEVIDEO" }, { "Date": "2015-10-22 09:31", "StatusDescription": "REASIGNADO", "Details": "CD.NORTE" }, { "Date": "2015-10-22 08:52", "StatusDescription": "REASIGNADO", "Details": "CD.NORTE" }, { "Date": "2015-10-22 02:39", "StatusDescription": "En proceso", "Details": "CTP.CENTRO A" }, { "Date": "2015-10-21 16:36", "StatusDescription": "En proceso", "Details": "CTP.CENTRO A" }, { "Date": "2015-10-20 06:29", "StatusDescription": "Envío Recibido en la oficina de cambio internacional", "Details": "COBOGC" }] } }] } }

JAVA接口對接示例

String	urlStr =null;
String requestData="{\"tracking_number\": \"RQ958152738CN\",\"carrier_code\":\"china-ems\"}";
String result = new Tracker().orderOnlineByJson(requestData,urlStr,"realtime");

package trackingMore;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Tracker {
	
	/** Apikey*/
	private String Apikey="Apikey you get from trackingMore";	
	
	/**
     * Json
     */
	public String orderOnlineByJson(String requestData,String urlStr,String type) throws Exception{
		//---headerParams
		Map headerparams = new HashMap();
		headerparams.put("Trackingmore-Api-Key", Apikey);
		headerparams.put("Content-Type", "application/json");
		//---bodyParams
		List bodyParams = new ArrayList();
		String result =null;
		if(type.equals("post")){
			String ReqURL="http://api.trackingmore.com/v2/trackings/post";	
			bodyParams.add(requestData);
			result=sendPost(ReqURL, headerparams , bodyParams,"POST");
			
		}else if(type.equals("get")){
			
			String ReqURL="http://api.trackingmore.com/v2/trackings/get";	
			String RelUrl = ReqURL+urlStr;
			result=sendPost(RelUrl, headerparams , bodyParams,"GET");
			
		}else if(type.equals("batch")){
			
			String ReqURL="http://api.trackingmore.com/v2/trackings/batch";	
			bodyParams.add(requestData);
			result=sendPost(ReqURL, headerparams , bodyParams,"POST");
			
		}else if(type.equals("codeNumberGet")){
			
			String ReqURL="http://api.trackingmore.com/v2/trackings";	
			String RelUrl = ReqURL+urlStr;
			result=sendGet(RelUrl, headerparams,"GET");
			
		}else if(type.equals("codeNumberPut")){
			
			String ReqURL="http://api.trackingmore.com/v2/trackings";	
			bodyParams.add(requestData);
			String RelUrl = ReqURL+urlStr;
			result=sendPost(RelUrl, headerparams , bodyParams,"PUT");
			
		}else if(type.equals("codeNumberDelete")){
			
			String ReqURL="http://api.trackingmore.com/v2/trackings";	
			String RelUrl = ReqURL+urlStr;
			result=sendGet(RelUrl, headerparams ,"DELETE");
			
		}else if(type.equals("realtime")){
			
			String ReqURL="http://api.trackingmore.com/v2/trackings/realtime";	
			bodyParams.add(requestData);
			result=sendPost(ReqURL, headerparams , bodyParams,"POST");
			
		}
		
		
		return result;
		
		
	}
	
	
	private String sendPost(String url, Map headerParams , List bodyParams,String mothod) {
        OutputStreamWriter out = null;
        BufferedReader in = null;        
        StringBuilder result = new StringBuilder(); 
        try {
            URL realUrl = new URL(url);
            HttpURLConnection conn =(HttpURLConnection) realUrl.openConnection();
           
            conn.setDoOutput(true);
            conn.setDoInput(true);
            
            conn.setRequestMethod(mothod);
         
            for (Map.Entry entry : headerParams.entrySet()) {
            	conn.setRequestProperty(entry.getKey(), entry.getValue());
            }
            conn.connect();
          
            out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
          
            StringBuffer sbBody = new StringBuffer();
            for (String str : bodyParams) {
				sbBody.append(str);
			}
            out.write(sbBody.toString());
            
            out.flush();
          
            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();
    }	
	
	public static String sendGet(String url, Map headerParams,String mothod ) {
        String result = "";
        BufferedReader in = null;
        try {
            String urlNameString = url;
            URL realUrl = new URL(urlNameString);
           
            HttpURLConnection connection =(HttpURLConnection) realUrl.openConnection();
          
            connection.setRequestMethod(mothod);
         
            for (Map.Entry entry : headerParams.entrySet()) {
            	connection.setRequestProperty(entry.getKey(), entry.getValue());
            }
            
            connection.connect();
           
            Map> map = connection.getHeaderFields();
           
            for (String key : map.keySet()) {
                System.out.println(key + "--->" + map.get(key));
            }
           
            in = new BufferedReader(new InputStreamReader(
                    connection.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            System.out.println("Exception " + e);
            e.printStackTrace();
        }
       
        finally {
            try {
                if (in != null) {
                    in.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
        return result;
    }
		
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM