輸入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; パブリック クラスKdniaoTrackQueryAPI { // DEMO パブリック 静的 ボイドメイン(文字列[]引数){ KdniaoTrackQueryAPI API= 新新KdniaoTrackQueryAPI(); 試み{ 文字列の結果 = api.getOrderTracesByJson( "ANE"、 "210 001 633 605" ); のSystem.out.print(結果); } キャッチ(例外E){ e.printStackTrace(); } } // 電気の供給者ID プライベート文字列EBusinessID =は「宅配便の鳥は、公式サイトのアプリケーションhttp://www.kdniao.com/ServiceApply.aspxに行く」; // 、宅配便の鳥を提供し、電気プロバイダの秘密鍵の暗号化に漏れないように世話を プライベート文字列=のAppKey "テスト" ; // URLリクエスト プライベート文字列reqURL = "http://api.kdniao.com/Ebusiness/EbusinessOrderHandle.aspx" ; / ** * JSON方法お問い合わせ注文物流軌道 *@throws 例外 * / パブリック文字getOrderTracesByJson(文字列expCode、列expNo)がスロー例外{ 文字列requestData + expCode + = ": ''、 'ShipperCode' '{ 'OrderCode'" " ' '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 )。 以下のために(INT I 0 =; I <result.length; I ++ ){ int型のval =結果[I]&0xffで、 もし(ヴァル<= 0xFの){ sb.append( "0" )。 } sb.append(Integer.toHexString(ヴァル))。 } を返す。sb.toString()toLowerCaseメソッドを()。 } / ** * base64で编码 * @param strの内容 * @param 文字セット编码方式 * @throwsUnsupportedEncodingException * / プライベート文字列のBASE64(文字列str、文字列の文字セット)がスローにUnsupportedEncodingException { 文字列をエンコード = base64Encode(str.getBytes(文字セット))。 戻り値は、エンコードされました。 } @SuppressWarnings( "未使用" ) プライベート文字列のURLEncoder(文字列str、文字列の文字セット)がスローにUnsupportedEncodingException { 文字列の結果を = URLEncoder.encode(STR、文字セット)。 戻り値の結果; } / ** *电商ログイン签名生成 * @paramのコンテンツ内容 * @paramkeyValueの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 OUT = nullの; でBufferedReaderの = ヌル; StringBuilderの結果 = 新しい新しいのStringBuilder(); 試み{ URL RealURLは = 新しい新しいURL(URL); HttpURLConnectionのコネティカット = (HttpURLConnectionの)realUrl.openConnection(); //POSTリクエストを送信すると、次の2行に設定する必要があります (conn.setDoOutput trueにする); conn.setDoInput(真の); // POSTメソッド conn.setRequestMethod( "POST" ); // 共通の要求属性セット conn.setRequestPropertyを( "同意します"、 "* / *" ); conn.setRequestProperty( "接続"、 "キープアライブ" ); conn.setRequestProperty( "ユーザーエージェント" 、 "Mozillaの/ 4.0(互換; MSIE 6.0; Windows NTの5.1; SV1)" ) ; conn.setRequestProperty( "Content-Typeの"、 "ファイルのアプリケーション/ x-www-form-urlencodedで" ); conn.connect(); // 出力ストリームに対応するURLConnectionオブジェクトを取得し て= 新しいのOutputStreamWriter(conn.getOutputStream()、 "UTF-8" ); // 发送请求参数 場合(!のparams = ヌル){ StringBuilderのPARAM = 新しいStringBuilderの(); 用(のMap.Entry <文字列、文字列> エントリ:params.entrySet()){ 場合(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ライン())= ヌル){ result.append(ライン); } } キャッチ(例外E){ e.printStackTrace(); } // 最後に、出力ストリームをクローズし、入力ストリームブロック使用 ようやく{ 試し{ IF!(OUT = ヌルを){ 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' 、 " '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。 int型私= 0 ; 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。&0x03の)<< 4)| ((B2&0xF0が)>>> 4 )])。 sb.append(base64EncodeChars [((B2&0x0Fの)<< 2)|((B3&0xc0から)>>> 6 )])。 sb.append(base64EncodeChars [B3&0x3fを])。 } を返す)(sb.toStringします。 } }