package com.jshop.action.taobao;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;
import java.util.Map.Entry;
public class Util {
private static final char[] DIGITS = { '0', '1', '2', '3', '4', '5', '6',
'7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
//线上
//public final static String APP_KEY = "12449357";
//public final static String APP_SERCET = "57c3ded88c09f1773824748a2db0ae4e";
//public final static String sessionKey="6102223e6dacdb33909aebdb29712cb17794bf72ac4cb38114055901";
public final static String sessionKey="6102b09d22efbd3481806219df761842d275a70f1880ff9114055901";
public final static String APP_KEY = "12448096";
public final static String APP_SERCET = "df0f15160f16773e77df71e59cff48e1";
public final static String URL = "http://gw.api.taobao.com/router/rest";
//public final static String URL="http://gw.api.tbsandbox.com/router/rest";
public final static String logoff_URL="http://container.api.taobao.com/container/logoff";
/**
* 对参数进行MD5
*
* @param params
* 排好序的参数Map
* @param secret
* 应用的密钥
* @return MD5签名字符串
* @throws UnsupportedEncodingException
*/
public static String sign(final TreeMap<String, String> params,
String secret) throws UnsupportedEncodingException {
if (null == params || params.isEmpty()) {
return (String) null;
}
if (isBlank(secret)) {
return (String) null;
}
StringBuilder sb = new StringBuilder();
sb.append(secret);
for (Iterator<Entry<String, String>> it = params.entrySet().iterator(); it
.hasNext();) {
Entry<String, String> entry = it.next();
sb.append(entry.getKey()).append(defaultString(entry.getValue()));
}
sb.append(secret);
byte[] bytes = sb.toString().getBytes("UTF-8");
return md5Hex(bytes).toUpperCase();
}
public static boolean isBlank(String str) {
int strLen;
if (str == null || (strLen = str.length()) == 0) {
return true;
}
for (int i = 0; i < strLen; i++) {
if ((Character.isWhitespace(str.charAt(i)) == false)) {
return false;
}
}
return true;
}
public static String defaultString(String str) {
return str == null ? "" : str;
}
private static String md5Hex(byte[] bytes) {
return new String(encodeHex(getMd5Digest().digest(bytes)));
}
private static MessageDigest getMd5Digest() {
try {
return MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e.getMessage());
}
}
public static char[] encodeHex(byte[] data) {
int l = data.length;
char[] out = new char[l << 1];
// two characters form the hex value.
for (int i = 0, j = 0; i < l; i++) {
out[j++] = DIGITS[(0xF0 & data[i]) >>> 4];
out[j++] = DIGITS[0x0F & data[i]];
}
return out;
}
/**
* 新的md5签名,首尾放secret。
* @param secret 分配给您的APP_SECRET
*/
public static String md5Signature(TreeMap<String, String> params, String secret) {
String result = null;
StringBuffer orgin = getBeforeSign(params, new StringBuffer(secret));
if (orgin == null)
return result;
orgin.append(secret);
try {
MessageDigest md = MessageDigest.getInstance("MD5");
result = byte2hex(md.digest(orgin.toString().getBytes("utf-8")));
} catch (Exception e) {
throw new java.lang.RuntimeException("sign error !");
}
return result;
}
/**
* 二行制转字符串
*/
private static String byte2hex(byte[] b) {
StringBuffer hs = new StringBuffer();
String stmp = "";
for (int n = 0; n < b.length; n++) {
stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
if (stmp.length() == 1)
hs.append("0").append(stmp);
else
hs.append(stmp);
}
return hs.toString().toUpperCase();
}
/**
* 添加参数的封装方法
*/
private static StringBuffer getBeforeSign(TreeMap<String, String> params, StringBuffer orgin) {
if (params == null)
return null;
Map<String, String> treeMap = new TreeMap<String, String>();
treeMap.putAll(params);
Iterator<String> iter = treeMap.keySet().iterator();
while (iter.hasNext()) {
String name = (String) iter.next();
orgin.append(name).append(params.get(name));
}
return orgin;
}
/**连接到TOP服务器并获取数据*/
public static String getResult(String urlStr, String content) {
URL url = null;
HttpURLConnection connection = null;
try {
url = new URL(urlStr);
connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestMethod("POST");
connection.setUseCaches(false);
connection.connect();
DataOutputStream out = new DataOutputStream(connection.getOutputStream());
out.write(content.getBytes("utf-8"));
out.flush();
out.close();
BufferedReader reader =
new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8"));
StringBuffer buffer = new StringBuffer();
String line = "";
while ((line = reader.readLine()) != null) {
buffer.append(line);
}
reader.close();
return buffer.toString();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (connection != null) {
connection.disconnect();
}
}
return null;
}
}