文档版本:20220218-100
变更历史:
API版本 | 发版日期 | 更新内容 |
---|---|---|
V1.0 | 2022-1-13 | 首次发版 |
1 实例释放简介
海马云根据接入方传入的accessKeyId、cid、reason参数,将对应的实例进行释放操作。
2 签名算法
2.1 签名算法说明
海马云API会对每个请求进行身份验证,用户需要使用安全凭证,经过特定的步骤对请求进行签名(Signature),每个请求都需要在公共参数中指定该签名结果并以指定的方式和格式发送请求。签名通过以下方式帮助保护请求:
- 验证请求者的身份。
签名确保请求是由持有有效访问密钥的人发送的。请项目对接人员获取密钥相关信息。 - 保护传输中的数据。
为了防止请求在传输过程中被篡改,海马云API会使用请求参数来计算请求的base64编码,并将生成的base64编码加密后作为请求的一部分,发送到海马云API服务器。服务器会使用收到的请求参数以同样的过程计算base64编码,并验证请求中的base64编码。如果请求被篡改,将导致base64编码不一致,海马云API将拒绝本次请求。
2.2 签名生成步骤
- 接入方使用如下格式拼接:key:%s,rand:%s,timestamp:%d,expiryInterval:%d,记作tokenRaw。
- 接入方将tokenRaw使用md5生成32位摘要信息,记作token。
- 接入方将payload描述的内容经过encode编码,传入encoded字段。
- 接入方按照下面的格式拼接数据:accessKeyId:%s,encoded:%s,token:%s,记作signRaw。
- 接入方将signRaw使用md5生成32位摘要信息,记作sign。
- 海马云在验签通过后,会将encode数据经过base64解码后还原到payload字段中。
⚠注意:
接入方不通过payload传数据,payload由海马云经过base64解码后还原。
表2-1 签名算法参数说明
参数 | 类型 | 必填项 | 说明 |
---|---|---|---|
key | String | 是 | 使用提供给接入方的apiToken |
rand | String | 是 | 接入方随机生成的字符串,32位 |
timestamp | Long | 是 | 请求时间戳,当时间戳与服务端时间戳偏移大时会导致校验失败,单位为ms |
expiryInterval | Long | 是 | token有效期,单位为s,建议定义为180s以上,避免服务器时间差导致验签失败 |
2.3 签名示例
为了更清楚地解释签名过程,下面以实际python编程为例,将上述的签名过程具体实现。代码只为解释签名过程,并不具备通用性。
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import base64
import hashlib
import json
import time
t = time.time()
timestamp = (int(round(t * 1000))) # 毫秒级时间
def generate_sign(accessKeyId, apiToken, payload, expiry_interval=1000000):
m = hashlib.md5()
# 步骤1
original_token_str = 'key:%s,rand:%s,timestamp:%d,expiryInterval:%d' % (apiToken, '1', timestamp, expiry_interval)
# 步骤2
m.update(original_token_str.encode('utf-8'))
str_md5 = m.hexdigest()
# 步骤3
str_payload = json.dumps(payload, separators=(',', ":"))
base64_payload = base64.encodebytes(str_payload.rstrip('\n').encode())
decode = base64_payload.decode('utf-8')
# 步骤4
original_sign_str = 'accessKeyId:%s,encoded:%s,token:%s' % (accessKeyId, decode, str_md5)
# 步骤5
n = hashlib.md5()
n.update(original_sign_str.encode('utf-8'))
return n.hexdigest()
3 实例释放接口
3.1 请求信息
表3-1 请求信息说明
请求信息内容 | 说明 |
---|---|
URL | https://hcapi.haimawan.com/api/releaseInstance |
Method | POST |
Content-Type | application/json |
Accept | application/json |
表3-2 请求参数说明
参数 | 类型 | 必填项 | 说明 |
---|---|---|---|
accessKeyId | String | 是 | 由海马云提供给接入方的唯一标识 |
encoded | String | 是 | payload参数base64编码后的字符串 |
expiryInterval | Long | 是 | token有效期,单位为s |
rand | String | 是 | 接入方随机生成的字符串 |
sign | String | 是 | 请参见签名算法 |
timestamp | Long | 是 | 请求时间戳,当时间戳与服务端时间戳偏移大时会导致校验失败,单位毫秒 |
payload | Object | 否 | 请参见ReleaseInstancePayload结构说明,接入方无需上传该字段,海马云会由encoded字段base64解码后获得具体数据 |
请求参数(payload)示例:
{
"cid": 100000,
"reason": "888888"
}
表3-3 ReleaseInstancePayload结构说明
参数 | 类型 | 必填项 | 说明 |
---|---|---|---|
cid | Long | 是 | 用户使用云游戏服务的唯一标识 |
reason | String | 否 | 用户退出云游戏原因,用于透传给客户端,可为空或6位数字 |
3.2 响应信息
响应信息示例:
{
"code": 0
}
表3-4 响应参数说明
参数 | 类型 | 必填项 | 说明 |
---|---|---|---|
code | Integer | 是 | 请求处理结果。 0:请求成功 1:请求失败 |
errorCode | String | 否 | 具体错误码,详情请参见错误码 |
errorMsg | String | 否 | 错误码对应的错误描述信息 |
4 错误码
错误码 | 描述 |
---|---|
400000000 | 系统错误 |
400000001 | 请求参数非法 |
400000002 | 非法请求 |
400000003 | 系统维护中,请稍后再试 |
400001001 | 请求参数签约验证失败 |
400001002 | 超过最大请求处理时间 |
400001003 | 请求参数不能为空 |
400001004 | 请求参数集合不能为空 |
400001005 | 请求参数最小值验证失败 |
400001006 | 请求参数最大值验证失败 |
400001007 | accessKeyId不存在 |
400001013 | 操作过于频繁,请稍后再试 |
400801001 | 实例释放处理失败 |
400801002 | 实例释放参数为空 |
400801003 | 根据cid没有查询到对应的实例信息 |
400801004 | 该cid不属于当前accessKeyId |
400801005 | reason格式错误 |