StringBuilder query = new StringBuilder();
if (Constants.SIGN_METHOD_MD5 . sama dengan (Kaedah tanda)) {
menggunakan menggunakan menggunakan menggunakan menggunakan 's melalui keluar melalui keluar melalui keluar melalui ’ 's'' ‐ hingga ‐‐‐‐‐‐‐ sama (tandaKaedah) nilai)) {
pertanyaan .append(key).append(value);
}
}
}
// Langkah 3: Gunakan penyulitan MD5/HMAC
byte[] bait;
jika (Constants.SIGN_METHOD_HMAC.equals) {
Bytes = encryptHMAC(query.toString(), secret);
} else {
query.append(rahsia);
bait = encryptMD5(query.toString());
}
// Langkah 4: Perduaan ditukar kepada Huruf Besar perenambelasan
return byte2hex(bait);
}
public static byte[] encryptHMAC(String data, String secret) membuang IOException {
byte[] bytes = null;
cuba {
Secret Key secretKey = new SecretKeySpeget (Constants.CHARSET_UTF8), "HmacMD5");
Mac mac = Mac.getInstance(secretKey.getAlgorithm());
mac.init(secretKey);
bait = mac.doFinal(data.getBytes(Con stants .CHARSET) );
} tangkap (GeneralSecurityException gse) {
buang baru IOException(gse.toString());
}
bait pulangan; kembali encryptMD5(data.getBytes( Constants.CHARSET_UTF8));
}
String statik awam byte2hex(byte[] bait) {
StringBuilder sign = new StringBuilder();
untuk (int i = 0; th i = 0; i tes String hex = integer.tohexstring (bytes [i] & 0xff);
if (hex.length () == 1) {
sign.append ("0");
}
sign.append (hex.toupperCase ()) ;
}
return sign.toString();
}
Kod Contoh Tandatangan C#
rentetan statik awam SignTopRequest(IDictionary<string, string> parameters, string secret, string signMethod)
{
// Langkah 1: Isih kamus dalam susunan abjad mengikut Key
IDictionary<string, string< sortedDictions< rentetan, rentetan>(parameter, StringComparer.Ordinal);
IEnumerator<KeyValuePair<rentetan, rentetan>> dem = sortedParams.GetEnumerator();
// Langkah 2: Rentetan semua nama parameter dan nilai parameter query = new StringBuilder ();
if (constants.sign_method_md5.equals (signMethod))
{
{query.append (rahsia);
}
sementara (dem.movenext ())
{
menggunakan menggunakan melalui keluar daripada 's to off ''' out'''''' out‐‐‐‐‐‐‐‐‐‐‐‐‐‐ bersama-sama '1' kepada d'em. Nilai semasa) ;
}
}
// Langkah 3: Gunakan penyulitan MD5/HMAC
bait[] bait;
jika (Constants.SIGN_METHOD_HMAC.Equals(signMethod)(signMethod)(pengkodan MD5/HMAC)
UTHMACMD baru Getcoding Bytes (rahsia));
bait = hmac.ComputeHash(Encoding.UTF8.GetBytes(query.ToString()));
}
bait = Buat();
bait = md5. ToString()));
}
// Langkah 4: Tukar perduaan kepada huruf besar perenambelasan
Hasil StringBuilder = StringBuilder();
untuk (int i = 0; i < bytes.Length; i++)
{
hasil. Tambah(bait[i].ToString("X2"));
hasil.
Contoh panggilan
Ambil taobao.item.seller.dapatkan panggilan sebagai contoh Langkah-langkah khusus adalah seperti berikut:
1. Tetapkan nilai parameter
Parameter awam:
="taoomet. seller.get"
app_key = "12345678"
session = "test"
timestamp = "2016-01-01 12:00:00"
format = "json"
- = "json"
- sign_method = "md5 "
Parameter perniagaan: - medan = "num_iid,title,nick,price,num"
- num_iid = 11223344
fields = "num_iid,title,nick,price,num" format = "json"
method = "taobao.item.seller.get" num_iid = 11223344"- ses
sign_method = "md5 "timestamp = "2016-01-01 12:00:00"v = "2.0"3. Sambungkan nama parameter dan nilai parameter
3. iid, tajuk, nick,price , numformatjsonmethodtaobao.item.seller.getnum_iid11223344sessiontestsign_methodmd5timestamp2016-01-01 12:00:00v2.0
hasil tandatangan ialah: hex (md5( helloworld+splicing in order Nama parameter yang baik dan nilai parameter + helloworld)) = "66987CB115214E59E6EC978214934FB8"
5 Pasang permintaan HTTP
Gunakan nilai utf-8 untuk parameter nama dan parameter encode (nama pesanan semua URL). parameter boleh sewenang-wenangnya, tetapi parameter tandatangan mesti disertakan ), dan kemudian mulakan permintaan melalui GET atau POST (termasuk parameter jenis byte[]), seperti:
http://gw.api.taobao.com /router/rest?method=taobao.item.seller.get&app_key =12345678&session=test×tamp=2016-01-01+12%3A00%3A00&format=json&v=2.0&sign_method=md5&fields=num_iidprice%2C2 3344&tanda= 66987CB115214E59E6 EC978214934FB8
Nota
- Semua pengekodan data permintaan dan tindak balas adalah dalam format UTF-8 Sila URL kodkan semua nama parameter dan nilai parameter dalam URL. Jika Jenis Kandungan permintaan adalah aplikasi/x-www-form-urlencoded, semua nilai parameter dalam Badan HTTP juga dikodkan URL jika ia berada dalam format berbilang bahagian/form-data, nilai parameter setiap medan borang tidak perlu dikodkan tetapi bahagian charset setiap medan borang perlu dinyatakan sebagai utf-8.
- Apabila panjang URL yang dipasang oleh nama parameter dan nilai parameter kurang daripada 1024 aksara, anda boleh menggunakan GET untuk memulakan permintaan apabila jenis parameter mengandungi jenis bait[] atau URL permintaan yang dipasang terlalu panjang, anda mesti menggunakan POST untuk memulakan permintaan. Semua API boleh menggunakan POST untuk memulakan permintaan.
- Jika anda perlu menguji dalam persekitaran kotak pasir, sila dapatkan app_key yang sepadan dengan persekitaran kotak pasir pada halaman pengurusan kotak pasir konsol aplikasi (biasanya app_key bagi persekitaran rasmi didahului dengan "10") dan app_secret, dan nilai sesi yang sepadan juga Keizinan diperoleh dengan log masuk dengan akaun kotak pasir Keizinan persekitaran kotak pasir adalah serupa dengan kebenaran persekitaran formal untuk butiran, sila rujuk pengenalan kebenaran pengguna.
- Menjana tandatangan hanya diperlukan apabila membuat panggilan API tanpa menggunakan SDK rasmi TOP Jika SDK rasmi TOP digunakan, SDK akan melengkapkan langkah ini secara automatik.
Soalan Lazim
Ralat tandatangan "Tandatangan tidak sah" telah dilaporkan semasa memanggil antara muka