接口名称
eTitans获取SessionId
接口描述
本接口供第三方系统(如eTitans)通过API Key认证获取有效的SessionId,用于后续的API调用。
接口地址
/api/platform/v1/etitans/session
请求方式
POST
请求头
参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
Content-Type | String | 是 | 固定值:application/json |
Authorization | String | 是 | API Key签名,格式:WallTech accessKey:signature |
X-WallTech-Date | String | 是 | 请求时间,GMT格式,用于签名计算和防重放攻击 |
Authorization头格式说明:
Authorization: WallTech {accessKey}:{signature}
签名生成方法:
1. 构造签名字符串(使用换行符\n分隔):
POST
{X-WallTech-Date}
{signatureUrl}
2. 使用HMAC-SHA1算法计算签名:
signature = Base64(HMAC-SHA1(secretKey, stringToSign))
3. 注意:使用标准Base64编码,服务器会自动处理URL-safe转换
X-WallTech-Date格式示例:
Thu, 19 Mar 2026 11:49:38 GMT
请求参数
请求体(JSON格式):
字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
apikey | String | 是 | API Key(访问密钥) |
String | 是 | 用户邮箱 | |
signatureUrl | String | 是 | 签名用URL,只包含协议和域名 |
参数说明:
- apikey:用于标识调用方身份的访问密钥
- email:用户邮箱地址,用于查找对应的用户账号
- signatureUrl:用于签名计算的URL,仅包含协议和域名部分(如:https://tracking-qa.etowertech.com
)
请求示例
curl -X POST 'https://tracking-qa.etowertech.com/api/platform/v1/etitans/session' \
-H 'Content-Type: application/json' \
-H 'Authorization: WallTech pcljARV_Hka2YfpTyHr7qL:tXIUW0X7BpWl-P8S-AXPZKtKWX8=' \
-H 'X-WallTech-Date: Thu, 19 Mar 2026 11:49:38 GMT' \
-d '{
"apikey": "pcljARV_Hka2YfpTyHr7qL",
"email": "757418128@qq.com",
"signatureUrl": "https://tracking-qa.etowertech.com"
}'
Python签名生成示例:
import base64
import hmac
import hashlib
from datetime import datetime
ACCESS_KEY = "your_access_key"
SECRET_KEY = "your_secret_key"
EMAIL = "your_email@example.com"
SIGNATURE_URL = "https://tracking-qa.etowertech.com"
# 生成GMT时间
gmt_date = datetime.utcnow().strftime('%a, %d %b %Y %H:%M:%S GMT')
# 构造签名字符串
method = "POST"
string_to_sign = f"{method}\n{gmt_date}\n{SIGNATURE_URL}"
# 计算HMAC-SHA1签名
signature = base64.b64encode(
hmac.new(SECRET_KEY.encode(), string_to_sign.encode(), hashlib.sha1).digest()
).decode()
# 构造Authorization头
authorization = f"WallTech {ACCESS_KEY}:{signature}"
print(f"X-WallTech-Date: {gmt_date}")
print(f"Authorization: {authorization}")
返回示例
{
"success": true,
"code": "0",
"message": "success",
"data": {
"sessionId": "MuETuXqSzpU_QQFiSD-dbQ"
}
}
失败示例:
{
"success": false,
"code": "401",
"message": "签名验证失败",
"data": null
}
返回字段说明
字段 | 类型 | 说明 |
|---|---|---|
success | Boolean | 请求是否成功 |
code | String | 响应状态码,"0"表示成功 |
message | String | 响应消息 |
data | Object | 会话信息对象,成功时返回 |
data 字段说明
data 返回的是 会话信息对象。
字段 | 类型 | 说明 |
|---|---|---|
sessionId | String | 会话ID,用于后续API调用的身份验证 |
userId | Number | 用户ID |
tenantId | Number | 租户ID |
String | 用户邮箱 | |
expiresIn | Number | 会话过期时间(秒),表示距离过期还有多少秒 |
expireTime | Number | 会话过期时间戳(毫秒) |
错误码说明
错误码 | 说明 |
|---|---|
401 | 签名验证失败 |
401 | API Key无效或已被禁用 |
401 | 用户不存在或已被禁用 |
400 | 请求参数缺失或格式错误 |
400 | 时间戳格式错误 |
400 | 请求时间戳无效(超出15分钟容差) |
注意事项
1. 时间同步:客户端服务器时间必须与服务器时间保持同步,允许误差范围为15分钟
2. 签名计算:签名必须使用正确的secretKey,且签名字符串格式必须严格按照示例
3. 密钥安全:secretKey必须妥善保管,不应暴露给第三方
4. 会话复用:如果用户已有有效的SessionId,系统会复用现有会话而不是创建新会话
5. URL格式:signatureUrl只包含协议和域名,不包含路径,例如:https://tracking-qa.etowertech.com![]()
6. 签名时效性:生成的签名应在生成后尽快使用,避免因时间差导致验证失败