Skip to content

Мерчанты

Используйте эндпоинты invoice, чтобы взимать плату с клиентов в любом поддерживаемом токене и получать другой в свой кошелёк. p3p обрабатывает кросс-чейн маршрутизацию.

Как это работает

1
Зарегистрируйтесь как партнёрПолучите ваш Partner ID из панели
2
Создайте инвойсPOST /invoice/create
3
Клиент оплачиваетНа `deposit_address`
4
Вы получаете средстваРасчёт напрямую на ваш кошелёк

p3p никогда не берёт ваши средства на хранение дольше нескольких секунд, необходимых для маршрутизации свопа. Возвраты, если применимо, идут автоматически отправителю депозита.

1. Стать мерчантом

Зарегистрируйтесь в Партнёрской панели, используя кошелёк, который вы контролируете. Используйте назначенный вам Partner ID как opts.partner_id/exchange/create) или как wallet_merchant/invoice/create), чтобы закреплять транзакции за вашим аккаунтом.

Нет формы регистрации, нет подтверждения email и нет API токена. Кошелёк — это учётные данные.

Относитесь к вашему мерчант-кошельку как к ключу API

Любой, кто контролирует кошелёк, контролирует мерчант-аккаунт. Используйте выделенный кошелёк для вашего бизнеса, отдельно от личных средств.

2. Создать инвойс

Есть два способа сделать это.

Программно (рекомендуется)

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) // покажите вашему клиенту

Ответ:

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 (интеграция не нужна)

Для кнопки оформления заказа, QR-кода или ссылки для обмена вы можете построить инвойс из URL:

https://api.p3p.xyz/invoice/create/:merchantId/:pathFrom/:pathTo?

Примеры:

# клиент платит 100 USDT на TON, вы получаете USDT на TON
https://api.p3p.xyz/invoice/create/0xYourMerchantWallet/100:usdt.ton/usdt.ton

# клиент платит 50 TON, вы получаете USDT на TON
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. Покажите адрес депозита

Отобразите invoice.deposit_address и invoice.amount_from в вашем интерфейсе, идеально в виде QR-кода:

ts
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 точно так же, как обычный обмен:

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)
// средства теперь в wallet_merchant

5. Проверка ваших заработков

Три партнёрских эндпоинта только для чтения и не требуют никакой аутентификации помимо знания partnerId. Заработки расчитываются в соответствии с вашими настройками выплат (либо мгновенно за каждый своп, либо через плановые выводы USDT) — настройте это в Партнёрской панели.

ЭндпоинтВозвращает
GET /partners/:partnerId/statsОбъём, количество транзакций, доля дохода
GET /partners/:partnerId/exchangesВсе обмены, зачисленные этому партнёру
GET /partners/:partnerId/invoicesВсе инвойсы, созданные для этого партнёра
bash
curl https://api.p3p.xyz/partners/0xYourMerchantWallet/stats

Советы и подводные камни

  • Один кошелёк на сеть: партнёр накапливает кошельки, по одному на сеть. Используйте правильный кошелёк для целевой сети в wallet_merchant.
  • Та же сеть + тот же токен: пропускает движок свопа и действует как простой адрес для пересылки — полезно для простых ссылок "оплати мне X USDT на TON".
  • Окно депозита: инвойсы используют стандартное окно ~6 минут. Если клиент тратит больше времени, вызовите /check/:id?bump=true, чтобы обновить его.
  • Возвраты: доступны только когда депозит обнаружен, но своп не удаётся. Для инвойсов без wallet_refund средства пытаются вернуться на адрес отправителя, обнаруженный on-chain.

Справочник эндпоинтов

Все мерчант-эндпоинты открыты — заголовок api-key не требуется. Ваш кошелёк — это учётные данные.

1. Создать инвойс

POST /invoice/create

ПолеТипОбязательноОписание
chain_fromstringдаСеть, с которой платит клиент
token_fromstringдаТокен, которым платит клиент
amount_fromstringдаСумма, которую платит клиент
chain_tostringдаСеть, на которую вы получаете средства
token_tostringдаТокен, который вы получаете
wallet_merchantstringдаВаш кошелёк в целевой сети

Возвращает объект инвойса, включающий 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

Постраничный список инвойсов, созданных для партнёра.

Ошибки

json
{ "error": "merchant_id_required", "message": "..." }
КодЗначение
invalid_jsonТело запроса не является валидным JSON
merchant_id_requiredGET эндпоинт инвойса вызван без идентификатора мерчанта
partner_not_foundНи один партнёр не соответствует данному merchantId
merchant_wallet_not_foundПартнёр существует, но не имеет кошелька в целевой сети
amount_too_smallСумма ниже минимума поставщика
amount_too_bigСумма выше максимума поставщика