Merchant
Usa gli endpoint invoice per addebitare i tuoi clienti in qualsiasi token supportato e ricevere un token diverso nel tuo wallet. p3p gestisce il routing cross-chain.
Come funziona
p3p non prende mai in custodia i tuoi fondi oltre i pochi secondi necessari per instradare lo swap. I rimborsi, quando applicabili, vanno automaticamente al mittente del deposito.
1. Diventa un merchant
Registrati sulla Dashboard Partner usando un wallet che controlli. Usa il tuo ID Partner assegnato come opts.partner_id (in /exchange/create) o come wallet_merchant (in /invoice/create) per attribuire le transazioni al tuo account.
Nessun modulo di registrazione, nessuna conferma email e nessun token API. Il wallet è la credenziale.
Tratta il tuo wallet merchant come una chiave API
Chiunque controlli il wallet controlla l'account merchant. Usa un wallet dedicato per la tua attività, separato dai fondi personali.
2. Crea una fattura
Due modi per farlo.
Programmatico (consigliato)
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) // mostralo al tuo clienteRisposta:
{
"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 condivisibile (nessuna integrazione necessaria)
Per un pulsante di checkout, codice QR o link condivisibile, puoi costruire la fattura da un URL:
https://api.p3p.xyz/invoice/create/:merchantId/:pathFrom/:pathTo?Esempi:
# il cliente paga 100 USDT su TON, tu ricevi USDT su TON
https://api.p3p.xyz/invoice/create/0xYourMerchantWallet/100:usdt.ton/usdt.ton
# il cliente paga 50 TON, tu ricevi USDT su TON
https://api.p3p.xyz/invoice/create/acme/50:ton.ton/usdt.ton
# forma semplice: paga e ricevi lo stesso asset
https://api.p3p.xyz/invoice/create/acme/100:usdt.ton:merchantId può essere:
- l'id partner restituito durante la registrazione,
- un
namepartner se ne hai impostato uno, o - un indirizzo wallet già registrato come merchant.
3. Mostra l'indirizzo di deposito
Renderizza invoice.deposit_address e invoice.amount_from nella tua UI, idealmente come codice QR:
import QRCode from "qrcode"
const dataUrl = await QRCode.toDataURL(
`${invoice.chain_from}:${invoice.deposit_address}?amount=${invoice.amount_from}`
)Il cliente invia amount_from di token_from a quell'indirizzo. Qualsiasi altra cosa (importo sbagliato, token sbagliato, finestra scaduta) viene rimborsata automaticamente.
4. Conferma il pagamento
Polla /check/:id esattamente come un exchange normale:
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)
// i fondi sono ora in wallet_merchant5. Ispezione dei tuoi guadagni
Tre endpoint partner sono in sola lettura e non richiedono alcuna autenticazione oltre alla conoscenza del partnerId. I guadagni vengono regolati in base alle tue impostazioni di pagamento configurate (sia istantaneamente per swap o tramite prelievi USDT programmati) — configura questo nella Dashboard Partner.
| Endpoint | Restituisce |
|---|---|
GET /partners/:partnerId/stats | Volume, conteggio transazioni, quota di entrate |
GET /partners/:partnerId/exchanges | Tutti gli exchange accreditati a questo partner |
GET /partners/:partnerId/invoices | Tutte le fatture create per questo partner |
curl https://api.p3p.xyz/partners/0xYourMerchantWallet/statsSuggerimenti e insidie
- Un wallet per catena: un partner accumula wallet, uno per catena. Usa il wallet giusto per la catena di destinazione in
wallet_merchant. - Stessa catena + stesso token: salta il motore di swap e funge da semplice indirizzo di inoltro — utile per semplici link "pagami X USDT su TON".
- Finestra di deposito: le fatture condividono la finestra standard di ~6 minuti. Se il cliente impiega più tempo, chiama
/check/:id?bump=trueper aggiornarla. - Rimborsi: disponibili solo quando il deposito viene rilevato ma lo swap fallisce. Per le fatture senza
wallet_refund, i fondi tentano di rimborsare all'indirizzo del mittente rilevato on-chain.
Riferimento endpoint
Tutti gli endpoint merchant sono aperti — nessun header api-key richiesto. Il tuo wallet è la credenziale.
1. Crea Fattura
POST /invoice/create
| Campo | Tipo | Richiesto | Descrizione |
|---|---|---|---|
chain_from | string | sì | Catena da cui paga il cliente |
token_from | string | sì | Token con cui paga il cliente |
amount_from | string | sì | Importo che paga il cliente |
chain_to | string | sì | Catena su cui ricevi i fondi |
token_to | string | sì | Token che ricevi |
wallet_merchant | string | sì | Il tuo wallet sulla catena di destinazione |
Restituisce un oggetto fattura che include id, deposit_address, amount_from, amount_to, rate e duration.
2. Crea URL Fattura Condivisibile
GET /invoice/create/:merchantId/:pathFrom/:pathTo?
URL di fattura condivisibile — mettilo in un codice QR o un pulsante.
merchantId— id partner, nome partner, o un wallet già registrato come merchantpathFrom—<amount>:<token>.<chain>(es.100:usdt.ton)pathTo— opzionale,<token>.<chain>se vuoi convertire; defaultpathFrom
Restituisce lo stesso oggetto di POST /invoice/create.
3. Ottieni Statistiche Partner
GET /partners/:partnerId/stats
Volume aggregato, conteggio transazioni e quota di entrate a vita per il wallet partner.
4. Ottieni Exchange Partner
GET /partners/:partnerId/exchanges
Elenco paginato degli exchange accreditati al partner.
5. Ottieni Fatture Partner
GET /partners/:partnerId/invoices
Elenco paginato delle fatture create per il partner.
Errori
{ "error": "merchant_id_required", "message": "..." }| Codice | Significato |
|---|---|
invalid_json | Il body della richiesta non è JSON valido |
merchant_id_required | Endpoint GET fattura chiamato senza identificativo merchant |
partner_not_found | Nessun partner corrisponde al merchantId fornito |
merchant_wallet_not_found | Il partner esiste ma non ha wallet sulla catena di destinazione |
amount_too_small | Importo inferiore al minimo del fornitore |
amount_too_big | Importo superiore al massimo del fornitore |