手机淘宝api签名(sign)的算法(Java版)
1、自己创建一个utils包,并创建一个类,命名为TaoBao,如下图:
2、在TaoBao这个类里粘贴如下代码:
public static String getSign(String url, String secret) throws Exception {
String[] urls = url.split("&");
return Signing(urls, secret);
}
private static String Signing(String[] urls, String secret) throws Exception {
Map<String, String> params = new HashMap<String, String>();
for (int i = 0; i < urls.length; i++) {
String item[] = urls[i].split("=");
params.put(item[0], item[1]);
}
// 第一步:检查参数是否已经排序
String[] keys = params.keySet().toArray(new String[0]);
Arrays.sort(keys);
// 第二步:把所有参数名和参数值串在一起
StringBuilder strBuilder = new StringBuilder();
for (String key : keys) {
String value = params.get(key);
strBuilder.append(key).append(value);
}
// 第三步:使用MD5/HMAC加密
byte[] bytes = encryptHMAC(strBuilder.toString(), secret);
// 第四步:把二进制转化为大写的十六进制
return byte2hex(bytes);
}
private static byte[] encryptHMAC(String data, String secret) throws IOException {
byte[] bytes = null;
try {
SecretKey secretKey = new SecretKeySpec(secret.getBytes("UTF-8"), "HmacMD5");
Mac mac = Mac.getInstance(secretKey.getAlgorithm());
mac.init(secretKey);
bytes = mac.doFinal(data.getBytes("UTF-8"));
} catch (GeneralSecurityException gse) {
Log.e("TB_ERR", gse.getMessage());
}
return bytes;
}
public static String byte2hex(byte[] bytes) {
StringBuilder sign = new StringBuilder();
for (int i = 0; i < bytes.length; i++) {
String hex = Integer.toHexString(bytes[i] & 0xFF);
if (hex.length() == 1) {
sign.append("0");
}
sign.append(hex.toUpperCase());
}
return sign.toString();
}
3、以上为sign的签名算法,调用方法如下图:
以下附上代码:
private void showSign() {
String words ="要检索的关键字";
String nowTime = sdf.format(new Date());
String params = "timestamp="
+ nowTime
+ "&v=2.0&app_key=这里是你的appkey&method=这里是你调用的api地方法&partner_id=top-sdk-java-20150806&format=json&platform=2&sort=tk_total_commi&q="
+ words
+ "&page_no="
+ (page + 1)
+ "&fields=这里是你要获取的字段内容&sign_method=hmac";
String url = "";
try {
url = urlPath
+ TaoBao.getSign(params, "这里换成你的scret")
+ "×tamp=" + URLEncoder.encode(nowTime, "utf-8")
+ "&v=2.0&app_key=这里是你的appkey&method=这里是你调用的api地方法=hmac&partner_id=top-sdk-java-20150806&format=json&platform=2&sort=tk_total_commi&q="
+ URLEncoder.encode(words, "utf-8")
+ "&page_no=" + (++page)
+ "&fields=这里是你要获取的字段内容";
// 这里对url进行post操作,并获取结果就行了
} catch (Exception e1) {
e1.printStackTrace();
}
}
4、到此步骤已经基本完成api的签名算法了,想要查看运行效果,右击项目,run as -> android application即可在手机端查看效果,如下图