API pertanyaan nombor penjejakan ekspres boleh disambungkan kepada pertanyaan ekspres SF, pertanyaan ekspres pos, pertanyaan ekspres ZTO, dsb. Syarikat logistik ekspres ini menyediakan logistik ekspres seperti antara muka pengenalan automatik untuk nombor pesanan ekspres dan antara muka pertanyaan untuk nombor pesanan ekspres. Bagi syarikat e-dagang dan syarikat perkhidmatan ERP, menyepadukan antara muka ini ke dalam perisian mereka sendiri meningkatkan daya saing syarikat. Walau bagaimanapun, terdapat kelemahan Ia perlu disambungkan kepada setiap syarikat ekspres utama dan nyahpepijat antara muka secara berasingan Kos penyelenggaraan adalah tinggi dan menyusahkan untuk diuruskan. Syorkan platform yang menyediakan dok percuma API pertanyaan ekspres, Platform Terbuka Burung Ekspres
1. Senario aplikasi antara muka
1 Selepas membeli-belah di platform e-dagang, apabila menjejak logistik melalui pesanan beli-belah, hubungi API ini untuk mendapatkan butiran maklumat logistik
2 .Semasa memproses penyelarasan pengangkutan, dapatkan status logistik dengan satu klik
3 Penjejakan Batch dan dapatkan maklumat logistik
2. Dapatkan akaun platform terbuka Burung Ekspres
maklumat akaun pembangun ( ID, Kunci API), lihat di bahagian belakang Express Bird 3 Jalankan penyahpepijatan bersama teknikal dan penyahpepijatan lengkap, alamat api pertanyaan logistik: pautan web 4 3. Docking teknikalAntara muka pertanyaan ekspres yang disediakan oleh Express Bird menyokong lebih daripada 400 pertanyaan logistik ekspres, meliputi nombor penjejakan penghantaran ekspres arus perdana domestik, dengan maklumat tepat pada masanya dan data lengkap. Nama antara muka: express.info.get Kaedah permintaan: HTTP POST Format pengekodan kaedah permintaan: utf-8Contoh permintaan:pakej com.zs.app;
import php.io.BufferedReader;
import php.io.IOException;
import php.io.InputStreamReader;
import php.io.OutputStreamWriter;
import php.io.Exceptioned php.net.HttpURLConnection;
import php.net.URL;
import php.net.URLEncoder;
import php.security.MessageDigest;
import php.util.HashMap;
import php.util.Map;
/**
*
* Logistik Express Bird menjejaki antara muka pertanyaan masa nyata
*
* @Kumpulan QQ Teknikal: 456320272
* @lihat: Pautan web
* @hak cipta:
*
* ID e-dagang dan kunci peribadi dalam DEMO ialah diuji dan digunakan, secara rasmi Sila daftar akaun secara berasingan untuk persekitaran
* Jika jumlah pertanyaan melebihi 500 dalam satu hari, adalah disyorkan untuk mengakses antara muka tolak langganan trek logistik kami
*
* Sila pergi ke laman web rasmi untuk memohon ID dan Kunci: pautan web
*/
kelas awam KdniaoTrackQueryAPI {
//DEMO
public static void main(String[] args) {
KdniaoTrackQueryAPI api = new KdniaoTrackQueryAPI();
try {
Hasil Rentetan ="APIces.getOJrder" "210001633605");
System.out.print(result);
} catch (Exception e) {
e.printStackTrace();
}
}
//E-dagang ID
private String EBusinessID="2";3042
//Kunci persendirian penyulitan e-dagang, disediakan oleh Express Bird, sila simpan dengan berhati-hati dan jangan bocorkan
private String AppKey="7611818b-6279-4398-8747-df2ca39e86b4";
//Minta url String
privateL ="Pautan web
/* *
* Kaedah Json untuk menanyakan pesanan trek logistik
* @throws Exception
*/
public String getOrderTracesByJson(String expCode, String expNo) membuang Exception{
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);
//Maklumat dikembalikan berdasarkan pemprosesan perniagaan syarikat.. ....
hasil pulangan;
}
/**
* Penyulitan MD5
* @param str kandungan
* @param charset kaedah pengekodan
* @throws Exception
*/
@SuppressWarnings("tidak digunakan")
String MD5(String str, String charset) melontar Exception {
MessageDigest md = MessageDigest.getInstance(" MD5");
md.update(str.getBytes(charset));
bait[] hasil = md.digest();
StringBuffer sb = StringBuffer(32);
untuk ( int i = 0; i < result.length; i++) {
int val = result[i] & 0xff;
if (val <= 0xf) {
sb.append("0");
}
.append(Integer.toHexString(val ));
}
return sb.toString().toLowerCase();
}
/**
* pengekodan base64
* kandungan @param str
* kaedah pengekodan charset @param
* @membuang PengecualianPengekodan Tidak disokong
*/
private String base64(String str, String charset) membuang UnsupportedEncodingException{
String dikod = base64Encode(str.getBytes(charset));
return dikodkan;
}
@SuppressWarnings("unused")
private String urlEncoder(String str, String charset) melontar UnsupportedEncodingException{
String result = URLEncoder.encode(str, charset}});
*
* Penjanaan tandatangan E-dagang
* kandungan kandungan @param
* @param keyValue Appkey
* kaedah pengekodan charset @param
* @membuang UnsupportedEncodingException,Exception
* @kembali tandatangan DataSign
*/
@SuppressWarnings("tidak digunakan")
penyulitan Rentetan peribadi (Kandungan rentetan, Nilai kekunci rentetan, set aksara rentetan) melontarkan PengecualianPengekodan Tidak disokong, Pengecualian
{
jika (Nilai kunci != null)
{
(asas pulangan 64 MD) kandungan + keyValue, charset), charset);
}
return base64(MD5(kandungan, charset), charset);
}
/**
* Hantar permintaan kaedah POST ke URL yang ditentukan
* @param url URL untuk menghantar permintaan
* @param params Set parameter permintaan
* @return Hasil tindak balas sumber jauh
*/
@SuppressWarnings("tidak digunakan")
private String sendPost( URL rentetan, Map<String, String> params) {
OutputStreamWriter out = null;
BufferedReader in = null;
StringBuilder result = new StringBuilder();
cuba {
URL realUrl = conHubURL(url) baharu;
(HttpURLConnection) realUrl.openConnection() hod("POST") ;
// 设置通用的请求属性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequest-Property ",
"Mozilla/4.0 (serasi; 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();
String, String> entri : 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();
// Tentukan aliran input BufferedReader untuk membaca respons 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 finally block untuk menutup strim output dan strim input
akhirnya{
cuba{
jika(keluar!=null){
keluar.tutup();
}
jika(dalam!=null){
dalam.tutup();
}
}
tangkap(IOException ex) {
ex .printStackTrace();
}
}
kembali hasil.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 statik String base64Encode(bait[] data) {
StringBuffer sb = new StringBuffer();
int len = data.length;
int i = 0;
int b1, b2, b3;
while ( i < len) {
b1 = data[i++] & 0xff;
jika (i == len)
{
sb.append(base64EncodeChars[b1 >>> 2]);
sb.append(base64EncodeChars [(b1 & 0x3) < ;< 4]);
sb.append("==");
break;
}
b2 = data[i++] & 0xff;
jika (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]);
}
kembali sb.toString();
}
}