收单快速入门
流程概览
1. 概述
收单(Payment Order):Pay Protocol 的收单是商户在平台系统中生成的支付请求,用户可通过支付链接或指定钱包地址完成付款,系统会自动确认支付并回调商户。
流程: 👉 商户调用 createPaymentOrder → 获取支付链接/子合约地址 → 用户支付 → Pay Protocol 回调 → 商户确认。
注意:接口调用环节需要签名
2. 前提条件
-
开通商户账号:沙盒注册地址
-
获取 API Key / Secret:获取 API Key / Secret
-
需要配置 回调地址 (
notifyUrl
) 和 跳转地址 (redirectionUrl
) -
确认使用的网络:
- 沙盒环境:
https://api-sandbox.payprotocol.network/api/mer
- 生产环境:
https://api.payprotocol.network/api/mer
- 沙盒环境:
3. API 签名认证
所有请求需要在 Header 中添加:
Header | 说明 |
---|---|
X-PAY-KEY | 商户 API Key |
X-PAY-TIMESTAMP | 当前 Unix 时间戳(单位秒,误差 ≤ 60 秒) |
X-PAY-SIGN | 签名,规则请看下面「签名生成规则」 |
🔹 签名生成规则
参考官方文档:签名规则
- 拼接字符串
signString = timestamp + method + requestPath + body
timestamp
:请求的 Unix 时间戳(秒)method
:HTTP 方法,例如GET
、POST
requestPath
:接口路径,不含域名,例如/api/mer/payment/createPaymentOrder
body
:POST 请求的 JSON 字符串,GET 请求为空字符串
- 使用 HMAC-SHA256 算法
HMAC_SHA256(apiSecret, signString)
-
Base64 编码
将上一步得到的哈希值进行 Base64 编码,得到 最终的
X-PAY-SIGN
🔹 请求头示例(HTTPS)
POST /api/mer/payment/createPaymentOrder
Host: api-sandbox.payprotocol.network
Content-Type: application/json
X-PAY-KEY: <your_api_key>
X-PAY-TIMESTAMP: 1723971200
X-PAY-SIGN: <生成的签名>
🔹 注意事项
- 所有 POST 请求需带
Content-Type: application/json
timestamp
与服务器时间差值不能超过 60 秒,防止重放攻击body
必须是有效 JSON,否则签名验证会失败
4. 创建收单订单(createPaymentOrder)
请求体参数说明
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
chainId | int32 | 是 | 平台内部链 ID,可从查询链列表接口获取 |
description | string | 是 | 订单描述 |
outTradeNo | string | 是 | 商户订单号,必须唯一 |
isLegalTender | int | 是 | 报价币种是否为法币,0=否,1=是 |
quoteCurrencySymbol | string | 是 | 报价币种符号,法币用国际标准符号(USD/CNY),数字货币用币符号(USDT/ETH/TRX) |
quoteAmount | string | 是 | 报价金额,正数,可带小数 |
notifyUrl | uri | 是 | 商户回调地址,必须为公网可访问 HTTPS 地址 |
redirectionUrl | uri | 是 | 用户支付成功后的跳转地址 |
请求示例
POST /api/mer/payment/createPaymentOrder
Host: api-sandbox.payprotocol.network
Content-Type: application/json
X-PAY-KEY: your_api_key
X-PAY-TIMESTAMP: 1723971200
X-PAY-SIGN: RlpTCwGT7lECP7achGM4oqT+Y5fXYjOqTRAJ9VPdY2U=
请求体示例
{
"chainId": 136,
"description": "购买会员服务 - 月卡",
"outTradeNo": "ORDER20250818001",
"isLegalTender": 0,
"quoteCurrencySymbol": "USDT",
"quoteAmount": "9.99",
"notifyUrl": "https://merchant.com/api/pay-callback",
"redirectionUrl": "https://merchant.com/pay-success"
}
响应示例
{
"code": 200,
"msg": "操作成功",
"data": {
"userWalletAddress": "TX85iLNzPsKYpreiwFmhuKiq1J2ZP7umfG",
"saltHash": "0x6895cea1a486b4ee4353964321151eae18e74e42409c9ddfab05b654c65aa80b",
"outPaymentNo": "202508191519455758358",
"paymentUrl": "/payment?apiSign=Ktb%2BYciiHTb4si7SAYesIuPbzjnwGBwMcJAyZJjy2s0%3D"
}
}
说明:
paymentUrl
→ 直接跳转到支付页面(推荐)userWalletAddress
→ 用户可直接转账到该地址outPaymentNo
→ Pay Protocol 收单订单号(保存以便查询)