Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 9 Next »

Данный метод требует наличия PCI DSS сертификата или PCI Compliance (сканирование) .

Этот функционал будет активирован после вашего запроса в групповом чате. Также обязательно сообщите IP адреса, с которых будут отправляться запросы для добавления
в белый список.

Ваш сайт должен работать по схеме HTTPS и поддерживать протокол TLS 1.2.



Описание

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

Верификация карты используется кредитными организациями для:

  • Подтверждения личности владельца карты

  • Получения токенов RC_TOKEN и CARD_TOKEN для последующих выплат и списаний. Детальнее в разделе Особенности токенов

Одну карту можно верифицировать несколько раз. Все RC_TOKEN и CARD_TOKEN полученные при каждой верификации будут разные и активные для дальнейшего использования.


Требования к сайту


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

HTTP METHOD: POST

API ENDPOINT: https://secure.platononline.com/post-unq/


Параметр

Значение

Описание

Особенности

Обязательно

action

SALE

Код платежного метода

ДА

async

"Y" или "N"

Включить асинхронный режим

В асинхронном режиме обязательное использование коллбеков.
По умолчанию значение "N"

НЕТ

channel_id

String

Дополнительный платежный канал

Значение “VERIFY_ZERO“ для нулевой верификации.

Значение “VERIFY“ для обычной верификации со списанием.

ДА

client_key

String

API ключ мерчанта

Ключ предоставляется на почту мерчанту

ДА

order_id

String

ID платежа в системе мерчанта

Max 32 символа

ДА

order_amount

1.00

Сумма платежа

Указать 1.00 грн. Фактического списания не будет при нулевой верификации.

Запрещено указывать 0.

ДА

order_currency

UAH

Валюта платежа

Оплата возможна только в национальной валюте гривне

ДА

order_description

String

Описание платежа

Для кириллических символов необходимо использовать формат UTF-8

Max 255 символов

ДА

payer_first_name

String

Имя плательщика

Max 32 символа без пробелов

НЕТ

payer_last_name

String

Фамилия плательщика

Max 32 символа без пробелов

НЕТ

payer_address

String

Адрес плательщика

Max 256 символа
Укажите "NA", если нет данных

НЕТ

payer_country

String

Страна плательщика

Стандарт ISO 3166-1 alpha-2
В формате "ХХ"
2 символа
Укажите "NA", если нет данных

НЕТ

payer_state

String

Штат плательщика

Обязательный параметр для стран US, CA, AU

Стандарт ISO 3166-2
В формате "ХХ"
2 символа
Укажите "NA", если нет данных

НЕТ

payer_city

String

Город плательщика

Max 32 символа
Укажите "NA", если нет данных

НЕТ

payer_zip

String

Почтовый индекс плательщика

Max 32 символа
Укажите "NA", если нет данных

НЕТ

payer_email

String

Почта плательщика

Max 255 символа

НЕТ

payer_phone

Number

Номер телефона плательщика

Если ваше юр. лицо открыто в Приватбанк и вы передаете в запросе телефон плательщика, то:

1) обязательный формат телефона 380…

2) номер телефона должен соответствовать финансовому номеру привязанному к карте

НЕТ

payer_ip

Number

IP-адрес плательщика

В формате "ХХХ.ХХХ.ХХХ.ХХХ"

IPv6 на данный момент не поддерживается

ДА

customer_wallet

String

Номер електронного кошелька пользователя

Поле обязательно для типов бизнеса связаных с виртуальными активами

НЕТ

term_url_3ds

String

Ссылка по которой будет отправлен клиент после успешной оплаты при прохождении 3DS

Max 255 символов

ДА

card_number

Number

Полный номер карты

В формате "ХХХХХХХХХХХХХХХХ"
16 символов

ДА

card_exp_month

Number

Месяц окончания срока действия карты

В формате "ХХ"
2 символа

ДА

card_exp_year

Number

Год окончания срока действия карты

В формате "ХХХХ"
4 символа

ДА

card_cvv2

Number

Проверочный код на карте

В формате "ХХХ"
3 символа

ДА

req_token

"Y" или "N"

Для получения card_token

По умолчанию "N"

ДА

recurring_init

"Y" или "N"

Для получения rc_id и rc_token

По умолчанию "N"

ДА

auth

"Y" или "N"

Холдирование средств на карте плательщика

По умолчанию "N"

НЕТ

hash

String

Контрольная подпись

md5(
  strtoupper(
    strrev(email).
    client_pass.
    strrev(
      substr(card_number,0,6).
      substr(card_number,-4)
    )
  )
)

ДА


Примеры запроса

Для просмотра примера раскройте список

 Пример запроса на PHP
<?php
  $client_pass = '***';
  $data['action'] = 'SALE';
  $data['client_key'] = '***';
  $data['order_id'] = '546-4588';
  $data['order_amount'] = '1.00';
  $data['order_currency'] = 'UAH';
  $data['order_description'] = 'test';
  $card_number = '4111111111111111';
  $data['card_cvv2'] = '159';
  $data['card_exp_month'] = '01';
  $data['card_exp_year'] = '2022';
  $data['payer_first_name'] = 'Ivan';
  $data['payer_last_name'] = 'Ivanov';
  $data['payer_phone'] = '380111111111';
  $data['payer_address'] = 'NA';
  $data['payer_country'] = 'UA';
  $data['payer_state'] = 'NA';
  $data['payer_city'] = 'Kiev';
  $data['payer_zip'] = '01001';
  $data['payer_email'] = 'sale@gmail.com';
  $data['payer_ip'] = '213.186.115.164';
  $data['req_token'] = 'N';
  $data['recurring_init'] = 'N';
  $data['term_url_3ds'] = 'https://google.com';
  $hash = md5(
            strtoupper(
              strrev(
                $data['payer_email']).
                ($client_pass).
                strrev(
                  substr($card_number,0,6).
                  substr($card_number,-4)
                )
              )
            );
?>

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>sale</title>
  </head>
  <body onload="javascript:document.forms[0].submit()">
    <form action="https://secure.platononline.com/post-unq/" method="post">
      <input type="hidden" name="action" value="<?=$data['action']?>" />
      <input type="hidden" name="client_key" value="<?=$data['client_key']?>" />
      <input type="hidden" name="order_id" value="<?=$data['order_id']?>" />
      <input type="hidden" name="order_amount" value="<?=$data['order_amount']?>" />
      <input type="hidden" name="order_currency" value="<?=$data['order_currency']?>" />
      <input type="hidden" name="order_description" value="<?=$data['order_description']?>" />
      <input type="hidden" name="card_number" value="<?=$card_number ?>" />
      <input type="hidden" name="card_cvv2" value="<?=$data['card_cvv2']?>" />
      <input type="hidden" name="card_exp_month" value="<?=$data['card_exp_month']?>" />
      <input type="hidden" name="card_exp_year" value="<?=$data['card_exp_year']?>" />
      <input type="hidden" name="payer_first_name" value="<?=$data['payer_first_name']?>" />
      <input type="hidden" name="payer_last_name" value="<?=$data['payer_last_name']?>" />
      <input type="hidden" name="payer_phone" value="<?=$data['payer_phone']?>" />
      <input type="hidden" name="payer_address" value="<?=$data['payer_address']?>" />
      <input type="hidden" name="payer_country" value="<?=$data['payer_country']?>" />
      <input type="hidden" name="payer_state" value="<?=$data['payer_state']?>" />
      <input type="hidden" name="payer_city" value="<?=$data['payer_city']?>" />
      <input type="hidden" name="payer_zip" value="<?=$data['payer_zip']?>" />
      <input type="hidden" name="payer_email" value="<?=$data['payer_email']?>" />
      <input type="hidden" name="payer_ip" value="<?=$data['payer_ip']?>" />
      <input type="hidden" name="req_token" value="<?=$data['req_token']?>" />
      <input type="hidden" name="recurring_init" value="<?=$data['recurring_init']?>" />
      <input type="hidden" name="term_url_3ds" value="<?=$data['term_url_3ds']?>" />
      <input type="hidden" name="hash" value="<?=$hash?>" />
    </form>                                             
  </body>
</html>


Тестирование

Тестирование нулевой верификации производиться только реальными картами.


Проверка платежей

Получить информацию о платежах можно несколькими способами:


Работа с Callback

Рекомендуем ознакомиться с разделами:


Callback и Response (Синхронный режим)

Для просмотра примера раскройте список

 Промежуточный Response при наличии проверки 3DS
{
  "action":"SALE",
  "result":"REDIRECT",
  "status":"3DS",
  "order_id":"6b51033e-3e58-42e0-8ec3-88c97388018b",
  "trans_id":"28738-47774-55067",
  "trans_date":"2020-04-20 12:12:57",
  "redirect_url":"https:\/\/acs.privatbank.ua\/pPaReqMC.jsp",
  "redirect_params":{
    "PaReq":"eJxVUllu2zAQvYqg\/4qUIlFUMGYgxykaoEqN2j4AIxGxUi2Olsb+K\/qTG+S3VygKpGhRtL0CdaMMHWUDSHDeLJw3Cxxty8L6rJo2r6uJ7TrUtlSV1lleXUzs1fLtG24fCViuG6VmC5X2jRKQqLaVF8rKs4k9lx\/VlRvw8ID7YRhFYcgDHrmeF\/KQc8apG\/jcFjCP0U\/AmElgIscD8gjxyyZdy6oTINOr6emZwCgWcCAjhFI1pzPBXB66jAF5gFDJUolpPF29P1k4xx8SZxUD2Sshrfuqa3aCUx\/II4C+KcS66zbtISGbQnZ1VeSVctK6BGJsQJ6ZzHsjtfjXNs9EMouv8e7w0uQy3p4t6HWy\/IT4ZALEeEAmOyU86lHqe9RyvUM8QQRkrwdZGhKmcoplPQDYmBzxaDGGlwrAdjc4jZ2IOJqeEKjtpq4UemALn2TIVJsK\/U3fDV\/0nf4x3OL7b7jRf\/Uv\/dvS\/\/Uf\/X34Otzqn9a5PO8L1Zq6nV4iQxMK5Lni43dmEmmHTfZdN2CMMz\/wzTj2OsMgx356B5TtKRgAxESRcdJk3BKUXm3PPfYf2CM=",
    "TermUrl":"https:\/\/secure.platononline.com\/3ds\/4de0025?operation_type=purchase&trans_id=28738-47774-55067&hash=*****************************************************************************"
  }
}

Параметры

Описание

action

SALE

result

REDIRECT

status

3DS

order_id

Уникальный ордер ID транзакции в системе мерчанта

trans_id

Уникальный ордер ID транзакции в системе Platon

trans_date

Время проведения транзакции в формате UTC (YYYY-MM-DD HH-MM-SS)

redirect_url

URL, на который должен быть перенаправлен плательщик

redirect_params

Строка параметров

 Промежуточный Callback при наличии проверки 3DS
array (
  'action' => 'SALE',
  'result' => 'REDIRECT',
  'status' => '3DS',
  'order_id' => '6b51033e-3e58-42e0-8ec3-88c97388018b',
  'trans_id' => '28738-47774-55067',
  'trans_date' => '2020-04-20 12:12:57',
  'redirect_url' => 'https://acs.privatbank.ua/pPaReqMC.jsp',
  'redirect_params' => 
    array (
      'PaReq' => 'eJxVUllu2zAQvYqg/4qUIlFUMGYgxykaoEqN2j4AIxGxUi2Olsb+K/qTG+S3VygKpGhRtL0CdaMMHWUDSHDeLJw3Cxxty8L6rJo2r6uJ7TrUtlSV1lleXUzs1fLtG24fCViuG6VmC5X2jRKQqLaVF8rKs4k9lx/VlRvw8ID7YRhFYcgDHrmeF/KQc8apG/jcFjCP0U/AmElgIscD8gjxyyZdy6oTINOr6emZwCgWcCAjhFI1pzPBXB66jAF5gFDJUolpPF29P1k4xx8SZxUD2Sshrfuqa3aCUx/II4C+KcS66zbtISGbQnZ1VeSVctK6BGJsQJ6ZzHsjtfjXNs9EMouv8e7w0uQy3p4t6HWy/IT4ZALEeEAmOyU86lHqe9RyvUM8QQRkrwdZGhKmcoplPQDYmBzxaDGGlwrAdjc4jZ2IOJqeEKjtpq4UemALn2TIVJsK/U3fDV/0nf4x3OL7b7jRf/Uv/dvS//Uf/X34Otzqn9a5PO8L1Zq6nV4iQxMK5Lni43dmEmmHTfZdN2CMMz/wzTj2OsMgx356B5TtKRgAxESRcdJk3BKUXm3PPfYf2CM=',
      'TermUrl' => 'https://secure.platononline.com/3ds/4de0025?operation_type=purchase&trans_id=28738-47774-55067&hash=***************************************************
    ),
  'redirect_method' => 'POST',
  'hash' => '********************************',
)

Параметры

Описание

action

SALE

result

REDIRECT

status

3DS

order_id

Уникальный ордер ID транзакции в системе мерчанта

trans_id

Уникальный ордер ID транзакции в системе Platon

trans_date

Время проведения транзакции в формате UTC (YYYY-MM-DD HH-MM-SS)

redirect_url

URL, на который должен быть перенаправлен плательщик

redirect_params

Строка параметров

redirect_method

Метод передачи параметров (POST/GET)

hash

Зашифрованная подпись для проверки достоверности коллбека

 Response при успешном списании
{
  "action":"SALE",
  "result":"SUCCESS",
  "status":"SETTLED",
  "order_id":"4385302",
  "trans_id":"28261-34099-19648",
  "descriptor":null,
  "trans_date":"2020-02-25 06:50:09"
  "recurring_token":"01e00c2b39bb3b933723307c442efd02",
  "card_token":"8ef3111ac1093f6ccb817acef7f0845601d0994689a5f57949f94b0d086c7fe2"
}

Параметр

Описание

action

SALE

result

SUCCESS

status

SETTLED (PENDING, если в запросе было указано ‘auth’='Y')

order_id

Уникальный ордер ID транзакции в системе мерчанта

trans_id

Уникальный ордер ID транзакции в системе Platon

trans_date

Время проведения транзакции в формате UTC (YYYY-MM-DD HH-MM-SS)

descriptor

NULL

recurring_token

Зашифрованный токен карты для последующих транзакций по rc_token

card_token

Зашифрованный токен карты для последующих транзакций по card_token

 Callback при успешном списании
array (
  'action' => 'SALE',
  'result' => 'SUCCESS',
  'status' => 'SETTLED',
  'order_id' => '4385323',
  'trans_id' => '28261-47789-28578',
  'trans_date' => '2020-02-25 07:12:58',
  'descriptor' => NULL,
  'recurring_token' => '01e00c2b39bb3b933723307c442efd02',
  'card_token' => '8ef3111ac1093f6ccb817acef7f0845601d0994689a5f57949f94b0d086c7fe2',
  'hash' => '********************************',
)

Для проверки достоверности полученного callback, рекомендуем сверять подпись hash по формуле md5(strtoupper(strrev(email).client_pass.trans_id.strrev(substr(card,0,6).substr(card,-4)))).

Внимание! Если при запросе на оплату не был указан email, то при проверке hash в подписи коллбека следует указать пустое значение для email.

Параметр

Описание

action

SALE

result

SUCCESS

status

SETTLED (PENDING, если в запросе было указано ‘auth’='Y')

order_id

Уникальный ордер ID транзакции в системе мерчанта

trans_id

Уникальный ордер ID транзакции в системе Platon

trans_date

Время проведения транзакции в формате UTC (YYYY-MM-DD HH-MM-SS)

descriptor

NULL

recurring_token

Зашифрованный токен карты для последующих транзакций по rc_token

card_token

Зашифрованный токен карты для последующих транзакций по card_token

card_hash

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

Этот параметр даст вам возможность в вашей системе:

  • Привязать карту под клиента.

  • Проверить не использовал ли другой клиент эту же карту.

  • Проверить какие кредиты, товары и услуги погашаются данной картой.

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

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

hash

Зашифрованная подпись для проверки достоверности коллбека

 Response при неуспешном списании
{
  "action":"SALE",
  "result":"DECLINED",
  "status":"DECLINED",
  "order_id":"4092002",
  "trans_id":"28076-29879-99538",
  "trans_date":"2020-02-03 20:49:47",
  "decline_reason":"Declined by processing"
}

Параметр

Описание

action

SALE

result

DECLINED

status

DECLINED

order_id

Уникальный ордер ID транзакции в системе мерчанта

trans_id

Уникальный ордер ID транзакции в системе Platon

trans_date

Время проведения транзакции в формате UTC (YYYY-MM-DD HH-MM-SS)

descriptor

NULL

decline_reason

Причина отмены транзакции

 Callback при неуспешном списании
array (
  'action' => 'SALE',
  'result' => 'DECLINED',
  'status' => 'DECLINED',
  'order_id' => '4092002',
  'trans_id' => '28076-29879-99538',
  'trans_date' => '2020-02-03 20:49:47',
  'decline_reason' => 'Declined by processing',
  'hash' => '********************************',
)

Для проверки достоверности полученного callback, рекомендуем сверять подпись hash по формуле md5(strtoupper(strrev(email).client_pass.trans_id.strrev(substr(card,0,6).substr(card,-4)))).

Внимание! Если при запросе на оплату не был указан email, то при проверке hash в подписи коллбека следует указать пустое значение для email.

Параметр

Описание

action

SALE

result

DECLINED

status

DECLINED

order_id

Уникальный ордер ID транзакции в системе мерчанта

trans_id

Уникальный ордер ID транзакции в системе Platon

trans_date

Время проведения транзакции в формате UTC (YYYY-MM-DD HH-MM-SS)

descriptor

NULL

decline_reason

Причина отмены транзакции

hash

Зашифрованная подпись для проверки достоверности коллбека


Callback и Response (Асинхронный режим)

Данный режим активируется при передаче async = Y. В этом режиме обязательно необходимо принимать callback на ваш callback url.

Для просмотра примера раскройте список

 Response о принятии запроса в обработку
{
  "action":"SALE",
  "result":"ACCEPTED",
  "order_id":"4385302",
  "trans_id":"28261-34099-19648",
  "trans_date":"2020-02-25 06:50:09"
}

Параметр

Описание

action

SALE

result

ACCEPTED

order_id

Уникальный ордер ID транзакции в системе мерчанта

trans_id

Уникальный ордер ID транзакции в системе Platon

trans_date

Время проведения транзакции в формате UTC (YYYY-MM-DD HH-MM-SS)

 Промежуточный Callback при наличии проверки 3DS
array (
  'action' => 'SALE',
  'result' => 'REDIRECT',
  'status' => '3DS',
  'order_id' => '6b51033e-3e58-42e0-8ec3-88c97388018b',
  'trans_id' => '28738-47774-55067',
  'trans_date' => '2020-04-20 12:12:57',
  'redirect_url' => 'https://acs.privatbank.ua/pPaReqMC.jsp',
  'redirect_params' => 
    array (
      'PaReq' => 'eJxVUllu2zAQvYqg/4qUIlFUMGYgxykaoEqN2j4AIxGxUi2Olsb+K/qTG+S3VygKpGhRtL0CdaMMHWUDSHDeLJw3Cxxty8L6rJo2r6uJ7TrUtlSV1lleXUzs1fLtG24fCViuG6VmC5X2jRKQqLaVF8rKs4k9lx/VlRvw8ID7YRhFYcgDHrmeF/KQc8apG/jcFjCP0U/AmElgIscD8gjxyyZdy6oTINOr6emZwCgWcCAjhFI1pzPBXB66jAF5gFDJUolpPF29P1k4xx8SZxUD2Sshrfuqa3aCUx/II4C+KcS66zbtISGbQnZ1VeSVctK6BGJsQJ6ZzHsjtfjXNs9EMouv8e7w0uQy3p4t6HWy/IT4ZALEeEAmOyU86lHqe9RyvUM8QQRkrwdZGhKmcoplPQDYmBzxaDGGlwrAdjc4jZ2IOJqeEKjtpq4UemALn2TIVJsK/U3fDV/0nf4x3OL7b7jRf/Uv/dvS//Uf/X34Otzqn9a5PO8L1Zq6nV4iQxMK5Lni43dmEmmHTfZdN2CMMz/wzTj2OsMgx356B5TtKRgAxESRcdJk3BKUXm3PPfYf2CM=',
      'TermUrl' => 'https://secure.platononline.com/3ds/4de0025?operation_type=purchase&trans_id=28738-47774-55067&hash=***************************************************
    ),
  'redirect_method' => 'POST',
  'hash' => '********************************',
)

Параметры

Описание

action

SALE

result

REDIRECT

status

3DS

order_id

Уникальный ордер ID транзакции в системе мерчанта

trans_id

Уникальный ордер ID транзакции в системе Platon

trans_date

Время проведения транзакции в формате UTC (YYYY-MM-DD HH-MM-SS)

redirect_url

URL, на который должен быть перенаправлен плательщик

redirect_params

Строка параметров

redirect_method

Метод передачи параметров (POST/GET)

hash

Зашифрованная подпись для проверки достоверности коллбека

 Callback при успешном списании
array (
  'action' => 'SALE',
  'result' => 'SUCCESS',
  'status' => 'SETTLED',
  'order_id' => '4385323',
  'trans_id' => '28261-47789-28578',
  'trans_date' => '2020-02-25 07:12:58',
  'descriptor' => NULL,
  'recurring_token' => '01e00c2b39bb3b933723307c442efd02',
  'card_token' => '8ef3111ac1093f6ccb817acef7f0845601d0994689a5f57949f94b0d086c7fe2',
  'hash' => '********************************',
)

Для проверки достоверности полученного callback, рекомендуем сверять подпись hash по формуле md5(strtoupper(strrev(email).client_pass.trans_id.strrev(substr(card,0,6).substr(card,-4)))).

Внимание! Если при запросе на оплату не был указан email, то при проверке hash в подписи коллбека следует указать пустое значение для email.

Параметр

Описание

action

SALE

result

SUCCESS

status

SETTLED (PENDING, если в запросе было указано auth = Y)

order_id

Уникальный ордер ID транзакции в системе мерчанта

trans_id

Уникальный ордер ID транзакции в системе Platon

trans_date

Время проведения транзакции в формате UTC (YYYY-MM-DD HH-MM-SS)

descriptor

NULL

recurring_token

Зашифрованный токен карты для последующих транзакций по rc_token

card_token

Зашифрованный токен карты для последующих транзакций по card_token

card_hash

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

Этот параметр даст вам возможность в вашей системе:

  • Привязать карту под клиента.

  • Проверить не использовал ли другой клиент эту же карту.

  • Проверить какие кредиты, товары и услуги погашаются данной картой.

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

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

hash

Зашифрованная подпись для проверки достоверности коллбека

 Callback при неуспешном списании
array (
  'action' => 'SALE',
  'result' => 'DECLINED',
  'status' => 'DECLINED',
  'order_id' => '4092002',
  'trans_id' => '28076-29879-99538',
  'trans_date' => '2020-02-03 20:49:47',
  'decline_reason' => 'Declined by processing',
  'hash' => '********************************',
)

Для проверки достоверности полученного callback, рекомендуем сверять подпись hash по формуле md5(strtoupper(strrev(email).client_pass.trans_id.strrev(substr(card,0,6).substr(card,-4)))).

Внимание! Если при запросе на оплату не был указан email, то при проверке hash в подписи коллбека следует указать пустое значение для email.

Параметр

Описание

action

SALE

result

DECLINED

status

DECLINED

order_id

Уникальный ордер ID транзакции в системе мерчанта

trans_id

Уникальный ордер ID транзакции в системе Platon

trans_date

Время проведения транзакции в формате UTC (YYYY-MM-DD HH-MM-SS)

descriptor

NULL

decline_reason

Причина отмены транзакции

hash

Зашифрованная подпись для проверки достоверности коллбека

  • No labels