手机淘宝api签名(sign)的算法(Java版)

2025-10-20 04:10:45

1、自己创建一个utils包,并创建一个类,命名为TaoBao,如下图:

手机淘宝api签名(sign)的算法(Java版)

手机淘宝api签名(sign)的算法(Java版)

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();

}

手机淘宝api签名(sign)的算法(Java版)

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")

+ "&timestamp=" + 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();

}

}

手机淘宝api签名(sign)的算法(Java版)

4、到此步骤已经基本完成api的签名算法了,想要查看运行效果,右击项目,run as -> android application即可在手机端查看效果,如下图

手机淘宝api签名(sign)的算法(Java版)

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢