商家
使用发票端点向您的客户收取任何受支持代币的费用,并在您自己的钱包中接收不同的代币。p3p 处理跨链路由。
它如何运作
p3p 永远不会托管您的资金超过路由交易所需的几秒钟。如果适用,退款会自动发送给存款发送者。
1. 成为商家
使用您控制的钱包在合作伙伴仪表板注册。将您分配的合作伙伴 ID 用作 opts.partner_id(在 /exchange/create 中)或 wallet_merchant(在 /invoice/create 中)以将交易归属于您的账户。
无需注册表,无需电子邮件确认,无需 API 令牌。钱包即凭证。
像对待 API 密钥一样对待您的商家钱包
任何控制钱包的人都控制商家账户。为您的业务使用专用钱包,与个人资金分开。
2. 创建发票
有两种方法可以做到这一点。
编程方式(推荐)
POST /invoice/create
const invoice = await fetch("https://api.p3p.xyz/invoice/create", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
chain_from: "eth", token_from: "usdt", amount_from: "50",
chain_to: "ton", token_to: "usdt",
wallet_merchant: "UQYourMerchantTonWallet"
}),
}).then(r => r.json())
console.log(invoice.deposit_address) // 向您的客户展示响应:
{
"id": "in_ab12cd...",
"invoice": true,
"chain_from": "eth", "token_from": "usdt", "amount_from": "50",
"chain_to": "ton", "token_to": "usdt",
"amount_to": "50.0",
"wallet_merchant": "UQYourMerchantTonWallet",
"deposit_address": "0xDepositAddressForCustomer",
"rate": "1.0",
"duration": 60
}可共享 URL(无需集成)
对于结账按钮、QR 码或分享链接,您可以从 URL 构建发票:
https://api.p3p.xyz/invoice/create/:merchantId/:pathFrom/:pathTo?示例:
# 客户在 TON 上支付 100 USDT,您在 TON 上接收 USDT
https://api.p3p.xyz/invoice/create/0xYourMerchantWallet/100:usdt.ton/usdt.ton
# 客户支付 50 TON,您在 TON 上接收 USDT
https://api.p3p.xyz/invoice/create/acme/50:ton.ton/usdt.ton
# 简单形式:支付并接收相同资产
https://api.p3p.xyz/invoice/create/acme/100:usdt.ton:merchantId 可以是:
- 注册期间返回的合作伙伴 ID,
- 如果您设置了,则为合作伙伴
name,或 - 已注册为商家的钱包地址。
3. 显示存款地址
在您的 UI 中渲染 invoice.deposit_address 和 invoice.amount_from,最好作为 QR 码:
import QRCode from "qrcode"
const dataUrl = await QRCode.toDataURL(
`${invoice.chain_from}:${invoice.deposit_address}?amount=${invoice.amount_from}`
)客户将 amount_from 的 token_from 发送到该地址。其他任何情况(金额错误、代币错误、窗口过期)都会自动退款。
4. 确认付款
像普通交易所一样轮询 /check/:id:
async function waitForInvoicePayment(id: string) {
while (true) {
const s = await fetch(`https://api.p3p.xyz/check/${id}`).then(r => r.json())
if (s.status === "complete") return s
if (s.status === "failed" || s.status === "refunded") throw new Error(s.status)
await new Promise(r => setTimeout(r, 4000))
}
}
await waitForInvoicePayment(invoice.id)
// 资金现在在 wallet_merchant 中5. 检查您的收益
三个合作伙伴端点是只读的,除了知道 partnerId 外不需要任何身份验证。收益根据您配置的支付设置进行结算(每次交易立即或通过 USDT 定时提款)— 在合作伙伴仪表板中配置此项。
| 端点 | 返回 |
|---|---|
GET /partners/:partnerId/stats | 交易量、交易计数、收入分成 |
GET /partners/:partnerId/exchanges | 归功于此合作伙伴的所有交易所 |
GET /partners/:partnerId/invoices | 为此合作伙伴创建的所有发票 |
curl https://api.p3p.xyz/partners/0xYourMerchantWallet/stats提示和陷阱
- 每条链一个钱包:合作伙伴累积钱包,每条链一个。在
wallet_merchant中使用目标链的正确钱包。 - 相同的链 + 相同的代币:跳过交易引擎并充当简单的转发地址 — 对于简单的"在 TON 上付我 X USDT"链接很有用。
- 存款窗口:发票共享标准的约 6 分钟窗口。如果客户花费更长时间,请调用
/check/:id?bump=true来刷新它。 - 退款:仅在检测到存款但交易失败时可用。对于没有
wallet_refund的发票,资金会尝试退回到链上检测到的发送者地址。
端点参考
所有商家端点都是开放的 — 不需要 api-key 标头。您的钱包是凭证。
1. 创建发票
POST /invoice/create
| 字段 | 类型 | 必需 | 描述 |
|---|---|---|---|
chain_from | string | 是 | 客户付款的链 |
token_from | string | 是 | 客户付款的代币 |
amount_from | string | 是 | 客户付款的金额 |
chain_to | string | 是 | 您接收资金的链 |
token_to | string | 是 | 您接收的代币 |
wallet_merchant | string | 是 | 您在目标链上的钱包 |
返回包含 id、deposit_address、amount_from、amount_to、rate 和 duration 的发票对象。
2. 创建可共享发票 URL
GET /invoice/create/:merchantId/:pathFrom/:pathTo?
可共享发票 URL — 将其放入 QR 码或按钮。
merchantId— 合作伙伴 ID、合作伙伴名称或已注册为商家的钱包pathFrom—<amount>:<token>.<chain>(例如100:usdt.ton)pathTo— 可选,如果您想转换,则为<token>.<chain>;默认为pathFrom
返回与 POST /invoice/create 相同的对象。
3. 获取合作伙伴统计
GET /partners/:partnerId/stats
合作伙伴钱包的总交易量、交易计数和终身收入分成。
4. 获取合作伙伴交易所
GET /partners/:partnerId/exchanges
归功于合作伙伴的交易所分页列表。
5. 获取合作伙伴发票
GET /partners/:partnerId/invoices
为合作伙伴创建的发票分页列表。
错误
{ "error": "merchant_id_required", "message": "..." }| 代码 | 含义 |
|---|---|
invalid_json | 请求体不是有效的 JSON |
merchant_id_required | 调用发票 GET 端点时未提供商家标识符 |
partner_not_found | 没有合作伙伴匹配给定的 merchantId |
merchant_wallet_not_found | 合作伙伴存在但在目标链上没有钱包 |
amount_too_small | 金额低于供应商最小值 |
amount_too_big | 金额高于供应商最大值 |