对接文档(多币种) · 签名规则 · 回调验签

文档与示例

包含 coinType 约定、签名规则、常用接口与回调验签。示例代码可直接复制或前往 SDK 下载 获取对应语言文件。

基础概念

商户在商户后台获取 merchantNoapiSecret、回调地址,并按币种/链路使用 coinType 区分监听与结算。

提示:接口(/api/**/pay/**)统一使用同一套签名算法(SHA256)。

coinType 约定

  • TRON(TRC20):USDT-TRC20USDC-TRC20
  • 以太坊(ERC20):ETHUSDT-ERC20USDC-ERC20
  • 比特币:BTC

签名规则(SHA256)

接口请求参数中加入 timestamp(毫秒),再按 key 字典序排序拼接,最后追加 key=apiSecret 计算 SHA256 得到 sign

签名拼接示例
k1=v1&k2=v2&...×tamp=1710000000000&key=apiSecret
SHA256(hex) -> sign
注意:参与签名的业务参数不包含 sign 本身。

常用接口

  • POST /api/address/create 创建收款地址(merchantNo、coinType、timestamp、sign)
  • POST /api/order/create 创建订单(merchantNo、amount、coinType、notifyUrl 可选、timestamp、sign)
  • POST /api/order/query 查询订单(merchantNo、orderNo、timestamp、sign)

回调验签

平台向商户回调地址发送 body:包含 merchantNoamounttxHashfromAddresscoinTypeorderNo(若可关联)、以及 timestamp/sign

商户侧验签同样使用签名规则(用你的 apiSecret 重新计算 sign 并比对)。

Java 示例

下载示例文件:UsdtPaySDK.java

Java:生成签名(示意)
Map<String, String> params = new HashMap<>();
params.put("merchantNo", merchantNo);
params.put("amount", "100");
params.put("coinType", "USDT-TRC20");
params.put("timestamp", String.valueOf(System.currentTimeMillis()));

String sign = UsdtPaySDK.generateSign(params, apiSecret);
params.put("sign", sign);

String resp = UsdtPaySDK.postJson(apiBaseUrl + "/api/order/create", params);

PHP 示例

下载示例文件:UsdtPaySDK.php

PHP:创建订单(示意)
$params = [
  "merchantNo" => $merchantNo,
  "amount" => "100",
  "coinType" => "USDT-TRC20",
  "timestamp" => (string) round(microtime(true) * 1000),
];

$params["sign"] = UsdtPaySDK::generateSign($params, $apiSecret);
$resp = UsdtPaySDK::postJson($apiBaseUrl . "/api/order/create", $params);

C# 示例

下载示例文件:UsdtPaySDK.cs

C#:回调验签(示意)
// body 反序列化得到字典 data
// 取出 sign 后从参与签名字段移除
string sign = data["sign"]; 
data.Remove("sign");
string calc = UsdtPaySDK.GenerateSign(data, apiSecret);
if (!string.Equals(sign, calc, StringComparison.OrdinalIgnoreCase)) {
  throw new Exception("invalid sign");
}