# 兑换API文档

# 1. 如何获取API Key

  用户登录收银台 -> 开发者中心 -> API Key -> 创建API key。API Key 都有单独的配置页,并绑定固定的 IP 地址(“0.0.0.0”表示不做 IP 拦截过滤,任何IP都可以访问),可配置不同的 API Key 满足不同的需求。请不要泄露您的 Access Key 及 Secret Key,以免造成资产损失。Secret Key 生成后将无法再次查看,请注意及时保存,如您忘记了 Secret Key,请在商户后台回收该密钥对并申请新的密钥对。

# 1.1 如何创建API KEY

• 点击开发者中心-API Key

• 1选择是否开启调试模式 ( 开启调试模式后,你有任何错误会有规范的提示信息和日志查看地址 )

• 2选择API Key权限

• 3输入白名单地址 (0.0.0.0 表示任意IP地址可以访问)

注:( 输⼊⽩名单域名时应注意多个IP时用","隔离。)

• 4点击创建,可⽣成API KEY

(⽣成API KEY后可以在下⽅我的API KEY列表进⾏复制、查看、编辑和删除等操作,注意Secret key只在生成的时候出现一次,请妥善保存,如您忘记了Secret Key,请回收该密钥对并申请新的密钥对。)

• 点击编辑可关闭或开启【开始调试】及修改API Key权限和白名单地址,修改完成后点击保存即可

注意:创建或编辑API Key之后请耐心等待90秒API Key生效

# 2. 如何使用API Key

当前API Key是在请求的Header中添加参数列表

参数名 参数说明 类型 是否必须
access_key Api Key 访问密钥 (如:TPhoa7ZQ) String
timestamp 毫秒级时间戳(13位 如:1679669488472) String
nonce UUID(36位 如:02f7a04f-53cc-47d4-bb3f-fae69dab49ac) 五个部分分别为8个字符、4个字符、4个字符、4个字符、12个字符,中间用“-”号间隔 String
sign 参数签名 (如:GXx2wYUD6UVr+zcmeCSFFPzcBLA=) String

# 3. 技术侧参数接入流程

# 4. 如何接口签名

# 签名说明

  API 请求在通过 internet 传输的过程中极有可能被篡改,为了确保请求未被更改,除公共接口(基础信息,行情数据等)外的私有接口均必须使用您的 API Key 做签名认证,以校验参数或参数值在传输途中是否发生了更改。

一个合法的请求由以下几部分组成:

  • access_key: API 访问密钥;
  • secret_key: 签名加密所使用的密钥(仅在后台申请 API Key 时可见一次,请复制保存在安全处,不可泄露);
  • timestamp: 您发出请求的时间 (UTC 时间) 。如:1632811287325(13位)。在查询请求中包含此值有助于防止第三方截取您的请求;
  • nonce: 随机 UUID 字符串。如:053a1b81-48a0-4bb1-96b2-60f6e509d911(36位);
  • sign: 签名计算得出的值,用于确保签名有效和未被篡改;
  • 所有接口都需要在http请求头 (header) 中传递以上除 secret_key 外的几个公共参数,公共参数包含(access_key ,timestamp,nonce,sign)其他涉及到签名参数以API接口说明为准 。

# 签名步骤

​ 1.定义一个 Map 字典类型对象,将请求中的参数以 key-value 的形式放入其中

​ 2.将 access_key、timestamp、nonce 也放入第一步定义的 Map 中

​ 3.将 Map 里面的属性按照 ASCII 码从小到大做升序排序(字典序)并将 Map 转换输出为“key1=value1&key2=value2” 形式的字符串

​ 4.将上一步转换的字符串用 secret_key 进行 HMAC_SHA1 加密并进行 Base64 转码,得到 sign 参数值。secret_key 是在收银平台创建的 apikey 中的信息

​ 5.将 sign 值和其他所需参数加到请求头 header 中,发送请求目标接口

# 签名调试工具

  • SignUtil: 用户登录收银台 -> 开发者中心 -> API 文档 -> 签名工具 打开签名工具页面 (工具中的access_key请使用有效的access_key 并且请设置允许这个access_key访问的IP白名单为 0.0.0.0,我们强烈推荐使用过的access_key调试完成后废弃)

# 5. 接口列表

# 5.1 测试接口连通性

请求方式

Get

请求URL

/ping

响应数据

{"version":"1.0.1","timestamp":1688116827306}

响应参数说明

Param Type Desc
version String 返回该参数则本文档中所有接口都可正常请求
timestamp int64 Unix时间戳

# 5.2 法币兑换加密

请求方式

Post

请求URL

/api/v3/exchange/fiat/to/wallet

请求类型

Header: { 'Content-Type': 'application/json;charset=utf-8'}

请求头

Param Desc Sample
access_key 商户后台获取 pFqV75X3
timestamp Unix时间戳13位 毫秒 1679724896223
nonce UUID V4 794c26b0-d33c-4394-b2bb-c485eca16d9e
sign 计算出来的签名 kAXyh+eerqrefyaF8dyFB0M4FVo=

请求参数

{
	"addressTo": "0x0CBFD17AE9E1d6D881b2CAde71277f48aBf64D24",
	"chainType": "ETH",
	"tokenType": "USDT",
	"currencyAmount": 1,
	"currencyType": "BRL",
	"externalOrderId": "469170783478455217",
	"remark": "123"
}

请求参数说明

Param Desc Require
addressTo 收款地址(String) required
chainType 主链类型(String)oneof=ETH TRON BSC required
tokenType 代币类型 oneof=USDT(String) required
currencyAmount 法币金额不能小于1(String) required
currencyType 法币类型oneof=BRL MXN(String) required
externalOrderId 商户订单ID(String) required
remark 备注 max=255(String) optional

响应类型

Header: { 'Content-Type': 'application/json;charset=utf-8'}

响应数据

{
	"code": "200",
	"success": true,
	"msg": "成功",
	"msgEn": "SUCCESS",
	"data": {
		"orderId": "OCURREXCH202307180805431689667543340DOCKER020000000200000250",
		"symbolType": "CURRENCY TO TOKEN",
		"externalOrderId": "469170783478455217",
		"currencyType": "BRL",
		"tokenType": null,
		"chainType": "ETH",
		"currencyAmount": 1,
		"tokenAmount": 0.145985
	}
}

响应参数说明

Param Type Desc
orderId String 订单ID
symbolType String 基准类型
externalOrderId String 商户订单ID
currencyType String 法币类型
tokenType String 代币类型
chainType String 主链类型
currencyAmount int64 法币金额
tokenAmount float64 代币金额

# 5.3 查询法币兑换加密订单

请求方式

Post

请求URL

/api/v3/exchange/query/exchange/orderinfo

请求类型

Header: { 'Content-Type': 'application/json;charset=utf-8'}

请求头

Param Desc Sample
access_key 商户后台获取 pFqV75X3
timestamp Unix时间戳13位 毫秒 1679724896223
nonce UUID V4 794c26b0-d33c-4394-b2bb-c485eca16d9e
sign 计算出来的签名 kAXyh+eerqrefyaF8dyFB0M4FVo=

请求参数

{
	"externalOrderId": "469170783478455217",
	"orderId": "OCURREXCH202307180805431689667543340DOCKER020000000200000250"
}

请求参数说明

Param Desc Require
externalOrderId 商户订单号 max=64(String) required
orderId 订单ID(String) required

响应类型

Header: { 'Content-Type': 'application/json;charset=utf-8'}

响应数据

{
	"code": "200",
	"success": true,
	"msg": "成功",
	"msgEn": "SUCCESS",
	"data": {
		"tokenAmount": "0.145985",
		"currencyAmount": "1.00",
		"orderAmount": "1",
		"orderActualAmount": null,
		"orderFee": null,
		"orderPayTime": null,
		"orderCompleteTime": null,
		"currencyType": "BRL",
		"tokenType": "USDT",
		"chainType": "ETH",
		"exSymbolType": "CURRENCY TO TOKEN",
		"exchangeRate": "6.85",
		"addressTo": "0x0CBFD17AE9E1d6D881b2CAde71277f48aBf64D24",
		"remark": "123",
		"tradeHash": "",
		"errorMsg": null,
		"errorMsgEn": null,
		"orderId": "OCURREXCH202307180805431689667543340DOCKER020000000200000250",
		"externalOrderId": "469170783478455217",
		"orderStatus": 2
	}
}

响应参数说明

Param Type Desc
tokenAmount String 代币金额
currencyAmount String 法币金额
orderAmount String 订单金额
orderActualAmount float64 订单实际金额
orderFee String 订单手续费
orderPayTime int64 订单支付时间
orderCompleteTime int64 订单完成时间
currencyType String 法币类型
tokenType String 代币类型
chainType String 主链类型
exSymbolType String 基准类型
exchangeRate String 订单生成时汇率
addressTo String 收款地址
remark String 备注
tradeHash String 交易hash
errorMsg String 错误信息
errorMsgEn String 错误信息en
orderId String 订单ID
externalOrderId String 商户订单ID
orderStatus int64 订单状态1-等待支付法币
2-收到法币
4-待收加密货币
8-兑换已完成
32-兑换失败

# 5.4 加密兑换法币

请求方式

Post

请求URL

/api/v3/exchange/wallet/to/fiat

请求类型

Header: { 'Content-Type': 'application/json;charset=utf-8'}

请求头

Param Desc Sample
access_key 商户后台获取 pFqV75X3
timestamp Unix时间戳13位 毫秒 1679724896223
nonce UUID V4 794c26b0-d33c-4394-b2bb-c485eca16d9e
sign 计算出来的签名 kAXyh+eerqrefyaF8dyFB0M4FVo=

请求参数

{
	"tokenAmount": 1010,
	"chainType": "TRON",
	"addressFrom": "TBoG3wMvQhFUYQdcrHF6M3s7TKNHvCdW4w",
	"currencyType": "BRL",
	"tokenType": "USDT",
	"externalOrderId": "2564895864",
	"notifyUrl": "",
	"remark": "TEST"
}

请求参数说明

Param Desc Require
tokenAmount 代币金额(String) required
chainType 主链类型 oneof=TRON(String) required
addressFrom 出款地址(String) required
currencyType 法币类型 oneof=BRL(String) required
tokenType 代币类型 oneof=USDT(String) required
externalOrderId 商户订单ID(String) optional
notifyUrl 通知地址(String) optional
remark 备注(String) optional

响应类型

Header: { 'Content-Type': 'application/json;charset=utf-8'}

响应数据

{
	"code": "200",
	"success": true,
	"msg": "成功",
	"msgEn": "SUCCESS",
	"data": {
		"orderId": "OCRYPEXCH202310090612161696831936686DEV001OO0000000200000250",
		"symbolType": "TOKEN TO CURRENCY",
		"externalOrderId": "11705714",
		"currencyType": "BRL",
		"tokenType": "USDT",
		"chainType": "TRON",
		"currencyAmount": 5171.2,
		"tokenAmount": 1010,
		"addressTo": "TNZEyuAhvDX1YoHpGPVzD5gBqK7e56tbF5"
	}
}

响应参数说明

Param Type Desc
orderId String 订单ID
symbolType String 基准类型
externalOrderId String 商户订单ID
currencyType String 法币类型
tokenType String 代币类型
chainType String 主链类型
currencyAmount int64 法币金额
tokenAmount float64 代币金额
addressTo String 收款地址

# 5.5 查询加密兑换法币订单

请求方式

Post

请求URL

/api/v3/exchange/query/wallet/exchange/orderinfo

请求类型

Header: { 'Content-Type': 'application/json;charset=utf-8'}

请求头

Param Desc Sample
access_key 商户后台获取 pFqV75X3
timestamp Unix时间戳13位 毫秒 1679724896223
nonce UUID V4 794c26b0-d33c-4394-b2bb-c485eca16d9e
sign 计算出来的签名 kAXyh+eerqrefyaF8dyFB0M4FVo=

请求参数

{
	"externalOrderId": "2564895864",
	"orderId": "OCRYPEXCH202310090610471696831847220DEV001OO0000000200000249"
}

请求参数说明

Param Desc Require
externalOrderId 商户订单号 max=64(String) required
orderId 订单ID(String) required

响应类型

Header: { 'Content-Type': 'application/json;charset=utf-8'}

响应数据

{
	"code": "200",
	"success": true,
	"msg": "成功",
	"msgEn": "SUCCESS",
	"data": {
		"tokenAmount": "1010",
		"currencyAmount": "5171.20",
		"orderAmount": "1010",
		"orderActualAmount": null,
		"orderFee": "0",
		"orderPayTime": null,
		"orderCompleteTime": null,
		"currencyType": "BRL",
		"tokenType": "USDT",
		"chainType": "TRON",
		"exSymbolType": "TOKEN TO CURRENCY",
		"exchangeRate": "5.12",
		"addressTo": "TNZEyuAhvDX1YoHpGPVzD5gBqK7e56tbF5",
		"remark": "TEST",
		"notifyUrl": "https://tofficeapi.hambit.io/api/v1/hambit/hambit-operate/testNotify",
		"tradeHash": "",
		"errorMsg": null,
		"errorMsgEn": null,
		"orderId": "OCRYPEXCH202310090610471696831847220DEV001OO0000000200000249",
		"externalOrderId": "33857163",
		"orderStatus": 4
	}
}

响应参数说明

Param Type Desc
tokenAmount String 代币金额
currencyAmount String 法币金额
orderAmount String 订单金额
orderActualAmount float64 订单实际金额
orderFee String 订单手续费
orderPayTime int64 订单支付时间
orderCompleteTime int64 订单完成时间
currencyType String 法币类型
tokenType String 代币类型
chainType String 主链类型
exSymbolType String 基准类型
exchangeRate String 订单生成时汇率
addressTo String 收款地址
remark String 备注
tradeHash String 交易hash
errorMsg String 错误信息
errorMsgEn String 错误信息en
orderId String 订单ID
externalOrderId String 商户订单ID
orderStatus int64 订单状态1-等待支付法币
2-收到法币
4-待收加密货币
8-兑换已完成
32-兑换失败

注意 http响应status_code优先级最高 只要收到响应status_code=200 响应数据则忽略

# 6. 公共响应代码

filed Type Default value and comment
code String 成功"200" 其他请参考失败code
success Bool 成功 true 失败false 和code保持意义上的同步
msg String 一级code返回的文字性描述
data Object 参考接口列表章节

# 7. 失败code

Code Desc
200 正常
300 参数异常
301 IP无权限
307 签名错误
500 系统错误