API приложения Мобильный кассир (1.1.6)

Download OpenAPI specification:Download

Описание API произведено в формате OpenAPI 3.0.0.

Общая информация

Взаимодействие с сервисом осуществляется по схеме запрос-ответ. Запросы отправляются в формате JSON методом POST. В качестве безопасного доступа к сервису во всех методах используется JWT-токен, он генерируется GET-запросом /public/login, параметр accessToken. Проект обладает свойством Идемпотентности. В случае сетевой ошибки ответ на дублированный запрос будет аналогичен первому. При этом, обработан дублированный запрос не будет. Идемпотентность обеспечивается за счет передачи в запросе уникального значения в заголовке x-req-id.

Статусы заказов

Статус Описание Финальный
CREATED Заказ создан Да
DECLINED Заказ отклонен Да
EXPIRED Время актуальности заказа истекло Да
IN_PROCESS Статус заказа не определен, неoбходимо запросить уточнение Нет
PAYOUT_IN_PROGRESS Статус заказа не определен, неoбходимо запросить уточнение Нет
QRCDATA_IN_PROGRESS Статус заказа не определен, неoбходимо запросить уточнение Нет
IPS_ACCEPTED Успешная оплата по СБП Да
CHARGED Средства списаны Да
QRCDATA_CREATED Получение QR кода прошло успешно Нет
PAID Выплата произведена Да
REFUNDED Заказ возмещен Да

Сервис уведомлений

Уведомления (webhook, callback) предствляют собой POST запросы, отправляемые системой по факту изменения статуса заказа на адрес, указанный в параметре CallbackUrl метода order. Формат уведомлений соответствует ответу на запрос данных по заказу. Система будеет осуществлять повторные попытки отправки уведомлений до получения http-кода 200 или истечения тайм-лимита. В заголовке http запроса передается параметр payment-sign - подпись, результат подписи исходного тела нотификации (Body из http запроса) приватным ключом, в кодировке base64. Для валидации подписи необходимо использовать публичный ключ:

-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtlD5ORxXDUgnnD9Ri2IB
UcT2Ru1fMi9kub8errQdLaXdFRDZJ1mNHlMJx+CHkhM5GNkMmidAhPcYRs4h/yIb
YLiRSsR+Zl6krjcrEvrTIZ1BySNAxEuCzWGFM27Ef01xNOSPEgtptAmop6vRuaiS
ha2vB5rHN1hSks1td/7xDcFG+C4cnDsTYp39rUvSSMtkW6FCbBoxNPrNOSlZGykx
OFBhOYd/uOK4z/zFSy07f4rA32KNn3zJE5eb6tzNMRNa6lOL96x0OYzw/P6oaS5b
sugVehAM1TGBCzm4Xmz1VZVBhxd3V7VoJuf/0C0W2Yfer+E/G0s3DDWmjzqhbvrc
Eb0y1kOZn4Z39jswv5Bkk8NyqHfNe0dE4pX+dSnfhC/9J5xFZy/CknclEM/0waY8
36iYIy+MaRsQdWXjbvP1AVk/yq2RlXCaOnK7GPvxAP1qjcgt56cGUOks9H9X6lba
PcJd+KDWde1aZZJLUpxu7JDIVTruDy/KrxDtJYi7Mz40Y6pnsKXzPHzVr0km9LI9
zK1j24OS1RIbO2fMM9D2zNQnSUV//aR+/xb7W2UgL2L0GRl7nDzqQL2dLvStHG9O
yUtnH5R/hPuIZqIDZx1N52F1JwArfDY0j9t5suAqN0VXJe2N77cYJ0x2LDeg+rLl
KsdjLKRDtKpXormCUTs/V+0CAwEAAQ==
-----END PUBLIC KEY-----

Пример для проверки подписи при интеграции средствами openssl. В командной строке выполняем команду:

Декодируем base64:

 certutil -decode catsign.txt sign.txt.dec

Проверяем подпись:

openssl dgst -sha1 -verify PublicStage.key -signature sign.txt.dec callback.txt

Где catsign.txt - подпись из заголовка Payment-Sign, PublicStage.key - публичный ключ, callback.txt - тело коллбека.

В случае успешной проверки будет сообщение Verified OK.

Проверка статуса заказа get обязательна по истечении срока жизни заказа. Через 30 мин после создания заказа отправка уведомления не гарантирована.

Форма оплаты

Сценарий с вводом карточных данных на PaymentForm не требует от ТСП соответствия требованиям безопасности PCIDSS, в отличие от сценария с вводом данных карты на стороне ТСП.

Открытие платежной формы осуществляется запросом POST по адресу:

https://payment.{domen}/{ExternalOrderID}

где payment - фиксированное значение

domen - адрес для отправки запросов

ExternalOrderID - номер заказа, полученный в ответе на метод создания платежной формы.

Открытие формы POST-запросом позволяет передать дополнительные параметры, такие как адрес для обратного редиректа по результату оплаты.

Для вызова формы с возможностью редиректа необходимо:

  1. Использовать нативную html форму с методом POST

  2. В action указать URL формы, поддерживающий функционал редиректов

  3. Указать в двух скрытых полях (successUrl, failUrl) ссылки для редиректа

  4. В enctype указать application/x-www-form-urlencoded

  5. Отправить нативную форму стандартным вызовом submit (POST запрос с переходом)

Пример:

<form
   action="https://payment.{domen}/{ExternalOrderID}"
   method="POST"
   enctype="application/x-www-form-urlencoded"
 >
   <input type="hidden" name="successUrl" value="https://domen.test/{ExternalOrderID}/success" placeholder="successUrl">
   <input type="hidden" name="failUrl" value="https://domen.test/{ExternalOrderID}/fail" placeholder="failUrl">

   <button type="submit">Оплатить</button>
</form>

Authorization

Получение доступа к системе

Request Body schema: application/json
login
string

Логин (email) кассира в системе

password
string

пароль кассира в системе

Responses

Request samples

Content type
application/json
{
  • "login": "mail@email.com",
  • "password": "Password123"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "description": "login success",
  • "accessToken": "string",
  • "expiresAccess": "string",
  • "refreshToken": "string",
  • "expiresRefresh": "string"
}

Orders

получение списка заказов

Authorizations:
Authorization-Token
query Parameters
tspId
integer <unit64>

Id ТСП по которому проходит оплата

dateFrom
string <date-time>

дата начала периода отслеживания заказов

dateTo
string <date-time>

дата окончания периода отслеживания заказов

status
string

текущий статус заказа

limit
number

Limit count orders. Default 30

offset
number

Offset of orders. Default 0

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "description": "string",
  • "orders": [
    ],
  • "meta": {
    }
}

Создание заказа

Создать заказ можно двумя способами

  • Используя поле orderAmount
    • Вы передаете сумму заказа в выбранной валюте.
    • После создания сумма автоматически конвертируется в рубли, и платеж будет принят в рублях.
    • Все комиссии включаются в итоговую сумму.
    • Сумма должна быть указана в копейках (или в центах, евроцентах и т.д.). Например, если вы передаете значение 100 в orderAmount, итоговая сумма к оплате будет 100 плюс комиссии.
  • Используя поле paymentAmount
    • Сумма к оплате остается в рублях.
    • Система конвертирует ее в валюту и вычитает комиссии.
    • Сумма должна быть указана в копейках. Например, если вы передаете значение 100 в paymentAmount, сумма к оплате будет 100, а в orderAmount будет зафиксирована сумма с учетом вычетов комиссий.
  • важно
    • Для создания заказа на выплату необходимо указать тип PayOut. Без этого типа вы не сможете продолжить создание заказа.
    • При создании заказа на прием (например, на продажу) тип можно не указывать; по умолчанию будет использован тип PayIn.
Authorizations:
Authorization-Token
Request Body schema: application/json
One of
merchantOrderId
string

идентификатор заказа продавца, может был заполнен номером заказа из системы продавца

paymentAmount
required
integer

сумма, которую оплатит покупатель, передается в копейках

orderCurrency
required
string

изначальная валюта заказа, доступные валюты USD, EUR, AED, THB, RUB, TRY

paymentCurrency
string

итоговая валюта заказа, в которой будет произведена оплата

tspId
required
integer

Id ТСП по которому проходит оплата

description
string

описание заказа, поле для заметки по заказу

callbackUrl
string

адрес, на который будет отправлен коллбек

Responses

Request samples

Content type
application/json
Example
{
  • "merchantOrderId": "merchantOrderId",
  • "orderAmount": 100,
  • "orderCurrency": "EUR",
  • "tspId": 1,
  • "description": "comment",
  • "callbackUrl": "callback.com"
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "description": "",
  • "order": {
    }
}

получение данных заказа

Authorizations:
Authorization-Token
path Parameters
id
required
integer

Идентификатор заказа в системе

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "description": "string",
  • "order": {
    }
}

возврат заказа

Authorizations:
Authorization-Token
path Parameters
id
required
integer

Идентификатор заказа в системе

Request Body schema: application/json
amount
integer

Сумма возврата в минимальных единицах валюты (копейках). Параметр опциональный. В случае отсутствия возврат производится на полную сумму.

Responses

Request samples

Content type
application/json
{
  • "amount": 300
}

Response samples

Content type
application/json
{
  • "success": true,
  • "description": "string",
  • "order": {
    }
}

статус заказа

Получение текущего статуса заказа

path Parameters
id
required
integer <unit64>

Идентификатор заказа в системе

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "description": "string",
  • "order": {
    }
}

СБП

qrcData - Регистрация QR кода в СБП

Authorizations:
Authorization-Token
path Parameters
id
required
integer

Идентификатор заказа в системе

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "description": "string",
  • "order": {
    }
}

SberPay

Оплата через SberPay

Authorizations:
Authorization-Token
path Parameters
id
required
integer
Request Body schema: application/json
BackUrl
string

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

phoneNumber
string

Номер телефона для отправки пуш уведомления для перехода в СБОЛ

Responses

Request samples

Content type
application/json
{
  • "deepLink": "android-app://ru.testbankmobile/main",
  • "phoneNumber": "+79876543210"
}

Response samples

Content type
application/json
{
  • "succes": true,
  • "description": "string",
  • "order": {
    }
}

Карточные методы

выплата на карту

для создания выплаты order обязательно должен быть создан с параметром type PayOut. При получении статуса IN_PROCESS неoбходимо запросить уточнение

Authorizations:
Authorization-Token
path Parameters
id
required
integer
Request Body schema: application/json
pan
required
string

номер карты получателя

holder
string

Имя и Фамилия получателя

phone
string

номер телефона получателя

Responses

Request samples

Content type
application/json
{
  • "pan": 4189732800687140,
  • "holder": "Ivan Ivanov",
  • "phone": 79998887766
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "description": "",
  • "order": {
    }
}

запрос на создание заказа по форме оплаты

для открытия платежной формы необходимо вызвать ее с полученным в ответе externalOrderId

path Parameters
id
required
integer

Идентификатор заказа в системе

tspCode
required
string

Код ТСП в системе

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "externalOrderId": "string"
}

authorize - Холдирование средств

Для карточных операций типа PayIn необходимо первым шагом создать order методом POST /order, после получения id нужно получить externalOrderId методом /form. В дальнейших запросах externalOrderId должен передаваться в поле OrderId.

Authorizations:
NoneNoneNone
Request Body schema: aplication/json
One of
object (Auth-FirstRequest)

Responses

Request samples

Content type
aplication/json
Example
{
  • "OrderId": "ExternalOrderId",
  • "Card": {
    }
}

Response samples

Content type
application/json
Example
{
  • "Response": {
    },
  • "Order": {
    },
  • "Authorize": {
    },
  • "Card": {
    }
}

charge - Списание средств

Для карточных операций типа PayIn необходимо первым шагом создать order методом POST /order, после получения id нужно получить externalOrderId методом /form. В дальнейших запросах externalOrderId должен передаваться в поле OrderId.

Authorizations:
NoneNoneNone
Request Body schema: aplication/json
OrderId
required
string

Индекс заказа в Payment API

Responses

Request samples

Content type
aplication/json
{
  • "OrderId": "ExternalOrderId"
}

Response samples

Content type
application/json
Example
{
  • "Response": {
    },
  • "Order": {
    },
  • "Charge": {
    }
}

void - Отмена холдирования

Для карточных операций типа PayIn необходимо первым шагом создать order методом POST /order, после получения id нужно получить externalOrderId методом /form. В дальнейших запросах externalOrderId должен передаваться в поле OrderId.

Authorizations:
NoneNoneNone
Request Body schema: aplication/json
OrderId
required
string

Индекс заказа в Payment API

Responses

Request samples

Content type
aplication/json
{
  • "OrderId": "ExternalOrderId"
}

Response samples

Content type
application/json
Example
{
  • "Response": {
    },
  • "Order": {
    },
  • "Void": {
    }
}