Free docking third-party api logistics express bird single query interface

Keywords: Java Mobile network JSON

Express query interface refers to the application program interface open to the outside world of Express query network. Developers can interact with Express query network by calling this interface, and develop their own Express query application program based on this interface.

For technical documentation, please refer to the Express Bird website api: Free Query Express Interface 100% Safety Guarantee Logistics Instant Query API - Express Bird
(1) Access process:

1. Register Express Bird Account on the Registration Page of Express Bird Official Website
Website: Express Bill Number Query Interface Electronic Form APIKey Authorization Application Express Bird Account Registration
2. Login Express Bird User Management Background
Website: User login Express Bird API makes logistics interface docking easier
Interface description
(1) The message receiving mode supported by the interface is HTTP POST, and the encoding format of the request method is utf-8: "application/x-www-form-urlencoded;charset=utf-8".
(2) The designated logistics waybill number chooses the corresponding express company code. If the format is wrong or the coding error will return the failure information. If EMS logistics number should choose express company code (EMS)
(3) API test address: http://testapi.kdniao.cc:8081/api/dist
(4) API official address: http://api.kdniao.cc/api/dist
(5) Pushing new logistics information on time
(6) Application for Interface Key: Express Bird( http://www.kdniao.com/reg)
JSON request

{
    "ShipperCode":"SF",
    "OrderCode":"SF201608081055208281",
    "LogisticCode":"3100707578976",
    "PayType":"1",
    "ExpType":"1",
    "CustomerName":"",
    "CustomerPwd":"",
    "MonthCode":"",
    "IsNotice":"0",
    "Sender":{
        "Name":"1255760",
        "Tel":"",
        "Mobile":"13700000000",
        "ProvinceName":"Guangdong Province",
        "CityName":"Shenzhen City",
        "ExpAreaName":"Futian District",
        "Address":"Test address"
    },
    "Receiver":{
        "Name":"1255760",
        "Tel":"",
        "Mobile":"13800000000",
        "ProvinceName":"Guangdong Province",
        "CityName":"Shenzhen City",
        "ExpAreaName":"Longhua New Area",
        "Address":"Test address 2"
    },
    "Commodity":[
        {
            "GoodsName":"Book"
        }
    ]}
    

java request:

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.UnsupportedEncodingException;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLEncoder;import java.util.HashMap;import java.util.Map;import java.security.MessageDigest;
  
 public class KdniaoSubscribeAPI {
      
    //DEMO
    public static void main(String[] args) {
        KdniaoSubscribeAPI api = new KdniaoSubscribeAPI();
        try {
            String result = api.orderTracesSubByJson();
            System.out.print(result);
              
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
      
    //E-commerce ID
    private String EBusinessID="Please apply to express bird website";
    //E-commerce Encryption Private Key, Pay Attention to Storage, Do not Leak
    private String AppKey="Please apply";
    //Test request url
    private String ReqURL = "http://testapi.kdniao.cc:8081/api/dist";
    //Formal request url
    //private String ReqURL = "http://api.kdniao.cc/api/dist";
   
    /**
     * Json Mode Logistics Information Subscription
     * @throws Exception
     */
    public String orderTracesSubByJson() throws Exception{
        String requestData="{'OrderCode': 'SF201608081055208281'," +
                                "'ShipperCode':'SF'," +
                                "'LogisticCode':'3100707578976'," +
                                "'PayType':1," +
                                "'ExpType':1," +
                                "'CustomerName':'',"+
                                "'CustomerPwd':''," +
                                "'MonthCode':''," +
                                "'IsNotice':0," +
                                "'Cost':1.0," +
                                "'OtherCost':1.0," +
                                "'Sender':" +
                                "{" +
                                "'Company':'LV','Name':'Taylor','Mobile':'15018442396','ProvinceName':'Shanghai','CityName':'Shanghai','ExpAreaName':'Qingpu District','Address':'73 Mingzhu Road'}," +
                                "'Receiver':" +
                                "{" +
                                "'Company':'GCCUI','Name':'Yann','Mobile':'15018442396','ProvinceName':'Beijing','CityName':'Beijing','ExpAreaName':'Chaoyang District','Address':'Yaxiu Building, Sanlitun Street'}," +
                                "'Commodity':" +
                                "[{" +
                                "'GoodsName':'shoes','Goodsquantity':1,'GoodsWeight':1.0}]," +
                                "'Weight':1.0," +
                                "'Quantity':1," +
                                "'Volume':0.0," +
                                "'Remark':'Handle with care'}";
          
        Map<String, String> params = new HashMap<String, String>();
        params.put("RequestData", urlEncoder(requestData, "UTF-8"));
        params.put("EBusinessID", EBusinessID);
        params.put("RequestType", "1008");
        String dataSign=encrypt(requestData, AppKey, "UTF-8");
        params.put("DataSign", urlEncoder(dataSign, "UTF-8"));
        params.put("DataType", "2");
          
        String result=sendPost(ReqURL, params);
          
        //Processing the returned information according to the company's business...
          
        return result;
    }
          
    /**
     * MD5 encryption
     * @param str content      
     * @param charset Coding method
     * @throws Exception
     */
    @SuppressWarnings("unused")
    private String MD5(String str, String charset) throws Exception {
        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 Code
     * @param str content      
     * @param charset Coding method
     * @throws UnsupportedEncodingException
     */
    private String base64(String str, String charset) throws UnsupportedEncodingException{
        String encoded = base64Encode(str.getBytes(charset));
        return encoded;   
    }  
      
    @SuppressWarnings("unused")
    private String urlEncoder(String str, String charset) throws UnsupportedEncodingException{
        String result = URLEncoder.encode(str, charset);
        return result;
    }
      
    /**
     * Sign Signature Generation in E-commerce
     * @param content content  
     * @param keyValue Appkey 
     * @param charset Coding method
     * @throws UnsupportedEncodingException ,Exception
     * @return DataSign autograph
     */
    @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);
    }
      
     /**
     * Send a request for a POST method to a specified URL    
     * @param url The URL to send the request   
     * @param params Request parameter set    
     * @return RESPONSE RESULTS OF REMOTE RESOURCES
     */
    @SuppressWarnings("unused")
    private String sendPost(String 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();
            // To send a POST request, you must set the following two lines
            conn.setDoOutput(true);
            conn.setDoInput(true);
            // POST Method
            conn.setRequestMethod("POST");
            // Setting Common Request Properties
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("user-agent",
                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            conn.connect();
            // Get the output stream corresponding to the URLConnection object
            out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
            // Send request parameters           
            if (params != null) {
                  StringBuilder param = new StringBuilder();
                  for (Map.Entry<String, String> 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());
            }
            // Buffer of flush output stream
            out.flush();
            // Define the BufferedReader input stream to read the response of the URL
            in = new BufferedReader(
                    new InputStreamReader(conn.getInputStream(), "UTF-8"));
            String line;
            while ((line = in.readLine()) != null) {
                result.append(line);
            }
        } catch (Exception e) {           
            e.printStackTrace();
        }
        //Use final block to close output stream and input stream 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 = data[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();
    }}

Posted by wrong_move18 on Wed, 09 Oct 2019 17:13:44 -0700