Перейти к содержанию

Операции в криптовалюте

Вариант интеграции XP

Систeма MerchantPay позволяет вам проводить операции оплаты и выплаты в криптовалюте. Этот способ оплаты поддерживает работу со следующими криптовалютами:

Название криптовалюты Код криптовалюты Стандарт криптовалюты
Название криптовалюты Код криптовалюты Стандарт криптовалюты
Ethereum ETH
Tether USDT ERC20
Передавайте в запросах как пустую строку ("").
Tether USDT TRC20
Tether USDT BEP20
Binance USD BUSD BEP20
Binance USD BUSD ERC20
Передавайте в запросах как пустую строку ("").
Bitcoin BTC
Dai DAI ERC20
Передавайте в запросах как пустую строку ("").
Dai DAI BEP20
Dash DASH
Dogecoin DOGE
HUSD HUSD ERC20
Передавайте в запросах как пустую строку ("").
Litecoin LTC
TrueUSD TUSD ERC20
Передавайте в запросах как пустую строку ("").
USD Coin USDC ERC20
Передавайте в запросах как пустую строку ("").
USD Coin USDC BEP20
XRP XRP
Huobi Token HT TRC20
HUSD HUSD TRC20
Ethereum ETH TRC20
Ethereum ETH BEP20
TRON TRX
BNB BNB
Cardano ADA BEP20
CasinoCoin CSC Ripple
Dexsport DESU BEP20
Axie Infinity AXS TRC20
Axie Infinity AXS ERC20
Передавайте в запросах как пустую строку ("").
Bitcoin BEP2 BTCB BEP20

Оплата

Процесс проведения платежа в криптовалюте содержит следующие этапы:

  1. Покупатель инициирует проведение оплаты в выбранной криптовалюте.
  2. Торговец выполняет запрос на формирование виджета, на создание токена платежа в случае его использования или запрос на проведение оплаты с параметрами, указанными ниже.
    • В случае интеграции с виджетом, виджет MerchantPay покажет покупателю инструкцию о проведении оплаты c QR-кодом.
    • В случае API запроса торговец самостоятельно формирует страницу с инструкцией о проведении оплаты, используя значения параметров, полученных в ответе на запрос.
  3. Покупатель проводит платеж согласно полученной инструкции.
  4. MerchantPay получает информацию о платеже. Покупатель видит результат проведения платежа в виджете. Торговцу приходит автоматическое уведомление о статусе платежа, если в запросе на формирование виджета и в запросе на проведение оплаты был передан параметр notification_url.

Info

В автоматических уведомлениях сумма транзакции указывается как сумма платежа, умноженная на 100 000 000 и округленная согласно правилам математического округления.

Info

QR код действителен только в течении 30 минут.

Запрос

Параметры для инициализации виджета или создания токена

Отправьте запрос на формирование виджета или создание токена платежа, где укажите следующие дополнительные параметры:

object
Секция параметров платежа.
amount
обязательный
integer
Следует установить в значении 0. Сумма оплаты будет указана в автоматическом уведомлении.
currency
обязательный
string
Код криптовалюты. Список возможных значений смотрите в таблице выше или в справочнике кодов криптовалют.
object
Секция информации о способах оплаты.
types
обязательный
array
Массив способов оплаты для отображения покупателю. Добавьте crypto_currency как элемент этого массива.
object
Секция параметров оплаты криптовалютой.
token_standard
обязательный
string
Стандарт криптовалюты. Список возможных значений смотрите выше.
tag
условно обязательный
string
ID получателя оплаты. Обязательный параметр для платежей в TRX.

Параметры API запроса

Для приема платежа проведите транзакцию оплаты со следующими дополнительными параметрами:

amount
обязательный
integer
Следует установить в значении 0. Сумма оплаты будет указана в автоматическом уведомлении.
currency
обязательный
string
Код криптовалюты. Список возможных значений смотрите в таблице выше или в справочнике кодов криптовалют.
object
Секция данных платежного метода.
type
обязательный
string
Следует установить в значении crypto_currency.
token_standard
обязательный
string
Стандарт криптовалюты. Список возможных значений смотрите выше.
tag
условно обязательный
string
ID получателя оплаты. Обязательный параметр для платежей в TRX.
Ответ

В случае интеграции с виджетом, покупатель получает инструкцию о проведении оплаты c QR-кодом в виджете MerchantPay.

В случае API интеграции, ответ на запрос оплаты будет дополнительно содержать секцию crypto_currency со следующими параметрами:

object
Секция параметров оплаты криптовалютой.
type
string
crypto_currency.
currency
string
Код криптовалюты.
id
string
Идентификатор платежа в системе провайдера.
minimumAmount
string
Минимально допустимая сумма платежа в выбранной валюте.
address
string
ID получателя оплаты.
destinationTag
string
ID получателя оплаты для платежей в TRX.
rate
string
Комиссия, взимая за платеж в выбранной валюте.
qrCode
string
QR код, закодированный в Base64.
expDate
string
Время окончания срока действия QR кода по UTC.

Используйте значения параметров при построении формы для отображения соответствующей информации покупателям.


Выплата средств

Процесс проведения выплаты в криптовалюте содержит следующие этапы:

  1. Покупатель инициирует проведение выплаты в выбранной криптовалюте.
  2. Торговец выполняет запрос на выплату средств с параметрами, указанными ниже.
  3. Система проверяет баланс и проводит выплату.
  4. Торговцу приходит автоматическое уведомление о статусе платежа, если в запросе на проведение выплаты был передан параметр notification_url.

Info

В автоматических уведомлениях сумма транзакции указывается как сумма выплаты, умноженная на 100 000 000 и округленная согласно правилам математического округления.

Запрос

Отправьте запрос выплаты средств со следующими данными:

amount
обязательный
integer
Сумма выплаты. Укажите значение параметра как количество денежных единиц криптовалюты, умноженное на 100 000 000. Больше информации в справочнике кодов криптовалют.
currency
обязательный
string
Название криптовалюты. Список возможных значений смотрите в таблице выше или в справочнике кодов криптовалют.
object
Секция данных платежного метода.
type
обязательный
string
Следует установить в значении crypto_currency.
recipient_wallet_id
обязательный
string
Номер кошелька получателя выплаты.
token_standard
обязательный
string
Стандарт криптовалюты. Список возможных значений смотрите выше.
tag
условно обязательный
string
ID получателя выплаты. Обязательный параметр для платежей в TRX.
Ответ

Ответ на запрос оплаты будет дополнительно содержать секцию crypto_currency с указанием параметров способа оплаты.

Вариант интеграции OP

Этот вариант интеграции позволяет вам проводить операции оплаты и выплаты средств в криптовалюте. Этот способ поддерживает работу со следующими криптовалютами:

Название валюты Код валюты в запросе
TRON TRX
Tether USDT
Litecoin LTC
Bitcoin Cash BCH
USDD USDD
USD Coin USDC
Bitcoin BTC
Binance USD BUSD
BNB BNB

Операция оплаты

Процесс проведения операции оплаты

Процесс проведения оплаты содержит следующие этапы:

  1. Вы инициируете запрос доступных валют и сетей, чтобы уточнить, в какой валюте и через какую сеть можно провести оплату, если эти параметры неизвестны. Иначе, перейдите к шагу 3.
  2. Система MerchantPay предоставит список возможных валют и сетей.
  3. Вы отправляете запрос на оплату с выбранной валютой и сетью.
  4. В ответе на запрос система присылает ссылку, на которую необходимо перенаправить клиента для проведения оплаты. Транзакция имеет статус pending до момента оплаты.
  5. Когда клиент проводит оплату, с вашего авансового баланса происходит списание средств.
  6. Вам приходит автоматическое уведомление о статусе платежа, если в запросе на проведение оплаты был передан параметр notification_url.

Запрос доступных валют и сетей
Запрос

Чтобы узнать, в какой валюте и через какую сеть можно провести оплату, отправьте запрос доступных валют и сетей.

Ответ

Ответ на запрос будет содержать массив данных валют и сетей для проведения оплаты.

Доступны для проведения платежа те валюты и сети, которые в параметре allowDeposit имеют значение true.

Пример успешного ответа на запрос доступных валют и сетей
{
    "code": "S.0000",
    "status": "Successful",
    "friendly_message": "Successfully processed",
    "gateway_id": 1234,
    "provider_info": [
        {
            "currency": "TRX",
            "alias": "Tron",
            "allowDeposit": true,
            "allowWithdrawal": true,
            "priceUSD": "0.05908000",
            "networks": [
                {
                    "name": "tron",
                    "alias": "Tron (TRC20)",
                    "allowDeposit": true,
                    "allowWithdrawal": true,
                    "withdrawalFee": "1",
                    "withdrawalMin": 0,
                    "confirmations": 10,
                    "underMaintenance": false,
                    "isDefault": false,
                    "contract": null,
                    "addressRegex": "^T[1-9A-HJ-NP-Za-km-z]{35}$",
                    "tagRegex": ""
                }
            ]
        },
        {
            "currency": "USDT",
            "alias": "Tether USD",
            "allowDeposit": true,
            "allowWithdrawal": true,
            "priceUSD": "0.99820324",
            "networks": [
                {
                    "name": "solana",
                    "alias": "Solana",
                    "allowDeposit": true,
                    "allowWithdrawal": true,
                    "withdrawalFee": "0.8",
                    "withdrawalMin": 0,
                    "confirmations": 4,
                    "underMaintenance": false,
                    "isDefault": false,
                    "contract": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe9BenwNYB",
                    "addressRegex": "^[0-9a-zA-Z]{37,44}$",
                    "tagRegex": ""
                },
                {
                    "name": "ethereum",
                    "alias": "Ethereum (ERC20)",
                    "allowDeposit": true,
                    "allowWithdrawal": true,
                    "withdrawalFee": "3.2",
                    "withdrawalMin": 0,
                    "confirmations": 12,
                    "underMaintenance": false,
                    "isDefault": false,
                    "contract": "0xdac17f958d2ee523a2206206994597c13d841ec7",
                    "addressRegex": "^(0x)[0-9A-Fa-f]{40}$",
                    "tagRegex": ""
                }
            ]
        }
    ]
}

Оплата

Запрос

Отправьте запрос оплаты со следующими дополнительными данными:

amount
обязательный
integer
Сумма оплаты. Укажите значение параметра как количество денежных единиц криптовалюты, умноженное на 100 000 000. Больше информации в справочнике кодов криптовалют.
currency
обязательный
string
Валюта оплаты. Укажите значение параметра как код криптовалюты, например USDT.
object
Секция парметров платежного метода.
type
обязательный
string
Тип платежного метода. Установите в значении crypto_currency.
lifetime
string
Срок действия запроса на оплату в секундах. По умолчанию, 43200 (12 часов).
token_standard
обязательный
string
Сеть криптовалюты. Установите в значении provider_info.networks.name для выбранной сети из ответа на запрос доступных валют и сетей.
balance_id
обязательный
string
Идентификатор авансового баланса.
Пример запроса оплаты
{
  "request":{
      "amount":16400000,
      "currency":"LTC",
      "description":"description",
      "test": true,
      "tracking_id":"your_unique_number",
      "language":"en",
      "notification_url":"https://merchant.ltd/notification",
      "return_url":"https://merchant.ltd/return",
      "method": {
              "type": "crypto_currency",
              "lifetime": "43200",
              "token_standard": "litecoin",
              "balance_id": "2ceaad5d-751a-4bff-b951-787c341e33ad"
          }
  }
}
Ответ

Ответ на запрос оплаты будет дополнительно содержать секцию crypto_currency с указанием платежного метода и его параметров, а также секцию form со ссылкой для перехода к странице завершения платежа.

Направьте клиента на URL, переданный как значение параметра form.action.

Пример успешного ответа
{
    "transaction": {
        "uid": "436cea91-1155-498c-8620-17e4866588b9",
        "type": "payment",
        "status": "pending",
        "amount": 16400000,
        "currency": "LTC",
        "description": "description",
        "created_at": "2022-11-09T12:38:51Z",
        "updated_at": "2022-11-09T12:38:52Z",
        "method_type": "crypto_currency",
        "receipt_url": "https://backoffice.universepay.eu/customer/transactions/436cea91-1155-498c-8620-17e4866589b9/53250553c58d4cf926eb1aa3fa9120f10b492df11a70a6c32f91dbac68619a71?language=ru",
        "payment": {
            "status": "pending",
            "gateway_id": 1234,
            "ref_id": "2ceaad5d-751a-4bff-b951-787c341e33ad",
            "message": "Transaction was initialized."
        },
        "crypto_currency": {
            "type": "crypto_currency",
            "balance_id": "2ceaad5d-751a-4bff-b951-787c341e33ad",
            "token_standard": "litecoin",
            "lifetime": 43200
        },
        "customer": {
            "ip": "127.0.0.1"
        },
        "message": "Transaction was initialized.",
        "tracking_id": "test crypto_currency",
        "test": true,
        "language": "ru",
        "billing_address": {
            "ip": "127.0.0.1"
        },
        "additional_data": {
            "payment_method": {
                "type": "alternative"
            }
        },
        "form": {
            "action": "https://ocp.op.io/merchant/checkout/3f8dd21b-e7e8-4834-8abb-c5209c050d69",
            "method": "GET",
            "fields": []
        }
    }
}

Выплата средств

Процесс проведения операции выплаты

Процесс выплаты средств содержит следующие этапы:

  1. При необходимости вы инициируете следующие запросы:

  2. Система предоставляет ответы на запросы шага 1.

  3. Вы отправляете запрос выплаты средств с выбранного адреса.
  4. Система высылает ответ с данными и статусом транзакции.

Info

Комиссия за выплату токенов списывается с вашего авансового баланса. Если на авансовом балансе недостаточно средств на покрытие коммиссии, выплата может быть отклонена.

Запрос доступных валют и сетей
Запрос

Чтобы узнать, в какой валюте и через какую сеть можно провести выплату, отправьте запрос доступных валют и сетей.

Ответ

Ответ на запрос будет содержать массив данных валют и сетей для проведения выплаты, а также комиссию за эту операцию.

Доступны для проведения платежа те валюты и сети, которые в параметре allowWithdrawal имеют значение true. Комиссия за проведение выплаты указана для каждой сети как значение параметра withdrawalFee в денежных единицах криптовалюты.

Пример успешного ответа на запрос доступных валют и сетей
{
    "code": "S.0000",
    "status": "Successful",
    "friendly_message": "Successfully processed",
    "gateway_id": 1234,
    "provider_info": [
        {
            "currency": "TRX",
            "alias": "Tron",
            "allowDeposit": true,
            "allowWithdrawal": true,
            "priceUSD": "0.05908000",
            "networks": [
                {
                    "name": "tron",
                    "alias": "Tron (TRC20)",
                    "allowDeposit": true,
                    "allowWithdrawal": true,
                    "withdrawalFee": "1",
                    "withdrawalMin": 0,
                    "confirmations": 10,
                    "underMaintenance": false,
                    "isDefault": false,
                    "contract": null,
                    "addressRegex": "^T[1-9A-HJ-NP-Za-km-z]{35}$",
                    "tagRegex": ""
                }
            ]
        },
        {
            "currency": "USDT",
            "alias": "Tether USD",
            "allowDeposit": true,
            "allowWithdrawal": true,
            "priceUSD": "0.99820324",
            "networks": [
                {
                    "name": "solana",
                    "alias": "Solana",
                    "allowDeposit": true,
                    "allowWithdrawal": true,
                    "withdrawalFee": "0.8",
                    "withdrawalMin": 0,
                    "confirmations": 4,
                    "underMaintenance": false,
                    "isDefault": false,
                    "contract": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
                    "addressRegex": "^[0-9a-zA-Z]{37,44}$",
                    "tagRegex": ""
                },
                {
                    "name": "ethereum",
                    "alias": "Ethereum (ERC20)",
                    "allowDeposit": true,
                    "allowWithdrawal": true,
                    "withdrawalFee": "3.2",
                    "withdrawalMin": 0,
                    "confirmations": 12,
                    "underMaintenance": false,
                    "isDefault": false,
                    "contract": "0xdac17f958d2ee523a2506206994597c13d931ec7",
                    "addressRegex": "^(0x)[0-9A-Fa-f]{40}$",
                    "tagRegex": ""
                }
            ]
        }
    ]
}

Запрос авансового баланса

Запрос

Чтобы узнать, достаточно ли средств для покрытия комиссии за выплату, отправьте запрос баланса, где в качестве значения параметра account укажите идентификатор вашего авансового баланса.

Ответ

Ответ на запрос содержит сумму авансового баланса как значение параметра provider_info.response.balance.

Info

Сумма баланса указана в денежных единицах криптовалюты.

Пример успешного ответа
{
    "code": "S.0000",
    "status": "Successful",
    "friendly_message": "Successfully processed",
    "gateway_id": 1234,
    "account": "2ceaad5d-751a-4bff-b951-787c341e33ad",
    "amount": "3.400780144",
    "currency": "USD",
    "provider_info": {
        "success": true,
        "response": {
            "advancedBalanceId": "2ceaad5d-751a-4bff-b951-787c341e33ad",
            "currency": "USD",
            "blocked": false,
            "blockReason": null,
            "balance": "3.400780144",
            "availableCurrenciesForDeposit": [
                "USDT",
                "USDC",
                "USDD"
            ]
        }
    }
}

Запрос адресов для проведения выплаты

Запрос

Чтобы узнать балансы и идентификаторы адресов, с которых можно провести выплату, отправьте GET запрос на https://apm.universepay.eu/beyag/on_chain_pay/addresses/{advanced_balance_id}, где {advanced_balance_id} - это идентификатор вашего авансового баланса.

Пример запроса
curl --location --request GET 'https://apm.universepay.eu/beyag/on_chain_pay/addresses/2ceaad5d-751a-4bff-b951-787c341e33ad' 
--header 'Content-Type: application/json' 
--header 'Accept: application/json' 
--header 'Authorization: Basic MTYwOmQxMDc1MjhlYjE3MzFlNWY5MTk2MWE3NDEyYTUyZWYyOWVm1WVhODc5ODZiZTk3YmM3NzI2NWU0NjEzNzM5YzE='
Ответ

Ответ на запрос содержит массив данных тех адресов, с которых возможны выплаты.

Пример ответа
{
    "success": true,
    "response": [
        {
            "id": "2d28222b-1d69-4dda-a590-1102efa590d7",
            "advancedBalanceId": "2ceaad5d-751a-4bff-b951-787c341e33ad",
            "currency": "LTC",
            "network": "litecoin",
            "address": "LTJdrbZ9wLS8MXkRCDZgSXZihpbgLWXfpo",
            "tag": "",
            "balance": "0"
        },
        {
            "id": "48f77919-c43f-4961-ab09-c3641d794eda",
            "advancedBalanceId": "2ceaad5d-751a-4bff-b951-787c341e33ad",
            "currency": "LTC",
            "network": "litecoin",
            "address": "LWMbqYuL49adXrHFHVuvgGuKWenuPxvHUX",
            "tag": "",
            "balance": "0"
        },
        {
            "id": "6b7b937f-e798-4003-a97e-eda28503ca9c",
            "advancedBalanceId": "2ceaad5d-751a-4bff-b951-787c341e33ad",
            "currency": "USDT",
            "network": "tron",
            "address": "TYyA96pmdiwcR75gqRLfpRPtipYPLz3qDh",
            "tag": "",
            "balance": "0"
        },
        {
            "id": "2470df4b-1eb4-4058-bf06-f10d1d995cef",
            "advancedBalanceId": "2ceaad5d-751a-4bff-b951-787c341e33ad",
            "currency": "USDT",
            "network": "tron",
            "address": "THaMuoyQL9s1iyrCeaDeQqo7pDnPnRFg7x",
            "tag": "",
            "balance": "23"
        },
        {
            "id": "586977ba-21b1-474c-98f0-d044948498a4",
            "advancedBalanceId": "2ceaad5d-751a-4bff-b951-787c341e33ad",
            "currency": "USDT",
            "network": "bsc",
            "address": "0xf1A8BD9384F505CE01DdE56d1E98c2cD9D060718",
            "tag": "",
            "balance": "0"
        }
    ]
}

Выплата средств

Запрос

Отправьте запрос выплаты средств со следующими данными:

amount
обязательный
integer
Сумма выплаты. Укажите значение параметра как количество денежных единиц криптовалюты, умноженное на 100 000 000. Больше информации в справочнике кодов криптовалют.
currency
обязательный
string
Валюта выплаты. Укажите значение параметра как код криптовалюты, например USDT.
object
Секция параметров способа оплаты.
type
обязательный
string
Тип платежного метода. Установите в значении crypto_currency.
network
обязательный
string
Название сети для проведения выплаты. Устанавливается как значение name выбранной сети.
advanced_balance_id
обязательный
string
Идентификатор авансового баланса.
address_id
обязательный
string
Идентификатор адреса, с которого необходимо произвести выплату. Устанавливается как значение id из ответа на запрос адресов для проведения выплаты.
address
обязательный
string
Идентификатор адреса, на который необходимо произвести выплату.

Info

Пожалуйста, убедитесь в правильности адреса, на который производите выплату. В случае ошибки возврат средств не возможен.

Пример запроса
{
  "request": {
      "amount": 16700000,
      "currency": "LTC",
      "description": "payout description",
      "test": true,
      "expired_at": "2024-01-01T15:00:00+01:00",
      "tracking_id": "your_unique_number",
      "language": "en",
      "method": {
        "type": "crypto_currency",
        "network": "litecoin",
        "advanced_balance_id": "2ceaad5d-751a-4bff-b951-787c341e33ar",
        "address_id": "1e20326b-f34d-4c7d-8f0f-f2d57708016f",
        "address": "MDtmcmfXMwoJfBnh5AGqX5SteiZPAXqAdP"   
      }
  }
}
Ответ

Ответ на запрос выплаты содержит секцию crypto_currency с данными платежного метода из запроса.

Пример успешного ответа
{
  "transaction": {
      "uid": "11fede31-7086-4620-8c46-25c8726a0156",
      "type": "payout",
      "status": "successful",
      "amount": 16700000,
      "currency": "LTC",
      "description": "payout description",
      "created_at": "2022-09-29T19:17:41Z",
      "updated_at": "2022-09-29T19:17:42Z",
      "method_type": "crypto_currency",
      "receipt_url": "https://backoffice.universepay.eu/customer/transactions/11fede31-7086-4620-8c46-25c8726a0156/5258a8f68f6bc45bc8d45a6febfeac9724c25cd56839da2b3138f3641c90ef07?language=en%22",
      "payout": {
      "status": "successful",
      "gateway_id": 1234,
      "ref_id": "65dd1c6d-9790-4039-be5a-9eff5736fcba",
      "message": "Transaction successfully processed."
      },
      "crypto_currency": {
      "type": "crypto_currency",
      "advanced_balance_id": "2ceaad5d-751a-4bff-b951-787c341e33ar",
      "address_id": "1e20326b-f34d-4c7d-8f0f-f2d57708016f",
      "address": "MDtmcmfXMwoJfBnh5AGqX5SteiZPAXqAdP"
      },
      "message": "Transaction successfully processed.",
      "tracking_id": "your_unique_number",
      "test": true,
      "language": "en",
      "paid_at": "2022-09-29T19:17:42+00:00",
      "additional_data": {
      "payment_method": {
          "type": "alternative"
      }
      }
  }
}

Уточнение статуса транзакции

Если необходимо дополнительно уточнить статус транзакции, отправьте запрос получения статуса платежа.