平台请求签名说明
1. 开发者接入信息
参数(示例):
- app_key:
12945374 - app_secret:
Sf9c02D3vfV5AK2K4H2avUZng3p7Q039 - RSA私钥:
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDpakoH2f+ys7Re
wHvQXw+fWbKdFiNKz58P8F1aNWUItvjsWt59r0O7Vt26YVYz6k+ZeD50Vslyz+5V
ZlsPL5E9Nc3NPy6u00tmBYzwcYcYD0klBAsDeUQUqkkwGL7lHaLGQV5p3fCjDMkH
nYmCNWSlO34BUJK4JNZ8Jy5f/1cqD31/KiWMssxXZWP7VRayl7Vx8aznIcbl77Ut
NEBC9HoylDoyJDl/FZWw3HmEXVfVO2pc6YrxHE3XQbHO/DFNa44VhDF4ZQ0Sct3/
jmsI0p4/xvf6gbZOt11RNaFRANeqeJWE/si+BLpe9tK/Ms2DWeuiTnmZ99zGQsqV
TSYtLM2TAgMBAAECggEBAOFw2WPP+BlfW/yQKIXO6sXb2pnCQgAFm/nHDEMOgzDx
mGagNXhrCR4t/iX/0UR/MLZn3tp64ELV9bniDF0UclEOYGG2fp44UgCNp9yrqfFh
AiKQTxrhyxGyjtG3dNjR0N9vT4Ms6zhwJtIGJEPw0e6NEVyvt6XHXqm3JiFt+4AQ
cc9PDG6f60lORUTtlX9o3CjyJZ2Gzrl1XBfdBq0wLM2GBYa8bEaBHfEqRjEJ3UVZ
sVAOc9oYrAJaKFow80IwpwppOgxVw7zHE047egXaUypJfjFK6ORTREVvGPCsTB2t
wKO7+4E9i+Il0PyWijZio4gOyIpcSREfxYSnzbwxoJECgYEA9aj9a/9K8HfB+byc
KM8jRkJQ0Lkg1jNoZcytT0YbchDCtwq+J/dHMb8LpvEU+hgjV7KoJoJi0CO9y+A9
Cg7GFD5iOUEAm/3262sPdoBp7gN80uiCXN0f4kk5WySQztaVaW3J5QXzaeamZs9k
dMm/pe5ElhJ/F60mPeijx/TTmD0CgYEA8z1b7G6HlU14BEYSUvggzodTNtLAyZyR
PJs0zmhTyUiwgY6vDpk/eh9rR4I5LJ53WvqwzoezT5EtjFcqthZCf1H5nPP9YgyJ
qmxhepcILYDKVTxH5XqRztf9UOiC+Z74s//cKtq5O0+lL9X9HtSNAdHkkKOwogku
cn9kSezuig8CgYAlrOQo4v9YP9Wk+nMsow/y34rLaAkMMNgq/Kf7x3HAHafvMJuX
P4pQq88arFCeRoNtGL5HIaoL599c3CggWcGxKxwfUcPJKLrswf+eGfWlBi3nnrcX
jOYt6zL7snDu9+P0Rl03XaFGNZSBof7zFlnpFdC4/180f16lEf/EU9z7tQKBgQDg
oVrCBvUpWaircba8bq+Fa43axFkMF449BSyILeqqqXlvvEBIYBgyBNAC8u0wGowp
NfiQUtuycGU7BMjJ7datVBwL6Xunz+JWw85l8xK3SwgQHSJcd4wuFGO5E3DZbAlL
2c8OuH11m8D2Y01l6m7qLldBiBm4GniNfr40Ux2b2wKBgGxItFGO5ziUPNJrqr41
CFoRlnx9lD51CzMFFoQ6pd5JoVyrI7VLxtCSiuS4ZNuOLuB1iX9vz2YNoy3MTDPs
D105NfH4zdpd7ajdf7QCkIMkiyf+ylDZkI7muG39MLAinAdW4b0Y9TV5JmteVfUL
NtsYUEuU8xAOY3K6QxSdxr6c
-----END PRIVATE KEY-----2.获取接口凭据(accessToken)
接口调用唯一凭据,通过HTTP请求头(accessToken)传参。
调用方式(HTTPS)
text
请求方式: POST
接口路径: /platform/auth/token
参数(x-www-form-urlencoded):
app_key: 12945374
app_secret: Sf9c02D3vfV5AK2K4H2avUZng3p7Q039
返回示例(accessToken和有效期时间):
{
"code": 0,
"msg": "success",
"data": {
"accessToken": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJjaGFubmVsIjo0LCJpc3MiOiJ0bWFpY2UubG9jYWxob3N0IiwiYXVkIjoidG1haWNlLmxvY2FsaG9zdCIsImlhdCI6MTc3NzI2MzcwNCwibmJmIjoxNzc3MjYzNzA0LCJleHAiOjE3NzczMDY5MDQsImp0aSI6eyJpZCI6MSwidHlwZSI6InBsYXRmb3JtX2RldmVsb3BlciIsImV4cCI6NDMyMDB9fQ.aT12NXp6cu-s5sF1rcDK4VXnrpHHWqKWgNde3Vuqg-E",
"expire": 43200
}
}3. 签名说明
3.1 固定格式
签名串一共 5 行,每行末尾都要 \n(最后一行也必须有):
text
HTTP请求方法\n
URL\n
请求时间戳\n
请求随机串\n
请求报文主体\n3.2 参数说明
- HTTP请求方法:必须大写
- URL:必须是去掉域名后的路径。如果含Query参数,拼接?参数1=值&参数2=值&...
- 请求时间戳:HTTP请求头timestamp一致
- 请求随机串:HTTP请求头nonce一致
- 请求报文主体:如果body参数存在,必须是 JSON 格式。如果请求体为空,第五行就是一个空串 +
\n。
3.3 签名算法
使用 SHA256 with RSA,使用 RSA私钥 对签名串签名后再进行 Base64 编码。
4. HTTP请求头统一结构
text
accessToken: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJjaGFubmVsIjo0LCJpc3MiOiJ0bWFpY2UubG9jYWxob3N0IiwiYXVkIjoidG1haWNlLmxvY2FsaG9zdCIsImlhdCI6MTc3NzI2MzcwNCwibmJmIjoxNzc3MjYzNzA0LCJleHAiOjE3NzczMDY5MDQsImp0aSI6eyJpZCI6MSwidHlwZSI6InBsYXRmb3JtX2RldmVsb3BlciIsImV4cCI6NDMyMDB9fQ.aT12NXp6cu-s5sF1rcDK4VXnrpHHWqKWgNde3Vuqg-E
appKey: 12945374
nonce: jxzf09xneu1e46iy
timestamp: 1777263701
signature: xxx字段说明:
accessToken:接口调用凭据appKey:开发者app_keynonce:随机字符串(16位)timestamp:时间戳(10位)signature:签名值
5. 获取用户凭据(userToken)
用户调用唯一凭据,通过HTTP请求头(userToken)传参。
调用方式(HTTPS)
text
请求方式: POST
接口路径: /platform/user/login
参数(x-www-form-urlencoded):
account: admin@tmaice.com
password: *****
返回示例(userToken、账号、昵称和手机号码):
{
"code": 0,
"msg": "success",
"data": {
"account": "user_api_123456",
"nickname": "",
"mobile": "13654786432",
"userToken": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJjaGFubmVsIjo0LCJpc3MiOiJ0bWFpY2UubG9jYWxob3N0IiwiYXVkIjoidG1haWNlLmxvY2FsaG9zdCIsImlhdCI6MTc3NzI3MDM3MywibmJmIjoxNzc3MjcwMzczLCJleHAiOjE3NzczMTM1NzMsImp0aSI6eyJpZCI6MSwidHlwZSI6InBsYXRmb3JtX3VzZXIiLCJleHAiOjQzMjAwfX0.fIGJhQx3nLWTwawf2Y2tG1y1bHG_WjOFYsNkIkAD4QI"
}
}6. 参数类型的请求示例
6.1 Body 参数签名(POST/DELETE/PUT)
接口
更新用户昵称:POST /platform/user/updateNickname
请求体(x-www-form-urlencoded)
nickname: new_nickname签名串
原始签名串:
text
POST\n
/platform/user/updateNickname\n
1777265679\n
L8X4GRJ2wcMg7P15\n
{"nickname":"new_nickname"}\n示例签名:
text
w0gTdB0ze5WL0svUUkbUeUtxqu4UuSAjD78OgQ80WvisYry63wVPimGELU/nEVNxNkRuUAyLBYuvEynCLRPQzqJRNe1B/uVv3rWnxREN2N9Kr0ADY9icgJJO/fdwF968wjVcqwtGUK/w4+mw7x2kM6ARlEOM6sD4Kln3xDGEb2la7ulG8y9DbGT+zVVdStnanV2+wKA64y7ZG5NU4zPULecIke6qoBuGzTJa+1cIDkag/N0bmLOlPwndqkAlSPaebWPgzCDDxxh7XFQQJW9NDsgoqa1q61DJA9nNeOhzZQYgOBbrbIR+RibjGsLeAaae/7ioXYqZmW87hbmrvWDcpw==完整请求示例
bash
请求路径:/platform/user/updateNickname
请求方式:POST
请求体(x-www-form-urlencoded):
nickname: new_nickname
请求头(HTTP):
accessToken: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJjaGFubmVsIjo0LCJpc3MiOiJ0bWFpY2UubG9jYWxob3N0IiwiYXVkIjoidG1haWNlLmxvY2FsaG9zdCIsImlhdCI6MTc3NzI2MzcwNCwibmJmIjoxNzc3MjYzNzA0LCJleHAiOjE3NzczMDY5MDQsImp0aSI6eyJpZCI6MSwidHlwZSI6InBsYXRmb3JtX2RldmVsb3BlciIsImV4cCI6NDMyMDB9fQ.aT12NXp6cu-s5sF1rcDK4VXnrpHHWqKWgNde3Vuqg-E
userToken: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJjaGFubmVsIjo0LCJpc3MiOiJ0bWFpY2UubG9jYWxob3N0IiwiYXVkIjoidG1haWNlLmxvY2FsaG9zdCIsImlhdCI6MTc3NzI3MDM3MywibmJmIjoxNzc3MjcwMzczLCJleHAiOjE3NzczMTM1NzMsImp0aSI6eyJpZCI6MSwidHlwZSI6InBsYXRmb3JtX3VzZXIiLCJleHAiOjQzMjAwfX0.fIGJhQx3nLWTwawf2Y2tG1y1bHG_WjOFYsNkIkAD4QI
appKey: 12945374
nonce: L8X4GRJ2wcMg7P15
timestamp: 1777265679
signature: w0gTdB0ze5WL0svUUkbUeUtxqu4UuSAjD78OgQ80WvisYry63wVPimGELU/nEVNxNkRuUAyLBYuvEynCLRPQzqJRNe1B/uVv3rWnxREN2N9Kr0ADY9icgJJO/fdwF968wjVcqwtGUK/w4+mw7x2kM6ARlEOM6sD4Kln3xDGEb2la7ulG8y9DbGT+zVVdStnanV2+wKA64y7ZG5NU4zPULecIke6qoBuGzTJa+1cIDkag/N0bmLOlPwndqkAlSPaebWPgzCDDxxh7XFQQJW9NDsgoqa1q61DJA9nNeOhzZQYgOBbrbIR+RibjGsLeAaae/7ioXYqZmW87hbmrvWDcpw==6.2 Query 参数签名(GET)
场景
查询文章详情:GET /platform/article/detail
请求参数(params)
id:120签名串
原始签名串:
text
GET\n
/platform/article/detail?id=120\n
1777267966\n
iADJWShrEKFno87e\n
\n示例签名:
text
yx9dN8BtJuz2o4mdS1fkTvNUxs6oZOjki/nyLEqxjNkLyZiqNx/U05tO9hwtp5rTt5LLSi+4ep3jzubdYVhX5Uw9pGmjIpPQ3ARPFFLY8fkjjaoQ9dQbukvGq1twRVIq6Nm4hnLv7LcoAqtRmz80GjswhodE+yPOASlSKQXKOxENn2OXjXgdpZ1Wgi/JeUZoTJ08HxJZdW23BqjJLD/HbbwL/R85ccwqnPhnGuQhjDDMNrB2R3il+ModBZRP1nkIM1B6m3yD1Rx2tELuhZYNUpMqbJTgnZOM6oFM2jst4+oCy4mc8e31Yk0sADdY/V2s1hhXPO/+WcCdC5aWL6H2Lw==完整请求示例
bash
请求路径:/platform/article/detail
请求方式:GET
请求参数(params):
id:120
请求头(HTTP):
accessToken: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJjaGFubmVsIjo0LCJpc3MiOiJ0bWFpY2UubG9jYWxob3N0IiwiYXVkIjoidG1haWNlLmxvY2FsaG9zdCIsImlhdCI6MTc3NzI2MzcwNCwibmJmIjoxNzc3MjYzNzA0LCJleHAiOjE3NzczMDY5MDQsImp0aSI6eyJpZCI6MSwidHlwZSI6InBsYXRmb3JtX2RldmVsb3BlciIsImV4cCI6NDMyMDB9fQ.aT12NXp6cu-s5sF1rcDK4VXnrpHHWqKWgNde3Vuqg-E
appKey: 12945374
nonce: iADJWShrEKFno87e
timestamp: 1777267966
signature: yx9dN8BtJuz2o4mdS1fkTvNUxs6oZOjki/nyLEqxjNkLyZiqNx/U05tO9hwtp5rTt5LLSi+4ep3jzubdYVhX5Uw9pGmjIpPQ3ARPFFLY8fkjjaoQ9dQbukvGq1twRVIq6Nm4hnLv7LcoAqtRmz80GjswhodE+yPOASlSKQXKOxENn2OXjXgdpZ1Wgi/JeUZoTJ08HxJZdW23BqjJLD/HbbwL/R85ccwqnPhnGuQhjDDMNrB2R3il+ModBZRP1nkIM1B6m3yD1Rx2tELuhZYNUpMqbJTgnZOM6oFM2jst4+oCy4mc8e31Yk0sADdY/V2s1hhXPO/+WcCdC5aWL6H2Lw==