概述
本文中的“出金”“出款”“提现”描述的是同一类商户侧资金转出能力。为便于阅读,下文以“出金”为主进行表述。 GatePay 出款能力支持商户在单个批次中向多个收款方分发资金,常见使用场景包括:- 向合作伙伴或代理商发放佣金
- 商户结算及分润发放
- 向用户钱包批量转账
- 版税支付
- 退款及拒付资金处理
前置条件
在接入出款能力之前,需先完成以下准备工作:- 创建应用:在商户后台创建 GatePay 应用
- 获取 ClientId:获取用于 API 认证的
ClientId - 配置签名密钥:配置请求签名所需的密钥
- 配置回调地址:设置用于接收异步通知的回调接口地址
出款接入步骤
第一步:查询手续费与限额
在创建任何出款批次之前,需先查询当前手续费规则及金额限制。这些值可能会动态变化,不应在本地缓存长期使用。 请求接口:- 当前提现手续费
- 最小和最大出款金额
- 单笔交易限额
- 每日出款限额
第二步:创建批量出款
创建一个包含一个或多个子订单(即收款人提现请求)的批次。每个批次由唯一的batch_id 标识。
最小接入链路
从实现顺序看,最小出金链路通常如下:- 调用
POST /v1/pay/withdraw/query获取当前手续费与限额 - 调用
POST /v1/pay/withdraw创建批次 - 处理提现回调通知
- 在需要时调用查询接口做兜底确认
第三步:接收回调并跟踪状态
GatePay 会向你配置的回调地址发送异步通知。回调中会同时包含:- 批次级状态
- 每个子订单的处理状态
- 批次创建后的初始回调(
INIT状态) - 批次进入处理中后的回调(
PROCESSING状态) - 最终完成状态回调(
SUCCESS、PARTIAL或FAIL)
第四步:对账与兜底查询
查询接口可作为兜底机制,用于:- 校验回调是否成功送达
- 进行账户对账
- 排查失败交易
- 确认最终状态
以回调为主,查询为辅
GatePay 的出款系统优先采用 异步回调 作为主通知机制,以提高可靠性和处理效率。
最佳实践:
应将回调处理作为主要状态更新机制,查询接口仅用于兜底校验或定期对账。
关于回调、签名和验签的详细说明,请参见 通知与回调。
如果你更希望先理解回调状态组合,请继续阅读 通知。
幂等性与对账标识
GatePay 使用以下两个核心标识实现幂等控制和对账:
幂等保障:
如果你重复提交了相同
merchant_withdraw_id 的出款请求,GatePay 会识别为重复请求,避免重复支付。
对商户侧系统而言,merchant_withdraw_id 更适合被视为“业务事实主键”,而不仅仅是一个技术幂等字段。这样在对账、客服排查和人工补单时都会更清晰。
批次与子订单状态
批次状态流转
批次会经历以下状态:子订单状态
批次中的每一笔提现都会有独立状态:回调负载结构
批次主单回调字段
当批次状态发生变化时,GatePay 会发送包含以下主单字段的回调:子订单数组回调字段
每个回调中都会包含suborders 数组,返回每笔子订单的详细信息:
手续费类型说明
fee_type = 0(内扣):手续费由商户账户承担,收款方收到完整amountfee_type = 1(外扣):手续费从提现金额中扣除,收款方实际收到amount - fee
错误处理
常见错误码
在创建或处理出款时,可能会遇到以下错误码:错误响应处理
当发生错误时,GatePay 会返回错误响应,通常包括:- 错误码:用于标识具体错误类型
- 错误信息:可读的错误描述
- 说明信息:如有,会返回更多上下文
- 对于临时性错误(如网络问题、超时),采用 指数退避重试
- 对于永久性错误(如余额不足、参数非法),需先修复问题后再发起重试
对账与审计
账户余额对账
建议定期将 GatePay 商户账户余额与内部系统记录进行核对:- 每次出款前先查询手续费:获取当前费率
- 跟踪批次状态:通过回调监控批次和子订单状态
- 核对金额字段:确认
amount、fee和done_amount与预期一致 - 每日对账:在日终通过查询接口完成对账
失败出款排查
如果某个子订单失败,建议按以下步骤排查:- 检查子订单状态:查询批次,确认每个子订单的
status - 查看错误原因:从回调或查询响应中获取失败原因
- 校验收款地址:确认钱包地址与指定链匹配且格式正确
- 确认链支持情况:确保收款方钱包支持该区块链网络
- 临时失败可重试:若属于临时失败,可使用新的
batch_id和原merchant_withdraw_id重新提交
查询出款结果
请求接口:- 批次状态及元数据
- 子订单数组及逐笔处理结果
- 手续费信息
- 链上交易哈希(用于确认链上转账)
- 回调延迟时的兜底确认
- 定期对账
- 审计追踪
- 客服支持与问题排查
请求签名与校验
所有出金请求都必须使用 GatePay 统一签名机制完成签名。关于请求签名、签名生成方式,以及回调签名验签规则,请参见 认证与安全。 签名要求如下:- 使用 Payment API Secret 对请求体按
timestamp\nnonce\nbody\n规则计算 HMAC-SHA512 - 将签名结果放入请求头
X-GatePay-Signature - 回调验签同样使用 Payment API Secret 按相同规则进行校验
最佳实践
- 动态查询手续费:每次创建批次前都应查询当前手续费,不要缓存费率
- 使用唯一标识:为
merchant_withdraw_id和batch_id分配唯一值,避免重复并支持幂等 - 完善回调处理:建立稳定的回调处理机制,实时更新状态
- 监控批次状态:重点关注
PARTIAL和FAIL状态,并设置告警 - 核验链上交易:对于关键出款,可通过区块链浏览器校验
txHash - 每日对账:每日将内部账户记录与 GatePay 数据进行核对
- 妥善处理错误:对重试、失败和人工介入场景建立清晰的处理机制
- 保护签名密钥:签名密钥不得出现在日志或暴露给未授权人员
- 校验收款地址:提交前对地址进行基础校验,例如格式和校验和检查
- 考虑限流机制:关注 API 频率限制,大批量提交时应做好请求排队

