Монеты и суммы
Коды монет и их точность, USDT в любой сети, счета в долларах и рублях, формат сумм в PS Wallet Pay API.
На этой странице
В PS Wallet Pay каждая монета обозначается кодом, а суммы передаются строками с точкой. На этой странице — какие коды бывают, сколько у них знаков после запятой и как работают USDT без указания сети и счета в фиате.
Коды монет
| Код | Монета | Знаков после запятой |
|---|---|---|
USDT-TRC20 | Tether в сети TRON | 6 |
USDT-BEP20 | Tether в сети BNB Smart Chain | 6 |
USDT-ERC20 | Tether в сети Ethereum | 6 |
USDT-TON | Tether в сети TON | 6 |
XAUT | Tether Gold (Ethereum) | 6 |
TRX | TRON | 6 |
BNB | BNB (BEP20) | 8 |
ETH | Ethereum | 8 |
GRAM | Gram (сеть TON) | 9 |
RUB | Российский рубль | 2 |
Кроме них есть код USDT — USDT в любой сети (см. ниже), и фиатные валюты для цены счёта: USD и RUB, по 2 знака после запятой.
Монеты TRX, BNB, монеты сети Ethereum (USDT-ERC20, XAUT, ETH) и сети TON (USDT-TON, GRAM) могут быть временно недоступны. Актуальный список возвращает getCurrencies, а недоступная монета в параметрах даёт ошибку PARAM_ASSET_INVALID.
Где какие коды можно указывать
| Где | Допустимые коды |
|---|---|
asset в createInvoice | USDT или любой код монеты из таблицы. |
fiat в createInvoice | USD или RUB. |
accepted_assets в createInvoice | Коды монет и USDT через запятую. |
asset в transfer и createCheck | USDT или любой код монеты из таблицы. |
Фильтр asset в getTransfers и getChecks | USDT (все сети) или код монеты. |
Ответы API: paid_asset, asset переводов и чеков, currency_code баланса | Всегда код с сетью (USDT-TRC20, USDT-BEP20 и т. д.), не USDT. |
Регистр кода не важен: usdt-trc20 и USDT-TRC20 — одно и то же.
USDT без указания сети
В счетах можно указать просто USDT. Тогда пользователь заплатит с любого своего счёта USDT — TRC20, BEP20, ERC20 или TON, — и деньги придут на баланс приложения в той сети, с которой он платил. Сеть оплаты указана в поле paid_asset оплаченного счёта.
Если нужна конкретная сеть, укажите её код, например USDT-TRC20: оплатить счёт можно будет только с этого счёта.
В transfer и createCheck код USDT тоже допустим: деньги спишутся с первой сети, где на балансе приложения хватает суммы, в порядке TRC20 → BEP20 → TON → ERC20. Если суммы не хватает ни в одной сети, вернётся ошибка INSUFFICIENT_FUNDS. Получатель получит деньги в той же сети — она указана в поле asset ответа.
Счета в долларах и рублях
Счёт можно выставить в долларах (USD) или рублях (RUB): для этого передайте currency_type=fiat и fiat. Пользователь выберет, чем платить, из разрешённых монет (accepted_assets). Сумма к оплате пересчитывается по курсу в момент оплаты и округляется вверх до минимальной единицы монеты.
По умолчанию фиатный счёт принимает USDT, TRX, BNB, ETH, GRAM и RUB (из них — те, что сейчас доступны). XAUT в этот список не входит — чтобы принимать его, перечислите монеты в accepted_assets явно.
Курсы, по которым пересчитываются фиатные счета, возвращает getExchangeRates. Фактический курс оплаты сохраняется в счёте в полях paid_fiat_rate и paid_usd_rate.
Рубли
Сейчас оплатить счёт с рублёвого счёта нельзя, а рубли нельзя передать другим пользователям:
asset=RUBвcreateInvoiceвернёт ошибкуPARAM_ASSET_INVALID;RUBвaccepted_assetsпри оплате не учитывается, а если в списке толькоRUB— вернётся ошибкаPARAM_ACCEPTED_ASSETS_INVALID;asset=RUBвtransferиcreateCheckвернёт ошибку403 TEMPORARILY_UNAVAILABLE.
Цену счёта при этом можно указывать в рублях (currency_type=fiat, fiat=RUB) — пользователь заплатит другой монетой.
Формат сумм
Суммы передаются и возвращаются строками с точкой: "12.5", "0.000001".
- В JSON можно передать и число, но не больше знаков, чем у монеты. Например,
12.5000001для USDT (6 знаков) — ошибкаPARAM_AMOUNT_INVALID, никакого округления нет. - Сумма должна быть больше нуля, без знака, пробелов и разделителей тысяч, не больше 15 цифр до точки.
- Нули в конце не считаются лишними знаками:
"12.500000000"для USDT — это12.5. - В ответах лишние нули отбрасываются:
"12.5", а не"12.500000".
Не считайте деньги в типе float. Используйте библиотеки точной арифметики, например decimal.js или Big.js в JavaScript и decimal в Python.