您尚未登录

登录

您尚未登录

登录

推荐您使用PC浏览器访问

确定
  • 开发者中心
  • >
  • 云游戏
  • >
  • OpenAPI文档
  • >
  • 实例操作管理

文档版本: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 签名生成步骤

  1. 接入方使用如下格式拼接:key:%s,rand:%s,timestamp:%d,expiryInterval:%d,记作tokenRaw。
  2. 接入方将tokenRaw使用md5生成32位摘要信息,记作token。
  3. 接入方将payload描述的内容经过encode编码,传入encoded字段。
  4. 接入方按照下面的格式拼接数据:accessKeyId:%s,encoded:%s,token:%s,记作signRaw。
  5. 接入方将signRaw使用md5生成32位摘要信息,记作sign。
  6. 海马云在验签通过后,会将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格式错误
×

本篇文章对你是否有帮助?

更多建议

请输入您的建议