エクスプレスAPIがする最初のドッキング前のインターフェース、物流機能を表現するクエリ軌道を実装するために電力供給事業に共通のクエリインターフェイスである鳥ウェブサイトの表現アプリケーションインタフェースキーとAPIKEYを
APIの明確な目的を持つシナリオ
次のように最も一般的なシナリオは以下のとおりです。
(1)電気のウェブサイト:例えば、B2C、購入する、B2B、卸売配信局、C2C、ライブローカルトレーディングサイト。
(2)管理システム:注文処理プラットフォーム、プラットフォームの注文、配信プラットフォーム、分配システム、チャネル管理システム、顧客管理システム、ERPなど。
次のようにExpressは、APIを使用しています。
(1)オーダーの物流状況を見ることができるようになり、顧客が直接「マイオーダー」ページ内、ウェブサイトにログインすることができます。
(2)自動的に単一有するストリームの圧力を低減するために、「受信した」状態のような単一番号「困難な部分を」除外します。
(3)あなたは、ポリシーを返すことができます注文確認に変更を加えることができ、そのような「記号」に注文番号が変化すると、注文状況やトランザクション処理を変更します。
(4)は宅配会社を選択、評価、単数形の輸送は、「受信した」によると、あなたは販売スタッフのパフォーマンスを計算することができ、かつ簡単決済に対処します。
(5)電子メールは、テキストメッセージは、委託の最新の状態は、ユーザーがまた二次電子メールマーケティングメッセージを使用することができますなだめることができ、ユーザを思い出させます。
ドッキング要件:
(1)、クエリインタフェースに従って(これ以上10 / Sよりも単一のクエリ、および送信)追跡番号をサポートしていません。
(2)は、エラーまたは失敗の情報を返さないフォーマットをコード指定された選択Expressに対応するストリームの運送状番号が符号化されます。EMSは、単一の番号ストリームのエンコードエクスプレス(EMS)を選択する必要があります
(3)、及び時系列発生を昇順ストリームトラッキング情報を返します。
(4)、インタフェース命令1002
(5)は、インターフェイスを提供する:エクスプレス鳥を
(6)は、アドレスを要求します。http://www.kdniao.com
Javaのリクエスト例:
輸入java.io.BufferedReader; インポートにjava.io.IOException; 輸入java.io.InputStreamReader; 輸入java.io.OutputStreamWriterが、 輸入java.io.UnsupportedEncodingException。 インポートのjava.net.HttpURLConnection; インポートのjava.net.URL; 輸入java.net.URLEncoder; 輸入java.security.MessageDigestの; 輸入java.util.HashMapを; 輸入java.util.Map; / ** * * 500以上のシングル日単一のクエリのボリューム、それが推奨され、物流は、アクセスサブスクリプションプッシュインターフェイスを追跡します * * / パブリッククラスKdniaoTrackQueryAPI { //デモ パブリック静的無効メイン(文字列[] args){ KdniaoTrackQueryAPI API =新しいKdniaoTrackQueryAPI(); {試します 文字列結果= api.getOrderTracesByJson( "ANE"、 "210001633605")。 System.out.print(結果)。 }キャッチ(例外e){ e.printStackTrace(); } } //電気の供給業者のID プライベート文字列EBusinessIDは、「アプリケーション」を=。 //秘密鍵暗号の電力供給ではなく、リークに世話をします プライベート文字列のAppKeyは、「アプリケーション」を=。 // URLリクエスト プライベート文字列ReqURL =「http://api.kdniao.cc/Ebusiness/EbusinessOrderHandle.aspx」。 / ** * JSONウェイ問い合わせ注文物流軌道 * @throws例外 * / パブリック文字列getOrderTracesByJson(文字列expCode、列expNoは){例外をスロー ストリングrequestData = "{ 'OrderCode': ''、 'ShipperCode': '" + expCode + " ' 'LogisticCode':'" + expNo + "'}"。 params =新しいHashMapを()、地図。 params.put( "RequestData" のURLEncoder(requestData、 "UTF-8")); params.put( "EBusinessID"、EBusinessID)。 params.put( "RequestType"、 "1002")。 ストリングdataSign =暗号化(requestData、のAppKey、 "UTF-8"); params.put( "DataSign" のURLEncoder(dataSign、 "UTF-8")); params.put( "データ型"、 "2")。 文字列結果= sendPost(ReqURL、paramsは)。 //同社のビジネス・プロセス情報に基づいて戻って...... 結果を返します。 } / ** * MD5暗号化 * @Param strの内容 * @Param文字セットエンコーディング * @throws例外 * / @SuppressWarnings( "未使用") プライベート文字列MD5(文字列str、文字列の文字セットは){例外をスロー するMessageDigest MD = MessageDigest.getInstance( "MD5")。 md.update(str.getBytes(文字セット))。 バイト[]結果=(md.digest)。 StringBufferのSB =新しいStringBufferの(32)。 {(I ++; I <result.length iが0 = INT)のために INTヴァル=結果[I]&0xffで、 IF(ヴァル<= 0xFの){ sb.append( "0"); } sb.append(Integer.toHexString(ヴァル))。 } リターンsb.toString()toLowerCaseメソッド()。 } / ** * Base64でエンコード * @Param strの内容 * @Param文字セットエンコーディング * @throwsにUnsupportedEncodingException * / プライベート文字列のBASE64(文字列str、文字列の文字セットは)にUnsupportedEncodingExceptionをスロー{ 文字列は、符号化され= base64Encode(str.getBytes(文字セット))。 戻り値は、エンコードされました。 } @SuppressWarnings( "未使用") プライベート文字列のURLEncoder(文字列str、文字列の文字セットは)にUnsupportedEncodingExceptionをスロー{ 文字列結果はURLEncoder.encode(STR、文字セット)を=。 結果を返します。 } / ** *サイン署名生成電気の供給 * @Paramコンテンツ内容 * @param keyValueのAPPKEY * @Param文字セットエンコーディング * @throwsにUnsupportedEncodingException、例外 * @Return DataSign署名 * / @SuppressWarnings( "未使用") プライベート文字列の暗号化には、(文字列の内容は、文字列keyValueの、文字列の文字セットが)にUnsupportedEncodingException、例外がスローされます { (keyValueの!= null)の場合 { 戻りBASE64(MD5(コンテンツ+ keyValueの、文字セット)、文字セット)。 } リターンbase64で(MD5(コンテンツ、文字セット)、文字セット)。 } / ** 指定されたURLに送信された* POSTメソッド要求 * @param URL URL送信要求 * @Paramのparamsリクエストパラメータセット その結果に応じて* @Returnリモートリソース * / @SuppressWarnings( "未使用") プライベート文字列sendPost(文字列のURL、マップのparams){ OutputStreamWriterアウト= NULL; = nullの中BufferedReaderの。 StringBuilderの結果=新しいStringBuilderの(); {試します URL RealURLは、新しいURL(URL)を=。 HttpURLConnectionのCONN =(HttpURLConnectionの)realUrl.openConnection(); //次の2行を設定する必要がありますPOSTリクエストを送信します conn.setDoOutput(真の); conn.setDoInput(真の); // POSTメソッド conn.setRequestMethod( "POST"); //設定要求属性共通 conn.setRequestProperty( "* / *"、 "受け入れます"); conn.setRequestProperty(「接続」、「キープアライブ」)。 conn.setRequestProperty(「ユーザーエージェント」、 "(互換; MSIE 6.0; Windows NTの5.1; SV1)のMozilla / 4.0"); conn.setRequestProperty( "のContent-Type"、 "アプリケーション/ x-www-form-urlencodedで")。 conn.connect(); オブジェクトのURLConnectionに対応する出力ストリームを取得します// アウト=新しいのOutputStreamWriter(conn.getOutputStream()、 "UTF-8"); //リクエストパラメータを送ります もし(のparams!= NULL){ StringBuilderのPARAM =新しいStringBuilderの(); 用(のMap.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())。 } //フラッシュバッファリングされた出力ストリーム out.flush(); //入力ストリームをBufferedReaderの定義は、応答のURLを読んで 中=新しいをBufferedReader( 新しいInputStreamReaderの(conn.getInputStream()、 "UTF-8")); 文字列のライン。 しばらく((ライン= in.readLine())!= NULL){ result.append(ライン)。 } }キャッチ(例外e){ e.printStackTrace(); } //使用は最終的に、出力ストリームを閉じるために入力ストリームをブロック 最後に{ {試します もし(アウト!= NULL){ out.close(); } もし(中!= NULL){ )(in.close。 } } キャッチ(IOExceptionを元){ ex.printStackTrace(); } } result.toString()を返します。 } プライベート静的チャー[] base64EncodeChars =新しい文字[] { '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'、 ''、 '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'、 '+'、 '/'}。 公共の静的な文字列base64Encode(バイト[]データ){ StringBufferのSB =新しいStringBufferを(); int型のlen = data.length。 私は0を= int型。 int型B1、B2、B3; {(I <LEN)一方 B1 =データ[I ++]&0xffで、 (I == LEN)の場合 { sb.append(base64EncodeChars [B1 >>> 2])。 sb.append(base64EncodeChars [(B1&を0x3)<< 4])。 sb.append( "=="); ブレーク; } B2 =データ[I ++]&0xffで、 (I == LEN)の場合 { sb.append(base64EncodeChars [B1 >>> 2])。 sb.append(base64EncodeChars [((B1&0×03)<< 4)|((B2&0xF0が)>>> 4)])。 sb.append(base64EncodeChars [(B2&0x0Fの)<< 2])。 sb.append( "=")。 ブレーク; } B3 =データ[I ++]&0xffで、 sb.append(base64EncodeChars [B1 >>> 2])。 sb.append(base64EncodeChars [((B1&0×03)<< 4)|((B2&0xF0が)>>> 4)])。 sb.append(base64EncodeChars [((B2&0x0Fの)<< 2)|((B3&0xc0から)>>> 6)])。 sb.append(base64EncodeChars [B3&0x3fを])。 } リターンsb.toString(); } }