
钱包与收款
会员充值优先选择独享钱包:无需预填金额,没有付款倒计时,按实际到账收款。了解后台操作、API 绑定、查单与回调入账。
可全屏观看,或点击章节跳到需要的操作。收付款时,请从自己的后台获取地址和订单信息。
按步骤在自己的后台操作,点击图片可放大查看。
为什么优先推荐:为每个会员绑定一个独享收款地址,会员可按需要多次充值,不必先填写金额,也不受普通收款订单付款有效期限制,避免因金额不匹配、订单超时而无法匹配原订单。适合会员余额充值、长期客户入金;固定金额商品订单可按业务选择普通钱包。独享钱包仍需正确网络、币种、有效绑定和链上确认。
后台生成入口:进入钱包管理 → 生成钱包,选择币种,再选择独享钱包。支持 TRC20-USDT、BEP20-USDT、BEP20-USDC、SPL-USDC。请按会员选择的网络分配,不要把费用余额旁的充值地址发给会员。
绑定会员:在绑定信息中填写稳定且唯一的会员标识,如 MEMBER_10001,对应接口字段 bindKey;它不是商户 UID。需要自动增加会员余额时,填写自己服务器的公网 HTTPS 回调地址,对应 notifyUrl;留空使用商户默认回调配置。核对地址额度后点击确认生成,成功后返回钱包列表查找该会员的钱包。
找到已有钱包:模式筛选选择独享钱包,核对币种、绑定信息和启用状态。后台手动生成与 API 绑定属于同一商户的钱包,接口创建后也可在这里查找。一个会员在同一币种和网络下应复用自己的绑定;不要把同一绑定分给不同会员。
提供收款信息:点击钱包行的扫码收款,直接打开收银台,无需输入金额,也没有付款倒计时。复制完整地址或收银台链接发给对应会员,提醒付款网络、币种必须一致。地址可以重复充值,请保持钱包启用;停用前先通知会员停止向该地址转账。
接口接入与调试:官方调试接口页面选择创建独享钱包,填写 chainCode、tokenSymbol、bindKey,按需填写 label、notifyUrl。POST /openapi/payin/exclusive-bindings 不需要 amount、expireMinutes 或 merchantOrderNo;它创建会员绑定,实际充值被检测后才自动生成独享收款订单。文档与后台统一称为独享钱包。
鉴权与请求:服务器使用 Merchant UID + API Key,带 x-api-key、x-merchant-uid、x-timestamp、x-nonce、x-signature。签名为 HMAC-SHA256,原文依次为 UID、毫秒时间戳、随机串、大写方法、纯路径、规范化 query、规范化 body,共 7 行;优先用官方 SDK 或调试页生成代码。每次请求使用新时间戳和 nonce。在调试页提交前,核对会员绑定和回调地址;点击创建线上独享钱包会创建实际绑定。
保存绑定返回值:成功后保存 bindingId、addressId、address、bindKey、chainCode、tokenSymbol、status;状态应为 active。同一商户 + 同一网络 + 同一币种 + 同一 bindKey 重复调用会返回原绑定,适合 get-or-create;重复创建不会覆盖原 label 或 notifyUrl。该接口不返回 cashierUrl,可在自己的充值页展示返回地址,或从后台打开并复制收银台链接。
查询绑定及充值:GET /openapi/payin/exclusive-bindings/{bindKey}?chainCode=TRON&tokenSymbol=USDT&recentLimit=10。bindKey 路径需 URL 编码,GET 没有 body,query 仍参与签名。返回 stats、recentOrders、recentTransactions;recentLimit 为 1~20,只是最近记录,不能代替完整账务。需要核对某笔订单时,再用 GET /openapi/payin/orders/{orderNo} 查单。
会员自动加款:平台检测到账并完成处理后,向独享钱包的 notifyUrl(未配置则使用默认配置)发送回调。服务器用对应订单认证的 API Key 对原始 rawBody 验签,校验商户、网络、币种、bindKey 与 status=completed,再按 paidAmount 实收金额加款。用商户 + orderNo 建立唯一记录,将去重和余额增加放在同一数据库事务中,成功后返回 HTTP 2xx;重复通知直接确认,不能重复加款,也不能只按 bindKey 去重,否则会员第二次充值会被忽略。
后台核对到账:进入收款订单,在地址 / 标签 / bindKey 中筛选对应会员或钱包地址,查看独享订单、金额、状态和交易哈希,再结合钱包账目核对。核对已完成状态,并单独查看风险评估结果。订单行回调按钮会主动重发通知,不是查看记录入口,修复接收接口并确认幂等后才按需使用。
联调与异常排查:先验证绑定复用、查询和回调验签,再按自己的验收安排核对真实到账。会员未加款时依次查网络与币种、绑定与地址、链上确认、订单状态、回调配置及服务器日志;不要仅凭前端跳转或二维码展示认定已充值。签名失败检查规范化、时间与 nonce;绑定不存在检查商户、网络、币种和 bindKey。操作受限还需检查账户状态、套餐地址额度和费用余额。
给不同会员分配不同的绑定标识,同一会员再次充值时复用原有地址。发给会员前请核对网络、币种和完整地址;自动增加会员余额时,按每笔订单的实收金额处理,并防止重复入账。
会员登录并选择网络 / 币种
→ 服务端取当前会员的稳定 bindKey
→ 创建或查询独享绑定,复用返回地址
→ 会员自行决定金额,向该地址充值
→ 平台检测交易、确认并生成独享订单
→ 验证 completed 回调,按 paidAmount 幂等加款
→ 后台订单 / 账目与商户充值流水核对// 先从官方文档下载并安装 Node.js SDK;仅在服务端运行。
import { UUGateClient } from 'uugate-openapi-sdk';
const client = new UUGateClient({
baseUrl: 'https://api.uugate.com',
merchantUid: process.env.UUGATE_MERCHANT_UID,
apiKey: process.env.UUGATE_API_KEY,
});
const binding = await client.createExclusiveBinding({
chainCode: 'TRON',
tokenSymbol: 'USDT',
bindKey: 'MEMBER_10001', // 实际应由服务器当前会员身份决定
label: '会员充值示例',
notifyUrl: 'https://merchant.example.com/uugate/notify',
});
// 保存 bindingId、addressId、address、bindKey、网络、币种和状态。
// 绑定成功仅表示地址准备好,不代表会员已付款。const bindKey = 'MEMBER_10001';
const detail = await client.request('GET',
'/openapi/payin/exclusive-bindings/' + encodeURIComponent(bindKey), {
query: { chainCode: 'TRON', tokenSymbol: 'USDT', recentLimit: 10 },
});
// detail.stats:统计;detail.recentOrders:最近订单;
// detail.recentTransactions:最近链上交易。
// 查询某笔:await client.getPayinOrder(orderNo);
// recentOrders 只含最近记录,不能拿累计值直接再次增加会员余额。保留 HTTP 原始请求体 rawBody
用订单对应 API Key 验证 x-callback-signature
HMAC-SHA256(apiKey, timestamp + "." + nonce + "." + rawBody)
校验 timestamp、防重放及业务字段
要求 merchantUid 属于本商户,status == "completed"
按 bindKey + chainCode + tokenSymbol 找到会员绑定
在同一数据库事务内:
以 (merchantUid, orderNo) 唯一键登记充值
如已登记 → 不再加款
如首次登记 → 使用 Decimal 按 paidAmount 增加会员余额
事务成功后返回 2xx;失败返回非 2xx 并记录日志
// bindKey 标识会员,orderNo 标识一笔充值;二者不能混用。