Skip to content

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

1
Registrati come partnerOttieni il tuo ID partner dalla dashboard
2
Crea una fatturaPOST /invoice/create
3
Il cliente pagaA `deposit_address`
4
Ricevi i fondiRegolati direttamente al tuo wallet

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

ts
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 cliente

Risposta:

json
{
  "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 name partner 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:

ts
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:

ts
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_merchant

5. 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.

EndpointRestituisce
GET /partners/:partnerId/statsVolume, conteggio transazioni, quota di entrate
GET /partners/:partnerId/exchangesTutti gli exchange accreditati a questo partner
GET /partners/:partnerId/invoicesTutte le fatture create per questo partner
bash
curl https://api.p3p.xyz/partners/0xYourMerchantWallet/stats

Suggerimenti 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=true per 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

CampoTipoRichiestoDescrizione
chain_fromstringCatena da cui paga il cliente
token_fromstringToken con cui paga il cliente
amount_fromstringImporto che paga il cliente
chain_tostringCatena su cui ricevi i fondi
token_tostringToken che ricevi
wallet_merchantstringIl 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 merchant
  • pathFrom<amount>:<token>.<chain> (es. 100:usdt.ton)
  • pathTo — opzionale, <token>.<chain> se vuoi convertire; default pathFrom

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

json
{ "error": "merchant_id_required", "message": "..." }
CodiceSignificato
invalid_jsonIl body della richiesta non è JSON valido
merchant_id_requiredEndpoint GET fattura chiamato senza identificativo merchant
partner_not_foundNessun partner corrisponde al merchantId fornito
merchant_wallet_not_foundIl partner esiste ma non ha wallet sulla catena di destinazione
amount_too_smallImporto inferiore al minimo del fornitore
amount_too_bigImporto superiore al massimo del fornitore