HOME / DOC / V2.0

高盛 · 商户对接接口文档

商户系统与高盛之间的服务端对接接口,覆盖会员注册、登录、余额、转账、额度与游戏记录。
v2.0 DRAFT 更新时间 2026-11-01 POST · UTF-8

1文档概览

本文档描述商户系统与高盛之间的服务端对接方式。所有接口统一使用 POST 请求,Content-Type: application/x-www-form-urlencoded,响应为 JSON。

i
公共参数 account、api_key、api_code 与业务参数平铺在同一层表单字段中,不做嵌套。

接口域名、商户账号与密钥由平台方分配,请勿在前端或客户端代码中出现密钥。

2接入流程

典型接入链路如下图:

flowchart TD A([开始接入]) --> B[配置 account 与 api_key] B --> C[4.1 会员注册] C --> D[4.2 会员登陆取跳转地址] D --> E[玩家进入游戏] E --> F{资金操作} F -->|上分| G[4.7 额度转入] F -->|下分| H[4.8 额度转出] G --> I[4.4 查询转账状态] H --> I I --> J{成功?} J -->|是| K[4.6 获取游戏记录对账] J -->|否/处理中| I K --> L([完成])
!
转账类接口必须携带商户侧唯一 transferno 作为幂等键;超时或结果不确定时用 4.4 主动补偿,避免重复记账。

3公共说明

3.1请求协议

项目说明
请求方式POST
Content-Typeapplication/x-www-form-urlencoded
字符集UTF-8
响应格式application/json
时间戳秒级 10 位整数

3.2公共请求头

参数名类型必填说明
Content-Typestring是固定为 application/x-www-form-urlencoded
Acceptstring否建议传 application/json

3.3公共参数

以下参数除特殊说明外,所有接口都需要携带,并与业务参数平铺在同一层。

参数名类型必填说明
accountstring是商户账号(平台分配)
api_keystring是商户密钥
api_codestring是接口标识,如 AG、BBIN、PG;通用分商户传 CURRENCY
currencystring否币种,不传取商户配置
langstring否语系,如 zh、en

3.4响应结构

RESPONSE
{
  "Code": 0,
  "Message": "成功",
  "Data": { }
}
字段类型说明
CodeInteger0 成功,-1 失败
MessageString结果描述
DataObject | Array | null业务数据,仅成功时返回

3.5错误码

失败统一返回 Code=-1,HTTP 200;仅限流为 HTTP 429。具体原因见 Message。

CodeHTTPMessage说明
0200成功请求成功
-1200Incorrect data field参数缺失或格式错误
-1200Missing credentials缺少 account 或 api_key
-1200Invalid merchant account商户不存在或已停用
-1200Invalid api_key商户密钥错误
-1200Invalid apiapi_code 未开通或已停用
-1200IP not allowedIP 不在白名单
-1200user account not exists会员不存在,请先注册
-1200user account is disable会员已被禁用
-1200transfer order already exists转账单号重复
-1200transfer processing, please retry later同单号仍在处理中
-1200merchant game score Insufficient balance商户额度不足
-1200deposit failed上分失败
-1200deposit processing, please query later上分结果未明,需查询
-1200withdrawal processing, please query later下分结果未明,需查询
-1200user data error会员数据异常
-1200single game api data error接口配置异常或未启用
-1429Too many requests触发限流

3.6游戏类型

以下为 gameType 与 gameCode 的取值说明,用于 4.2 登录与 4.6 游戏记录。

gameType类型说明
1真人视讯类
2捕鱼捕鱼类
3电子电子游艺
4彩票彩票类
5体育体育类
6棋牌棋牌类
7电竞电竞类
i
gameCode 为子游戏代码,部分平台 0 表示大厅;具体值以平台提供的子游戏代码为准。

4接口详情

以下接口路径均以平台接口域名为前缀,例如 POST http://api.xxx.com/ley/register。

ACCOUNT

4.1会员注册账号 REGISTER

POST /ley/register

在指定 api_code 对应的游戏平台创建一个会员账号。同一商户下 username 唯一,重复注册返回失败。

请求参数

参数名类型必填说明
accountString是商户账号
api_keyString是商户密钥
api_codeString是接口标识:AG、BBIN 等
usernameString是注册会员账号,最大 191 位
passwordString是注册会员密码,最大 255 位

响应参数

字段类型说明
CodeInteger0 成功,其他失败
MessageString返回说明
Data.usernameString会员账号(原样返回)
Data.game_usernameString游戏侧账号(含商户前缀/币种前缀)

请求示例

FORM
account=M100001
api_key=your-api-key
api_code=AG
username=demo_user
password=demo_pass

响应示例

JSON
{
  "Code": 0,
  "Message": "成功",
  "Data": {
    "username": "demo_user",
    "game_username": "demo_user"
  }
}
ACCOUNT

4.2会员登陆游戏 LOGIN

POST /ley/login

获取会员进入游戏的跳转地址。

请求参数

参数名类型必填说明
accountString是商户账号
api_keyString是商户密钥
api_codeString是接口标识:AG、BBIN 等
usernameString是注册时的会员账号
gameTypeString是游戏类型,见 3.6
gameCodeString否子游戏代码,默认 0(大厅)
isMobileInteger否0 电脑端(默认)/ 1 手机端
passwordString否部分平台登录需要密码
langString否语系,默认取商户配置
typeString否1 表示登录前先一键回收并自动上分

响应参数

字段类型说明
CodeInteger0 成功
MessageString返回说明
Data.urlString游戏跳转地址
Data.specialurlString特殊启动地址,无则为空串

请求示例

FORM
account=M100001
api_key=your-api-key
api_code=AG
username=demo_user
gameType=1
gameCode=0
isMobile=0

响应示例

JSON
{
  "Code": 0,
  "Message": "成功",
  "Data": {
    "url": "https://game.example.com/launch?token=xxx",
    "specialurl": ""
  }
}
WALLET

4.3查询会员余额 BALANCE

POST /ley/balance

请求参数

参数名类型必填说明
accountString是商户账号
api_keyString是商户密钥
api_codeString是接口标识:AG、BBIN 等
usernameString是注册时的会员账号

响应参数

字段类型说明
CodeInteger0 成功
MessageString返回说明
Data.balanceNumber会员余额

响应示例

JSON
{
  "Code": 0,
  "Message": "成功",
  "Data": {
    "balance": 100.56
  }
}
TRANSFER

4.4查询转账状态 ORDER STATUS

POST /ley/orderstatus
!
该接口 Code 恒为 0,订单结果必须读取 Data.status;订单不存在或转账失败均返回 fail。

请求参数

参数名类型必填说明
accountString是商户账号
api_keyString是商户密钥
api_codeString是接口标识
usernameString是会员账号
transfernoString是转账订单号

响应参数

字段类型说明
CodeInteger恒为 0
MessageString返回说明
Data.transfernoString转账订单号
Data.statusStringsuccess / fail

响应示例

JSON
{
  "Code": 0,
  "Message": "成功",
  "Data": {
    "transferno": "2026110100000001",
    "status": "success"
  }
}
CREDIT

4.5获取商户额度 CREDIT

POST /ley/credit

请求参数

参数名类型必填说明
accountString是商户账号
api_keyString是商户密钥
api_codeString是接口标识;通用分商户传固定值 CURRENCY

响应参数

字段类型说明
CodeInteger0 成功
MessageString返回说明
Data.nameString商户账号
Data.codeString接口标识
Data.moneyNumber可用额度,无记录时为 0

响应示例

JSON
{
  "Code": 0,
  "Message": "成功",
  "Data": {
    "name": "M100001",
    "code": "CURRENCY",
    "money": 1000
  }
}
RECORD

4.6获取游戏记录 GAME RECORD

POST /ley/gamerecord
i
采集时间窗口最少间隔 5 分钟,且最早不超过请求时间前 7 天。不传 start_at / end_at 时默认查询最近 30 分钟。

请求参数

参数名类型必填说明
accountString是商户账号
api_keyString是商户密钥
usernameString否按会员账号过滤
platformString否按平台过滤,如 PG、BBIN;不传则查全部
start_atInteger否开始时间,10 位秒级时间戳
end_atInteger否结束时间,10 位秒级时间戳
pageInteger否页码,默认 1
pageSizeInteger否每页条数,默认 20,最大 500

响应参数

字段类型说明
Data.total_countInteger总条数
Data.lastPageInteger总页数
Data.pageSizeInteger每页条数
Data.pageInteger当前页码
Data.dataArray注单列表
Data.data[].idInteger注单 ID
Data.data[].rowidString注单单号
Data.data[].billNoString注单流水号
Data.data[].codeString游戏平台代码
Data.data[].usernameString会员账号
Data.data[].playNameString会员游戏侧账号
Data.data[].gameNameString游戏名称
Data.data[].gameTypeInteger游戏类型,见 3.6
Data.data[].playTypeString游戏玩法/名称
Data.data[].xzhmString投注内容
Data.data[].OddsString赔率
Data.data[].tableCodeString桌号
Data.data[].roundNoString局号 / 期号 / 赛事编号
Data.data[].betAmountString投注金额
Data.data[].validBetAmountString有效投注金额
Data.data[].netAmountString输赢结果,不包含本金
Data.data[].statusInteger1 已结算 / 2 未结算 / 3 无效订单 / 4 已退款
Data.data[].Lottery_resultsInteger开奖结果
Data.data[].betTimeInteger投注时间(10 位时间戳)
Data.data[].updateTimeInteger注单修改时间(10 位时间戳)

请求示例

FORM
account=M100001
api_key=your-api-key
platform=PG
start_at=1793329860
end_at=1793333460
page=1
pageSize=100

响应示例

JSON
{
  "Code": 0,
  "Message": "成功",
  "Data": {
    "total_count": 8,
    "lastPage": 4,
    "pageSize": 2,
    "page": 2,
    "data": [
      {
        "id": 1793805,
        "rowid": "1210627807831229",
        "billNo": "2021101708273880136788",
        "code": "OB",
        "username": "a3212",
        "playName": "asa3212",
        "gameName": "赤壁之战",
        "gameType": 5,
        "playType": "西班牙甲级联赛",
        "xzhm": "全场独赢",
        "Odds": "1.84",
        "tableCode": null,
        "roundNo": "1198139",
        "betAmount": "20.00",
        "validBetAmount": "20.00",
        "netAmount": "-20",
        "status": 1,
        "Lottery_results": null,
        "betTime": 1634453258,
        "updateTime": 0
      }
    ]
  }
}
TRANSFER · IN

4.7额度转换转入(上分) DEPOSIT

POST /ley/deposit
!
transferno 必须全局唯一,作为幂等键;同单号重复提交会被拒绝。超时或结果不确定时调用 4.4 补偿,切勿直接重试。

请求参数

参数名类型必填说明
accountString是商户账号
api_keyString是商户密钥
api_codeString是接口标识
usernameString是注册时的会员账号
amountNumber是转账金额,≥ 0(代码校验允许小数)
transfernoString是转账订单号,16–32 位

响应参数

字段类型说明
CodeInteger0 成功
MessageString返回说明
Data.depositNumber实际转入金额

请求示例

FORM
account=M100001
api_key=your-api-key
api_code=AG
username=demo_user
amount=100
transferno=202611010000000001

响应示例

JSON
{
  "Code": 0,
  "Message": "成功",
  "Data": {
    "deposit": 100
  }
}
TRANSFER · OUT

4.8额度转换转出(下分) WITHDRAWAL

POST /ley/withdrawal

请求参数

参数名类型必填说明
accountString是商户账号
api_keyString是商户密钥
api_codeString是接口标识
usernameString是注册时的会员账号
amountNumber是转账金额,≥ 0(代码校验允许小数)
transfernoString是转账订单号,16–32 位

响应参数

字段类型说明
CodeInteger0 成功
MessageString返回说明
Data.withdrawalNumber实际转出金额

响应示例

JSON
{
  "Code": 0,
  "Message": "成功",
  "Data": {
    "withdrawal": 100
  }
}

5对接须知 / FAQ

本章回答对接方在联调前最常确认的落地问题。标注 待确认 的条目需由平台方运营 / 运维 / 法务给出最终口径,本文档暂不构成承诺。

5.1环境地址与 HTTPS

环境Base URL协议备注
测试https://【待填】强制 HTTPSHTTP 请求将被拒绝 / 重定向
生产https://【待填】强制 HTTPSHTTP 请求将被拒绝 / 重定向

测试与正式环境均统一使用 HTTPS,由接入层强制跳转;域名通过 APP_URL 配置。请勿使用明文 HTTP 调用。

!
域名、证书与有效期需在联调前确认;测试与生产域名不同,请分别加入 IP 白名单(如需)。

5.2版本与更新记录

版本日期变更内容兼容性
v2.02026-10-01迭代:新增多币种、多语言功能向下兼容
v1.22026-05-01迭代:优化接口安全,优化游戏拉单功能向下兼容
v1.02025-10-01初版发布,完成所有基础游戏接口—

当前版本:v2.0(2026-10-01)。后续变更按倒序追加。

5.3鉴权与密钥管理

项目当前实现
鉴权参数account + api_key
校验方式hash_equals 常量时间比较,防时序攻击
请求签名无(不要求 sign)
防重放无 timestamp / nonce;资金接口靠 transferno 唯一键幂等,查询接口天然幂等
密钥生成AK + 16 位十六进制
轮换 / 吊销无自助接口、无双 key 灰度;需联系所属代理申请,代理后台修改 api_key 后立即生效

5.4IP 白名单

项目说明
匹配方式精确匹配,不支持网段 / 通配符
取 IP 方式仅取 REMOTE_ADDR,不信任 X-Forwarded-For
未命中返回 IP not allowed
申请 / 变更由商户在商户后台自行维护,保存后立即生效
!
IP 白名单由商户后台自行增删改,保存后立即生效。若商户走 CDN / 反向代理,必须填“最后一跳真实源 IP”;由于只认 REMOTE_ADDR,白名单里填代理 IP 会导致所有请求被拒或误放行。

5.5转账规则与对账

币种与单位

币种解析优先级:请求参数 currency → 商户接口配置的默认币种 → 系统默认币种:CNY。

金额上下限

接受小数,代码没有上限,实际上限为商户额度,额度不足返回 merchant game score Insufficient balance。

单号重复

已有单据状态返回
处理中(2)transfer processing, please retry later
成功(1)transfer order already exists
失败(0)同类型且金额差 < 0.005 允许复用重试;否则 transfer order already exists

transferno 要求 16–32 位,对应唯一键 uk_transfer_no。

超时与结果不明

厂商返回结果不明时,流水置为「处理中(2)」,接口返回 deposit processing, please query later 或 withdrawal processing, please query later。此时不要直接重试,应调用 4.4 /ley/orderstatus 查询。

对账

根据4.6接口,自行拉取游戏记录

商户后台->会员管理->游戏记录

5.6限流、超时与维护

限流(60 秒窗口)

维度上限 / 分钟
同商户所有接口1200
同商户同接口路径300
同商户同 IP 同接口180
注册接口(同商户)300
注册接口(同商户同 IP)60
转账接口(同商户)180
转账接口(同商户同 IP)90

超限返回 HTTP 429,响应体为 {"Code":-1,"Message":"Too many requests"}。

超时

平台调用厂商的 HTTP 客户端默认 Http::timeout(30),部分接口 15 秒;商户侧响应超时没有代码级配置

维护时间

代码没有固定维护窗口。维护公告会发在商户后台系统公告 。

5.7时区与时间规则

场景规则
应用时区Asia/Shanghai

5.8会员密码规则与存储

项目当前实现
校验8–32 位、至少字母+数字
存储Hash::make() → bcrypt,BCRYPT_ROUNDS=12,存 merchant_member.password
日志api_key / password 置为 ***,RequestLog 排除这两个字段
透传注册 / 登录时密码会透传给厂商

6支付方案 · 商户对外 API

本章为 USDT(TRC20)支付方案的商户服务端接口,覆盖充值地址分配、用户查询、充值记录、商户余额与资金归集。与第 1–5 章的游戏接口相互独立,鉴权方式、响应结构与错误码均不相同,请分别对接。

i
本章所有接口均为商户服务端调用,使用 X-Merchant-Id + X-API-Key + X-Timestamp + X-Signature 四件套鉴权,不使用本章以外的 JWT。

6.1公共说明

请求协议

项目说明
Base URLhttps://【服务域名】/api/v1/merchant
请求方式GET / POST
Content-Typeapplication/json
字符集UTF-8
响应格式application/json
协议强制 HTTPS

鉴权与签名

每个请求都必须携带以下 4 个请求头,缺少任意一个返回 401 缺少认证信息。

请求头类型必填说明
X-Merchant-IdString是商户 ID,由平台分配
X-API-KeyString是商户 API Key,由平台分配
X-TimestampString是秒级 10 位时间戳,与服务端偏差须 ≤ 300 秒
X-SignatureString是签名值,小写十六进制,算法见下

签名算法:

SIGN
signStr   = merchantId + timestamp + apiKey + bodyStr
X-Signature = hex( HMAC-SHA256( key = apiSecret, data = signStr ) )
变量取值
merchantIdX-Merchant-Id 的值
timestampX-Timestamp 的值
apiKeyX-API-Key 的值
bodyStrPOST 为请求体 JSON 原文;GET 为空字符串 ''
apiSecret商户 API Secret(仅服务端持有,严禁下发客户端)
!
拼接时不加任何分隔符,四个部分直接相连。bodyStr 必须与请求体字节一致;若对 JSON 做了重排或增删空格,签名会失败。

签名示例

PHP
$merchantId = 'M100001';
$apiKey     = 'your-api-key';
$apiSecret  = 'your-api-secret';
$timestamp  = (string)time();

// POST:bodyStr 为请求体原文
$body = json_encode(['merchant_user_id' => 'u_1001'], JSON_UNESCAPED_UNICODE);

// GET:bodyStr 为空字符串
// $body = '';

$signStr   = $merchantId . $timestamp . $apiKey . $body;
$signature = hash_hmac('sha256', $signStr, $apiSecret);
cURL · GET
curl -X GET "https://【服务域名】/api/v1/merchant/balance" \
  -H "X-Merchant-Id: M100001" \
  -H "X-API-Key: your-api-key" \
  -H "X-Timestamp: 1793329860" \
  -H "X-Signature: 9f2c1a..."
i
为兼容历史接入方,服务端对 bodyStr 额外接受「紧凑 JSON」形式,且空请求体时兼容 [] 与 {};同时兼容早期 SHA256(ksort(body+timestamp) + &key=apiSecret) 的旧签名。新接入方请统一使用上表的 HMAC 方式。

IP 白名单

项目说明
是否强制强制,未配置白名单时所有请求返回 403 未配置API白名单,请联系管理员
匹配方式精确匹配 IP,不支持网段 / 通配符
未命中403 IP不在白名单中
变更方式由平台方在商户后台维护,保存后立即生效
!
若商户侧经 CDN / 反向代理出网,需填写最后一跳的真实源 IP;服务端仅在对端为内网时才解析代理链,取最右侧非内网 IP。

响应结构

成功:

JSON
{
  "success": true,
  "data": { },
  "message": "操作成功"
}

失败:

JSON
{
  "success": false,
  "message": "错误描述",
  "error_code": 1002,
  "details": "补充说明"
}
字段类型说明
successBoolean业务结果唯一判定依据
dataObject | Array业务数据,失败时不返回
messageString成功时为操作提示,失败时为错误原因
error_codeInteger业务错误码,仅部分失败场景返回
detailsString补充说明,如当前余额明细

错误码

HTTPerror_codemessage说明
401—缺少认证信息四件套请求头不完整
401—请求已过期时间戳偏差超过 300 秒
401—商户不存在或API Key无效商户 ID 或 API Key 不匹配
401—签名验证失败签名串或密钥错误
403—商户账户已被暂停商户状态非 active
403—未配置API白名单,请联系管理员未维护 IP 白名单
403—IP不在白名单中来源 IP 未授权
400—参数不完整必填参数缺失
404—用户不存在merchant_user_id 在该商户下不存在
500—查询失败 / 创建用户失败服务端异常,可重试

状态枚举

充值单(deposits.status):

值说明是否计入余额
pending已检测到链上交易,等待确认否
confirmed确认数达标,已入账是

以实际返回值为准,后续可能新增状态,请勿对未知状态做异常中断处理。

时间与金额

项目规则
时间格式YYYY-MM-DD HH:mm:ss(服务器时区,非 ISO 8601)
可空时间未产生时为 null,如未确认的 confirmed_at
金额单位USDT,响应为数值,最多 6 位小数
金额入参建议使用字符串,避免浮点误差
分页参数page 从 1 开始;limit 默认 20,最大 100
MERCHANT · USER

6.2创建用户充值地址 CREATE USER

POST /users/create

为商户侧用户分配一个专属 TRON 充值地址。该地址由 HD 钱包派生,同一 merchant_user_id 重复调用返回已存在的用户,不会重复分配地址。

请求参数

参数名类型必填说明
merchant_user_idString是商户侧用户唯一标识,商户内唯一
emailString否用户邮箱,不传则自动生成占位邮箱
usernameString否用户名,不传则按商户与用户标识生成
extra_dataObject否业务扩展字段,原样存储

响应参数

字段类型说明
data.user_idString平台用户 ID,格式 USR_{id}
data.merchant_user_idString商户侧用户标识(原样返回)
data.usdt_addressString专属 TRON 充值地址(TRC20-USDT)
data.balanceNumber可用余额,新用户为 0
data.created_atString创建时间

请求示例

JSON
{
  "merchant_user_id": "u_1001",
  "email": "user1001@example.com",
  "username": "user1001",
  "extra_data": { "vip": 1 }
}

响应示例

JSON · 200
{
  "success": true,
  "data": {
    "user_id": "USR_1001",
    "merchant_user_id": "u_1001",
    "usdt_address": "TXYZExampleAddress123456789",
    "balance": 0,
    "created_at": "2026-11-01 10:00:00"
  },
  "message": "创建成功"
}
i
用户已存在时同样返回 success = true,message 为 用户已存在,data 结构一致。接入方可安全重试。
MERCHANT · USER

6.3查询用户信息 GET USER

GET /users/{merchant_user_id}

查询单个用户的充值地址、余额与累计充值/提现。

路径参数

参数名类型必填说明
merchant_user_idString是商户侧用户标识

响应参数

字段类型说明
data.user_idStringUSR_{id}
data.usdt_addressString专属充值地址
data.balanceNumber可用余额
data.frozen_balanceNumber冻结余额(提现处理中占用)
data.total_depositsNumber累计已确认充值金额
data.total_withdrawalsNumber累计已完成提现金额
data.statusString用户状态,active 为正常
data.created_atString创建时间

响应示例

JSON · 200
{
  "success": true,
  "data": {
    "user_id": "USR_1001",
    "merchant_user_id": "u_1001",
    "usdt_address": "TXYZExampleAddress123456789",
    "balance": 100.5,
    "frozen_balance": 10.0,
    "total_deposits": 200.5,
    "total_withdrawals": 90.0,
    "status": "active",
    "created_at": "2026-11-01 10:00:00"
  }
}

失败:404 用户不存在。

MERCHANT · DEPOSIT

6.4查询充值记录 DEPOSITS

GET /deposits

分页查询本商户的充值记录,支持按状态、用户与日期筛选。

查询参数

参数名类型必填说明
pageInteger否页码,默认 1
limitInteger否每页条数,默认 20,最大 100
statusString否pending / confirmed
merchant_user_idString否按用户筛选
start_dateString否开始日期,YYYY-MM-DD,含当日
end_dateString否结束日期,YYYY-MM-DD,含当日

响应参数

字段类型说明
data.stats.totalNumber本商户全量充值金额合计
data.stats.pendingInteger本商户全量待确认笔数
data.stats.todayNumber本商户今日已确认充值金额
data.deposits[]Array当前页充值记录
data.deposits[].deposit_idStringDEP_{id}
data.deposits[].merchant_user_idString商户侧用户标识
data.deposits[].usernameString用户名
data.deposits[].amountNumber充值金额(USDT)
data.deposits[].feeNumber充值手续费,无则为 0
data.deposits[].tx_hashString链上交易哈希
data.deposits[].from_addressString付款方地址
data.deposits[].to_addressString收款地址(用户专属地址)
data.deposits[].confirmationsInteger确认数
data.deposits[].statusString见 6.1 状态枚举
data.deposits[].created_atString检测时间
data.deposits[].confirmed_atString | null入账时间
data.pagination.pageInteger当前页码
data.pagination.limitInteger每页条数
data.pagination.totalInteger筛选后总条数
data.pagination.total_pagesInteger总页数
!
stats 为商户维度全量统计,不受 status、merchant_user_id、start_date、end_date 筛选影响;pagination.total 才是筛选后的条数。两者口径不同,勿混用。

响应示例

JSON · 200
{
  "success": true,
  "data": {
    "stats": {
      "total": 5000.5,
      "pending": 2,
      "today": 120.0
    },
    "deposits": [
      {
        "deposit_id": "DEP_9001",
        "merchant_user_id": "u_1001",
        "username": "user1001",
        "amount": 100.5,
        "fee": 0,
        "tx_hash": "abc123...",
        "from_address": "TSenderAddress...",
        "to_address": "TXYZExampleAddress123456789",
        "confirmations": 6,
        "status": "confirmed",
        "created_at": "2026-11-01 10:00:00",
        "confirmed_at": "2026-11-01 10:01:00"
      }
    ],
    "pagination": {
      "page": 1,
      "limit": 20,
      "total": 50,
      "total_pages": 3
    }
  }
}
MERCHANT · BALANCE

6.5查询商户余额 BALANCE

GET /balance

汇总本商户全部用户的余额、冻结额与当日流水。

响应参数

字段类型说明
data.total_balanceNumber用户余额合计
data.frozen_balanceNumber冻结余额合计
data.available_balanceNumber可用余额,由服务端口径计算
data.today_depositsNumber今日已确认充值金额
data.today_withdrawalsNumber今日已提现金额
data.total_usersInteger商户下用户总数

响应示例

JSON · 200
{
  "success": true,
  "data": {
    "total_balance": 5000.5,
    "frozen_balance": 200.0,
    "available_balance": 4800.5,
    "today_deposits": 120.0,
    "today_withdrawals": 90.0,
    "total_users": 128
  }
}
i
该接口按天聚合,适合做商户维度的日终对账;按用户核对请使用 6.3 与 6.4。
MERCHANT · COLLECT

6.6一键归集 COLLECT

POST /wallets/collect

将本商户下所有符合条件的用户地址余额归集到商户冷钱包。

请求参数

无。商户范围与冷钱包地址由平台侧配置决定。

归集规则

项目说明
归集对象商户下 status = active、且已分配充值地址的用户
归集门槛余额低于商户配置的最低归集数量时跳过
链上前置条件地址需已激活且持有足够 TRX 支付手续费,否则该地址记为失败
归集目标商户冷钱包地址
执行方式同步执行,逐地址上链,地址较多时耗时较长

响应参数

字段类型说明
data.record_idInteger归集批次记录 ID
data.totalInteger参与归集的地址数
data.successInteger成功笔数
data.failedInteger失败笔数
data.skippedInteger跳过笔数(低于门槛等)
data.stoppedBoolean是否被中途停止
data.results[]Array逐地址明细
data.results[].user_idInteger用户 ID
data.results[].from_addressString归集源地址
data.results[].amountNumber归集金额
data.results[].statusStringsuccess / failed / skipped
data.results[].tx_hashString | null链上交易哈希
data.results[].error_msgString | null失败或跳过原因
data.results[].onchain_usdtNumber归集前余额
data.results[].onchain_trxNumber地址 TRX 余额

响应示例

JSON · 200
{
  "success": true,
  "data": {
    "record_id": 88,
    "total": 128,
    "success": 120,
    "failed": 3,
    "skipped": 5,
    "stopped": false,
    "results": [
      {
        "user_id": 1001,
        "from_address": "TXYZExampleAddress123456789",
        "amount": 150.5,
        "status": "success",
        "tx_hash": "abc123...",
        "error_msg": null,
        "onchain_usdt": 150.5,
        "onchain_trx": 12.0
      }
    ]
  },
  "message": "归集完成:成功 120 笔,失败 3 笔,跳过 5 笔(未达阈值)"
}

失败场景

场景HTTPmessage
未配置冷钱包400该商户未设置冷钱包地址,无法归集
执行异常500归集失败 或具体异常信息
!
该接口为同步执行,地址数量多时可能耗时数分钟。客户端超时时间需单独设置(建议 ≥ 300 秒),并避免并发重复触发。超时断开不代表归集未执行,请以后台归集记录为准。