Запросы API v1.0.0

Кошелёк Pay API

Документация перемещена

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

https://developers.koshelek.app

В следующих версиях документа в запросы и/или ответы могут быть добавлены новые необязательные поля.

Для обеспечения обратной совместимости необходимо игнорировать их при формировании запросов и при приеме ответов от сервера до внесения соответствующих изменений в ПО, работающее на стороне ТСП.

Запрос списка возможных провайдеров платежей

HTTP-метод: POST

URL: /api/v1/merchant/availability-info/task

Описание

ТСП передает Кошельку информацию о счете к оплате и создает задачу на получение данных о провайдерах платежей.

В зависимости от кода ответа на запрос определяется способ получения списка провайдеров платежей:

1) Синхронный: ответ на вызов содержит HTTP Status Code 200. При этом в теле ответа содержатся непосредственно запрашиваемые данные о провайдерах платежей.

2) Асинхронный: ответ на вызов содержит HTTP Status Code 201. При этом в теле ответа будет содержаться поле availabilityInfoId, а в HTTP-заголовке Location — URL, который необходимо периодически опрашивать для получения данных о провайдере, используя запрос /api/v1/merchant/availability-info/{availabilityInfoId}.

Принципы получения списка доступных провайдеров платежей

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

Параметры заголовка запроса

Пример заголовка запроса
token: SW50ZWwoUikgQ29yZShUTSkgaTUtNzIwMFUgQ1BVIEAgMi41MEdIejtDUFUWO1RpbWk7TU1HNVMwMDAwMDEwNzc5TFAwMzFaOzE2MTcyNzYxNzk2MjA7MTkyLjE2OC4xLjEwMztVU0IgUm9vdCBIdWIgKFVTQiAzLjApI1VTQiBDb21wb3NpdGUgRGV2aWNlI1hpYW9NaSBVU0IgMi4wIFdlYmNhbSNJbnRLbChSKSBXaXJLbGVzcyBCbHVLdG9vdGgoUikjRUxBTiBXQkYgRmluZ2VycHJpbnQgU2Vuc29yI1VTQiBJbnB1dCBEZXZpY2UjSElELWNvbXBsaWFudCBtb3VzZQ==967

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

Тело запроса передается в виде объекта JSON следующей структуры:

Пример тела запроса
{
    "requestId": "1624931549080",
    "cardsession": "123456",
    "storeId": "ac99f4c8-1a8e-4b60-8aeb-fe20220f1b99",
    "terminalId": "mip9e26ay3z2s0oh",
    "checkoutInvoice": {
        "orderId": "ac99e4c8-1a7e-4b60-8aeb-fe10110f1b99",
        "totalAmount": 20,
        "discountAmount": 5,
        "subTotalAmount": 20,
        "items": [
            {
                "name": "testName",
                "article": "1111111",
                "price": null,
                "quantity": 1,
                "totalAmount": 20,
                "discountAmount": 5,
                "subTotalAmount": 100,
                "tax": "none"
            }
        ],
    },
    "user": {
        "loyaltyId": "000022"
    },
}

Параметры ответа

HTTP Status Code: 200

Запрос выполнен успешно, ответ содержит сведения о списке провайдеров платежей (используется синхронный режим).

Тело ответа — объект JSON следующей структуры:

Пример тела ответа
{
    "koshelekPayIsDefault": true,
    "paymentTypeAvailabilityInfoList": [
        {
            "paymentType": "SBP",
            "available": true,
            "message": ""
        },
        {
            "paymentType": "DOLYAME",
            "available": false,
            "message": "Недоступно по причине низкого кредитного рейтинга: score < 0.2"
        }
    ]  
}

HTTP Status Code: 201

Запрос выполнен успешно, ответ содержит сведения для отдельного запроса на получение списка доступных провайдеров платежей (используется асинхронный режим).

Заголовок ответа:

Location: /api/v1/merchant/availability-info/{availabilityInfoId}

Тело ответа — объект JSON следующей структуры:

Пример тела ответа
 {
   "availabilityInfoId": "ecda679e-f5ab-4250-b622-2a429d714b21",
   "timeout": 350
 }

HTTP Status Code: 422

Запрос не выполнен. Тело ответа — объект JSON, описывающий ошибку.

Получение списка доступных провайдеров платежей

HTTP-метод: GET

URL: /api/v1/merchant/availability-info/{availabilityInfoId}

Описание

ТСП запрашивает у Кошелька список доступных провайдеров платежей в асинхронном режиме, т. е. если запрос /api/v1/merchant/availability-info/task вернул HTTP Status Code 201.

В этом случае методы /api/v1/merchant/availability-info/task и /api/v1/merchant/availability-info/{availabilityInfoId} используются в паре (принцип периодического опроса — поллинга).

Необходимо последовательно:

1) вызвать api/v1/merchant/availability-info/task, получить availabilityInfoId __ (идентификатор, используя который, можно будет впоследствии получить данные), и timeout __ (время, через которое необходимо осуществить первую проверку статуса готовности)

2) вызывать метод api/v1/merchant/availability-info/{availabilityInfoId} с периодом ожидания, равным timeout для первого вызова и pollingTimeout для последующих вызовов до тех пор, пока в ответе поле computationComplete не будет содержать значение true).

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

Отсутствуют.

Параметры ответа

HTTP Status Code: 200

Запрос выполнен успешно. Тело ответа — объект JSON следующей структуры:

Пример тела ответа
{
    "availabilityInfoId": "ecda679e-f5ab-4250-b622-2a429d714b21",
    "computationComplete": true,
    "koshelekPayIsDefault": true,
    "paymentTypeAvailabilityInfoList": [
        {
            "paymentType": "SBP",
            "available": true,
            "message": ""
        },
        {
            "paymentType": "DOLYAME",
            "available": false,
            "message": "Недоступно по причине низкого кредитного рейтинга: score < 0.2"
        }
    ]  
}

HTTP Status Code: 422

Запрос не выполнен.

Тело ответа — объект JSON, описывающий ошибку.

Инициализация платежа

HTTP-метод: POST

URL: /api/v1/merchant/checkout

Описание

ТСП передает Кошельку информацию о счёте к оплате и значение cardSession пользователя, который должен оплатить этот счёт.

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

Параметры заголовка запроса

Пример заголовка запроса
token: SW50ZWwoUikgQ29yZShUTSkgaTUtNzIwMFUgQ1BVIEAgMi41MEdIejtDUFUWO1RpbWk7TU1HNVMwMDAwMDEwNzc5TFAwMzFaOzE2MTcyNzYxNzk2MjA7MTkyLjE2OC4xLjEwMztVU0IgUm9vdCBIdWIgKFVTQiAzLjApI1VTQiBDb21wb3NpdGUgRGV2aWNlI1hpYW9NaSBVU0IgMi4wIFdlYmNhbSNJbnRLbChSKSBXaXJLbGVzcyBCbHVLdG9vdGgoUikjRUxBTiBXQkYgRmluZ2VycHJpbnQgU2Vuc29yI1VTQiBJbnB1dCBEZXZpY2UjSElELWNvbXBsaWFudCBtb3VzZQ==967

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

Тело запроса передается в виде объекта JSON следующей структуры:

Пример тела запроса
{
    "requestId": "4ee64eb1-0012-4cd0-aefe-966d48ea7b71",
    "cardSession": "A1G97N",
    "storeId": "ac99f4c8-1a8e-4b60-8aeb-fe20220f1b99",
    "terminalId": "mip9e26ay3z2s0oh",
    "checkoutInvoice": {
                "orderId": "12345",
                "totalAmount": "14245",
                "discountAmount": "100",
                "subTotalAmount": "14345",
                "items": [
                        {  
                            "name": "Товар 1",
                            "article": "1111111",
                            "price": 10000,
                            "quantity": 1,
                            "totalAmount": 1900,
                            "discountAmount": 100,
                            "subTotalAmount": 2000,
                            "tax": "vat10"
                        },
                        {  
                            "name": "Товар 2",
                            "article": "2222222",
                            "price": 12345,
                            "quantity": 1,
                            "totalAmount": 12345,
                            "discountAmount": 15,
                            "subTotalAmount": 3000,
                            "tax": "vat20"
                        }
                        ]
                },
    "user": {
                "loyaltyId": "1234567891011"
            },
    "paymentMethods": [
        {
         "type": "SBP"
        }
    ]
}

Параметры ответа

HTTP Status Code: 200

Запрос выполнен успешно.

Тело ответа — объект JSON следующей структуры:

Пример тела ответа
{
  "requestId": "314b0613-ae21-438c-b538-6b965e85d644",
  "transactionId": "f9a59682-3d05-4af6-8308-2c1f1665d733",
  "status": "new",
  "slip": {
        "id": "d95d9f7d-cea2-47c0-b9b5-4e7ad3ee4c63",
        "paymentTransactionId": "48f62a99-50a2-4e0c-a883-4be0a7c62dd7",
        "paymentType": "DOLYAME",
        "terminalId": "20210510T120700",
        "storeId": "KOSHELEK-42",
        "orderId": "9d913e76-24d9-468d-6c6d-2a41bcfb8d81",
        "merchantId": "MA0000103685",
        "operationDateTime": "2022-01-19T11:56:34.323Z",
        "totalAmount": 15000
        }
}

HTTP Status Code: 422

Запрос не выполнен. Тело ответа — объект JSON, описывающий ошибку.

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

HTTP-метод: POST

URL: /api/v1/merchant/transaction/status

Описание

Ответ со статусами платежной транзакции и транзакции отмены. a. Реализация приема postback/callback ответов от Кошелька

ТСП необходимо реализовать на своей стороне метод, который будет вызывать сервер Кошелька для передачи ТСП статуса платежа. Этот способ получения статуса является предпочтительным, т.к. в данном случае сервер Кошелька сразу передает ТСП ответ, и ТСП не нужно работать в режиме polling c сервером Кошелька с запросом b в ожидании ответа с финальным статусом транзакции. Сервер Кошелька должен передавать при вызове метода тот же объект, который возвращает в response на вызов b. Схема работы через периодические вызовы метода b со стороны ТСП должна использоваться в случае технической невозможности подключения сервера Кошелька к серверу ТСП (или напрямую к кассам) для передачи ответов через postback. Request body: см. Response body в пункте b. b. Реализация подключения к методу получения статуса от сервера Кошелька.

Рекомендации по вызову метода

Статус транзакции необходимо запрашивать:

  1. В первый раз: не раньше чем через 250 мс и не позже чем через 500 мс.

  2. Дальнейшие вызовы должны быть не чаще чем раз в 250 мс.

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

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

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

Тело запроса передается в виде объекта JSON следующей структуры:

Пример тела запроса
{
    "requestId": "ab182f20-9c5a-11ea-ab12-0800200c9a66",
    "transactionId": "9dcc19d0-9c5a-11ea-ab12-0800200c9a66"
}

Параметры ответа

HTTP Status Code: 200

Запрос выполнен успешно.

Тело ответа — объект JSON следующей структуры:

Возможные значения параметра errorCode

1. Для сценария оплаты:

2. Для сценария возврата:

Пример тела ответа
{
    "requestId": "ab182f20-9c5a-11ea-ab12-0800200c9a66",
    "transactionId": "9dcc19d0-9c5a-11ea-ab12-0800200c9a66",
    "status": "pending"
    "paymentGroup": "INSTALLMENT",
    "paymentProvider": "DOLYAME"
 }

HTTP Status Code: 422

Запрос не выполнен. Тело ответа — объект JSON, описывающий ошибку.

Отправка чека

HTTP-метод: POST

URL: /api/v1/merchant/transaction/receipt

Описание

ТСП передает Кошельку информацию о фискальном чеке для его отображения пользователю в Кошельке.

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

Тело запроса передается в виде объекта JSON следующей структуры:

Пример тела запроса
{
    "requestId": "045b22e0-9c5b-11ea-ab12-0800200c9a66",
    "transactionId": "9dcc19d0-9c5a-11ea-ab12-0800200c9a66",
    "storeId": "ac99f4c8-1a8e-4b60-8aeb-fe20220f1b99",
    "terminalId": "mip9e26ay3z2s0oh",
    "invoice": {
                "orderId": "12345",
                "receiptId": "6789",
                "merchantName": "ООО Торговая сеть №1",
                "merchantAddress": "198000 г. Санкт-Петербург, ул.Ленина д.1 пом.123",
                "inn": "001234567891",
                "dateTime": "2020-05-20T20:50:00+03:00",
                "shift": "5",
                "cashier": "Иванов Иван Иванович",
                "taxation": "osn",
                "kktRegNumber": "0004147503041443",
                "fnNumber": "9280440300387752",
                "fdNumber": "0000010272",
                "fpd": "2374313442",
                "website": "nalog.ru",
                "receiptType": "debit",
                "qr": "t=20200520T2050&s=859.00&fn=9280440300387752&i=10272&fp=2374313442&n=1",
                "totalAmount": "14245",
                "discountAmount": "100",
                "subTotalAmount": "14345",
                "items": [
                        {  
                            "name": "Товар 1",
                            "article": "1111111",
                            "price": 10000,
                            "quantity": 1,
                            "totalAmount": 1900,
                            "discountAmount": 100,
                            "subTotalAmount": 2000,
                            "tax": "vat10"
                        },
                        {  
                            "name": "Товар 2",
                            "article": "2222222",
                            "price": 12345,
                            "quantity": 1,
                            "totalAmount": 12345,
                            "discountAmount": 15,
                            "subTotalAmount": 3000,
                            "tax": "vat20"
                        }
                        ]
                }
}

Параметры ответа

HTTP Status Code: 200

Запрос выполнен успешно. Тело ответа — пустое.

HTTP Status Code: 422

Запрос не выполнен. Тело ответа — объект JSON, описывающий ошибку.

Отмена оплаты

HTTP-метод: POST

URL: /api/v1/merchant/transaction/cancel

Описание

ТСП передает Кошельку запрос на отмену транзакции оплаты.

В запросе не указывается сумма отмены, т.к. операция отмены проводится на полную сумму, указанную в транзакции оплаты.

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

Тело запроса передается в виде объекта JSON следующей структуры:

Пример тела запроса
{
    "requestId": "f1847360-b3c5-11ea-8b6e-0800200c9a66",
    "storeId": "ac99f4c8-1a8e-4b60-8aeb-fe20220f1b99",
    "terminalId": "mip9e26ay3z2s0oh",
    "transactionId": "9dcc19d0-9c5a-11ea-ab12-0800200c9a66"
}

Параметры ответа

HTTP Status Code: 200

Запрос выполнен успешно.

Тело ответа — объект JSON следующей структуры:

Пример тела ответа
{
  "requestId": "requestId",
  "refTransactionId": "59ab316c-4de4-4e0d-8d07-448b2c7f25a7",
  "refStatus": "accepted",
  "transactionId": "6b66835f-a82a-4385-bd98-e9a5047e88fa",
  "status": "canceled",
  "slip": {
        "id": "d95d9f7d-cea2-47c0-b9b5-4e7ad3ee4c63",
        "paymentTransactionId": "48f62a99-50a2-4e0c-a883-4be0a7c62dd7",
        "paymentType": "DOLYAME",
        "terminalId": "20210510T120700",
        "storeId": "KOSHELEK-42",
        "orderId": "9d913e76-24d9-468d-6c6d-2a41bcfb8d81",
        "merchantId": "MA0000103685",
        "operationDateTime": "2022-01-19T11:56:34.323Z",
        "totalAmount": 15000
        }
}

HTTP Status Code: 422

Запрос не выполнен. Тело ответа — объект JSON, описывающий ошибку.

Возврат оплаты

HTTP-метод: POST

URL: /api/v1/merchant/transaction/refund

Описание

ТСП передает Кошельку запрос на возврат покупателю средств, полученных в результате транзакции оплаты.

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

Параметры заголовка запроса

Пример заголовка запроса
token: SW50ZWwoUikgQ29yZShUTSkgaTUtNzIwMFUgQ1BVIEAgMi41MEdIejtDUFUWO1RpbWk7TU1HNVMwMDAwMDEwNzc5TFAwMzFaOzE2MTcyNzYxNzk2MjA7MTkyLjE2OC4xLjEwMztVU0IgUm9vdCBIdWIgKFVTQiAzLjApI1VTQiBDb21wb3NpdGUgRGV2aWNlI1hpYW9NaSBVU0IgMi4wIFdlYmNhbSNJbnRLbChSKSBXaXJLbGVzcyBCbHVLdG9vdGgoUikjRUxBTiBXQkYgRmluZ2VycHJpbnQgU2Vuc29yI1VTQiBJbnB1dCBEZXZpY2UjSElELWNvbXBsaWFudCBtb3VzZQ==967

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

Тело запроса передается в виде объекта JSON следующей структуры:

Пример тела запроса
{
    "requestId": "f1847360-b3c5-11ea-8b6e-0800200c9a66",
    "transactionId": "9dcc19d0-9c5a-11ea-ab12-0800200c9a66",
    "storeId": "ac99f4c8-1a8e-4b60-8aeb-fe20220f1b99",
    "terminalId": "mip9e26ay3z2s0oh",
    "refundAmount": 14245,
    "items": [
       {  
           "name": "Товар 1",
           "price": 10000,
           "quantity": 1,
           "totalAmount": 1900,
           "discountAmount": 100,
           "subTotalAmount": 2000,
           "tax": "vat10"
       },
       {  
           "name": "Товар 2",
           "price": 12345,
           "quantity": 1,
           "totalAmount": 12345,
           "tax": "vat20"
       }
    ]   
}

Параметры ответа

HTTP Status Code: 200

Запрос выполнен успешно.

Тело ответа — объект JSON следующей структуры:

Возможные значения параметра errorCode

Пример тела ответа
{
  "requestId": "314b0613-ae21-438c-b538-6b965e85d644",
  "refTransactionId": "665857e3-25ca-4bd2-b2ec-87c994eff47a",
  "refStatus": "accepted",
  "transactionId": "f9a59682-3d05-4af6-8308-2c1f1665d733",
  "status": "refunded",
  "slip": {
        "id": "d95d9f7d-cea2-47c0-b9b5-4e7ad3ee4c63",
        "paymentTransactionId": "48f62a99-50a2-4e0c-a883-4be0a7c62dd7",
        "paymentType": "DOLYAME",
        "terminalId": "20210510T120700",
        "storeId": "KOSHELEK-42",
        "orderId": "9d913e76-24d9-468d-6c6d-2a41bcfb8d81",
        "merchantId": "MA0000103685",
        "operationDateTime": "2022-01-19T11:56:34.323Z",
        "totalAmount": 15000
        }
}

HTTP Status Code: 422

Запрос не выполнен. Тело ответа — объект JSON, описывающий ошибку.

Last updated