クーリエ単一のクエリAPIインタフェース署名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; 

パブリック クラス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します。

} 

}

 

おすすめ

転載: www.cnblogs.com/51api/p/12556538.html