CrownPay Merchant Open Gateway Documentation
皇冠pay 为企业商户提供高可用、多链整合的虚拟货币(USDT-TRC20 / TON / ERC20 等)即时收单服务。支持商户通过标准 HTTP RESTful 协议创建支付订单、获取收银台支付链接、通过 JS SDK 嵌入前端网页,并在用户到账后接收自动化 Webhook 回调通知进行上分结算。
为保障资金通信安全,商户在发起请求及接收异步回调通知时,均须采用标准 MD5 摘要算法进行签名校验:
sign 字段本身);
k1=v1&k2=v2&k3=v3;
&key=YOUR_SECRET_KEY;
sign。
/api/v1/order/create
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| mch_id | String | 是 | 皇冠pay 分配的商户唯一识别码 |
| out_trade_no | String | 是 | 商户系统内部订单号(须保证全局唯一) |
| amount | Number/Str | 是 | 订单金额,单位 USDT,保留2位小数,如 "100.00" |
| currency | String | 否 | 收款网络协议,默认 "USDT-TRC20",支持 USDT-TON / USDT-ERC20 |
| subject | String | 否 | 商品标题或充值描述,如 "VIP 会员充值" |
| notify_url | String | 推荐 | 支付成功后的异步 Webhook 回调推送地址 |
| return_url | String | 否 | 用户支付完成后收银台前端自动跳转地址 |
| sign | String | 是 | 请求签名,按标准签名算法生成 |
{
"code": 0,
"message": "success",
"data": {
"order_id": "CP202610041530229871",
"out_trade_no": "2026100412345678",
"amount": "100.00",
"currency": "USDT-TRC20",
"pay_url": "https://hgdb.app/pay.html?order_id=CP202610041530229871",
"pay_address": "TX8mK89gR2Y29kLpMn4QWjVkN6611CrownPay",
"expire_at": 1728045900,
"status": "PENDING"
}
}
/api/v1/order/query?order_id=CP...
商户系统可主动轮询查询某笔订单的实时支付状态(参数支持 order_id 或 out_trade_no)。
{
"code": 0,
"message": "success",
"data": {
"order_id": "CP202610041530229871",
"out_trade_no": "2026100412345678",
"amount": "100.00",
"currency": "USDT-TRC20",
"status": "PAID",
"created_at": 1728045000,
"paid_at": 1728045042,
"tx_hash": "0x98fbc127d4289ea61a29f8c09211c47395ba..."
}
}
当用户在收银台付款成功且链上确认后,皇冠pay 服务器会主动向商户下单时提供的 notify_url 发起 HTTP POST 请求,推送支付结果:
{
"mch_id": "mch_crownpay_001",
"order_id": "CP202610041530229871",
"out_trade_no": "2026100412345678",
"amount": "100.00",
"currency": "USDT-TRC20",
"status": "PAID",
"tx_hash": "0x98fbc127d4289ea61a29f8c09211c47395ba...",
"timestamp": 1728045045,
"sign": "3f9824c08e5c12019b84b..."
}
SUCCESS。如果商户希望在自己的网页平台内部“无跳转、无缝弹出收银台”,只需在网站 HTML 中引入一行皇冠pay 注入脚本:
<!-- 1. 在客户网页中引入皇冠pay注入SDK -->
<script src="https://hgdb.app/sdk/crownpay.js"></script>
<!-- 2. 点击充值按钮时唤起弹窗 -->
<script>
function handleRecharge(orderId) {
CrownPay.open({
orderId: orderId, // 下单接口返回的 order_id
onSuccess: function(order) {
alert('支付成功!已收到款项');
window.location.reload();
},
onClose: function() {
console.log('用户关闭了收银台');
}
});
}
</script>
function makeSign($params, $secret) {
ksort($params);
$arr = [];
foreach ($params as $k => $v) {
if ($k !== 'sign' && $v !== '' && $v !== null) {
$arr[] = "$k=$v";
}
}
return strtolower(md5(implode('&', $arr) . '&key=' . $secret));
}
import hashlib
def make_sign(params: dict, secret: str) -> str:
sorted_items = sorted([f"{k}={v}" for k, v in params.items() if k != 'sign' and v is not None and v != ''])
raw_str = "&".join(sorted_items) + f"&key={secret}"
return hashlib.md5(raw_str.encode('utf-8')).hexdigest().lower()
const crypto = require('crypto');
function makeSign(params, secret) {
const keys = Object.keys(params).filter(k => k !== 'sign' && params[k] !== '' && params[k] !== null).sort();
const rawStr = keys.map(k => `${k}=${params[k]}`).join('&') + `&key=${secret}`;
return crypto.createHash('md5').update(rawStr, 'utf8').digest('hex').toLowerCase();
}
商户技术人员可在此直接生成签名、发起真实 HTTP 订单请求,并一键呼出收银台检验:
// 点击上方按钮发起联调测试