L'API de requête de numéro de suivi express peut être connectée à la requête express SF, à la requête express postale, à la requête express ZTO, etc. Ces sociétés de logistique express proposent une logistique express telle que des interfaces d'identification automatique pour les numéros de commande express et des interfaces de requête pour les numéros de commande express. Pour les entreprises de commerce électronique et les sociétés de services ERP, l’intégration de cette interface dans leur propre logiciel augmente la compétitivité de l’entreprise. Cependant, il existe un inconvénient : il doit être connecté à chaque grande société de transport express et déboguer l'interface séparément, le coût de maintenance est élevé et peu pratique à gérer. Recommandez une plate-forme qui fournit un amarrage gratuit pour l'API de requête express, Express Bird Open Platform
1. Scénarios d'application d'interface
1 Après avoir effectué des achats sur la plate-forme de commerce électronique, lors du suivi de la logistique via les commandes d'achat, appelez cette API pour obtenir les détails des informations logistiques.
2.Lors du traitement du rapprochement du fret, obtenez le statut logistique de la facture de transport en un seul clic
3 Suivi des lots et obtenez des informations logistiques sur la facture de transport
2. Préparation de l'amarrage
1 Enregistrez un compte sur la plateforme ouverte Express Bird
2. informations sur le compte développeur (ID, clé API), visualisez-les dans le backend Express Bird
3 Effectuez le débogage technique conjoint et le débogage complet, adresse API de requête logistique : lien web
4.
3. Amarrage technique
L'interface de demande express fournie par Express Bird prend en charge plus de 400 demandes logistiques express, couvrant le numéro de suivi de la livraison express grand public nationale, avec des informations opportunes et des données complètes.
Nom de l'interface : express.info.get
Méthode de requête : HTTP POST Format d'encodage de la méthode de requête : utf-8
Exemple de requête :
package com.zs.app;
importer php.io.BufferedReader;
importer php.io.IOException;
importer php.io.InputStreamReader;
importer php.io.OutputStreamWriter;
importer php.io.UnsupportedEncodingException; php.net.HttpURLConnection;
importer php.net.URL;
importer php.net.URLEncoder;
importer php.security.MessageDigest;
importer php.util.HashMap;
importer php.util.Map;
/**
*
* Interface de requête en temps réel de suivi logistique Express Bird
*
* @Technical QQ Group : 456320272
* @voir : Lien Web
* @copyright:
*
* L'identifiant de commerce électronique et la clé privée dans DEMO sont testé et utilisé, officiellement Veuillez créer un compte séparément pour l'environnement
* Si le volume de requêtes dépasse 500 en une seule journée, il est recommandé d'accéder à notre interface push d'abonnement aux pistes logistiques
*
* Veuillez vous rendre sur le site officiel pour postuler ID et clé : lien web
*/
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 (Exception e) {
e.printStackTrace();
}
}
//ID de commerce électronique
private String EBusinessID="1330422";
//Clé privée de chiffrement du commerce électronique, fournie par Express Bird, veuillez la conserver soigneusement et ne pas la divulguer
private String AppKey="7611818b-6279-4398-8747-df2ca39e86b4";
//Request url
private String ReqURL ="Lien Web
/* *
* Méthode Json pour interroger le suivi logistique des commandes
* @throws Exception
*/
public String getOrderTracesByJson(String expCode, String expNo) renvoie une exception{
String requestData= "{'OrderCode':'','ShipperCode':'" + expCode + " ','LogisticCode':' " + expNo + "'}";
Map
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);
//Informations renvoyées basé sur le traitement commercial de l'entreprise.. ....
résultat de retour ;
}
/**
* Cryptage MD5
* @param str content
* @méthode d'encodage du jeu de caractères param
* @throws Exception
*/
@SuppressWarnings("unused")
private String MD5 (String str, String charset) lève une 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();
}
/**
* encodage base64
* @param str content
* @param charset encoding method
* @throws UnsupportedEncodingException
*/
private String base64(String str, String charset) lance UnsupportedEncodingException{
String encoded = base64Encode(str.getBytes(charset));
return encoded;
}
@SuppressWarnings("unused")
private String urlEncoder(String str, String charset) lance UnsupportedEncodingException{
String result = URLEncoder.encode(str, charset);
return result;
}
/* *
* Génération de signature de signe de commerce électronique
* @param content content
* @param keyValue Appkey
* @param charset encoding method
* @throws UnsupportedEncodingException,Exception
* @return DataSign signature
*/
@SuppressWarnings("unused")
private String encrypt (contenu de la chaîne, String keyValue, String charset) renvoie UnsupportedEncodingException, Exception
{
if (keyValue != null)
{
return base64(MD5( content + keyValue, charset), charset);
}
return base64(MD5(content, charset), charset);
}
/**
* Envoyer une requête de méthode POST à l'URL spécifiée
* @param url L'URL pour envoyer la requête
* @param params L'ensemble de paramètres de la requête
* @return Le résultat de la réponse de la ressource distante
*/
@SuppressWarnings("unused")
private String sendPost( String url, Map
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);
// 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("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< String, String> entrée : 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();
// Définissez le flux d'entrée BufferedReader pour lire la réponse de l'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();
}
//Utilisez enfin le bloc pour fermer le flux de sortie et le flux d'entrée
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 ( je < 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();
}
}