How to use express bird to develop and query express api interface on web front end

The express inquiry interface refers to an application program interface opened to the express inquiry network. Developers can interact with the express inquiry network by calling this interface and develop their own express inquiry application based on this interface.
How to use express bird to develop and query express api interface on web front end
For technical documents, please refer to the official website api of Express Bird: Free query express interface_100% security_Real-time logistics query API-Express bird please add a link description

(1) Access process:

1. Log in to the registration page of the Express Bird official website and register for the Express Bird account

Website: Express Track Number Query Interface_Electronic Face List_APIKey Authorization Application-Express Bird Account Registration

2. Log in to express bird user management background

Website: User login_Express Bird API makes logistics interface docking easier

Interface Description

(1) The message receiving method supported by the interface is HTTP POST, and the encoding format of the request method (utf-8): "application/x-www-form-urlencoded;charset=utf-8".

(2) Select the corresponding courier company code for the designated logistics waybill number. If the format is wrong or the code is wrong, it will return a failure message. If the EMS logistics order number should choose the express company code (EMS)

(3) API test address: http://testapi.kdniao.cc:8081/api/dist

(4) Official API address: http://api.kdniao.cc/api/dist

(5) Push new logistics information regularly

(6) Application for interface secret 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":"广东省",

        "CityName":"深圳市",

        "ExpAreaName":"福田区",

        "Address":"测试地址"    },

    "Receiver":{

        "Name":"1255760",

        "Tel":"",

        "Mobile":"13800000000",

        "ProvinceName":"广东省",

        "CityName":"深圳市",

        "ExpAreaName":"龙华新区",

        "Address":"测试地址2"    },

    "Commodity":[

        {

            "GoodsName":"书本"        }

    ]}

java请求:

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;

publicclass KdniaoSubscribeAPI {

    //DEMOpublicstaticvoid main(String[] args) {

        KdniaoSubscribeAPI api =new KdniaoSubscribeAPI();

        try {

            String result = api.orderTracesSubByJson();

            System.out.print(result);

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

    //电商IDprivateString EBusinessID="请到快递鸟官网申请";

    //电商加密私钥,注意保管,不要泄漏privateString AppKey="请申请";

    //测试请求urlprivateString ReqURL ="http://testapi.kdniao.cc:8081/api/dist";

    //正式请求url

    //private String ReqURL = "http://api.kdniao.cc/api/dist";/**

    * Json方式  物流信息订阅

    * @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':'上海','CityName':'上海','ExpAreaName':'青浦区','Address':'明珠路73号'},"+"'Receiver':"+"{"+"'Company':'GCCUI','Name':'Yann','Mobile':'15018442396','ProvinceName':'北京','CityName':'北京','ExpAreaName':'朝阳区','Address':'三里屯街道雅秀大厦'},"+"'Commodity':"+"[{"+"'GoodsName':'鞋子','Goodsquantity':1,'GoodsWeight':1.0}],"+"'Weight':1.0,"+"'Quantity':1,"+"'Volume':0.0,"+"'Remark':'小心轻放'}";

        Mapparams=newHashMap();

        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);

        //根据公司业务处理返回的信息......return result;

    }

    /**

    * MD5加密

    * @param str 内容     

    * @param charset 编码方式

    * @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 =newStringBuffer(32);

        for(inti =0; i < result.length; i++) {

            intval = result[i] &0xff;

            if(val <=0xf) {

                sb.append("0");

            }

            sb.append(Integer.toHexString(val));

        }

        return sb.toString().toLowerCase();

    }

    /**

    * base64编码

    * @param str 内容     

    * @param charset 编码方式

    * @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签名生成

    * @param 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)

        {

            returnbase64(MD5(content + keyValue, charset), charset);

        }

        return base64(MD5(content, charset), charset);

    }

    /**

    * 向指定 URL 发送POST方法的请求   

    * @param url 发送请求的 URL 

    * @param params 请求的参数集合   

    * @return 远程资源的响应结果

    */    @SuppressWarnings("unused")

    privateString sendPost(String url, Mapparams) {

        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 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");

            conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");

            conn.connect();

            // 获取URLConnection对象对应的输出流out=newOutputStreamWriter(conn.getOutputStream(),"UTF-8");

            // 发送请求参数          if(params!=null) {

                  StringBuilder param =new StringBuilder();

                  for(Map.Entry 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());

            }

            // flush输出流的缓冲out.flush();

            // 定义BufferedReader输入流来读取URL的响应in=new BufferedReader(

                    newInputStreamReader(conn.getInputStream(),"UTF-8"));

            String line;

            while((line =in.readLine()) !=null) {

                result.append(line);

            }

        } catch (Exception e) {         

            e.printStackTrace();

        }

        //使用finally块来关闭输出流、输入流        finally{try{

                if(out!=null){

                    out.close();

                }

                if(in!=null){

                    in.close();

                }

            }

            catch(IOException ex){

                ex.printStackTrace();

            }

        }

        return result.toString();

    }

    privatestaticchar[] base64EncodeChars =newchar[] {

            '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','+','/' };

    publicstaticString base64Encode(byte[] data) {

        StringBuffer sb =new StringBuffer();

        intlen = data.length;

        inti =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();

    }}

Guess you like

Origin blog.51cto.com/13914620/2542464