2. Платежи
Источник: https://docs.paykeeper.ru/dokumentatsiya-json-api/platezhi/
Раздел «Платежи» позволяет работать с платежами: получать информацию, выгружать реестры с фильтрами по датам/статусам/платёжным системам, искать платежи, делать полные и частичные возвраты.
Инициализация платежей выполняется через выставление счетов, HTML-формы, iframe-формы или прямые платёжные ссылки.
Диаграмма статусов
Статусы получен, совершён без оповещения и совершён — равнозначны в части получения средств (держатель карты списан, деньги зачислены или будут зачислены мерчанту). Статусы отменён и не состоялся — провал платежа.
Список запросов
| # | URI | Назначение |
|---|---|---|
| 2.1 | /info/payments/bydate/ | Реестр платежей за период с фильтрами |
| 2.2 | /info/payments/bydatecount/ | Количество платежей за период по статусам и ПС |
| 2.3 | /info/payments/byid/ | Информация о платеже по ID |
| 2.4 | /info/options/byid/ | Дополнительные параметры платежа |
| 2.5 | /info/params/byid/ | Необязательные параметры платежа |
| 2.6 | /info/httplog/byid/ | HTTP-лог для платежа |
| 2.7 | /info/refunds/bypaymentid/ | Информация о возвратах по платежу |
| 2.8 | /change/payment/reverse/ | Полный или частичный возврат |
| 2.9 | /change/payment/repeatcnt/ | Сбросить счётчик оповещений |
| 2.10 | — | Инициализация платежа — не поддерживается |
| 2.11 | /info/payments/search/ | Поиск платежей |
| 2.12 | /change/payment/capture/ | Подтверждение списания по предавторизации |
| 2.13 | /change/payment/post-sale-receipt/ | Чек окончательного расчёта |
2.1 Реестр платежей /info/payments/bydate/
Тип: GET
Формат: /info/payments/bydate/?limit=100&from=0&start=2016-04-14&end=2017-03-14&status[]=success&status[]=canceled&status[]=failed&payment_system_id[]=9&payment_system_id[]=1
Параметры:
| Параметр | Назначение |
|---|---|
start | Дата начала (YYYY-MM-DD) |
end | Дата конца (YYYY-MM-DD) |
payment_system_id[] | ID платёжных систем для фильтра (обязателен) |
status[] | Статусы: pending, obtained, canceled, success, failed, stuck, refunded, refunding, partially_refunded (обязателен) |
from | Пропустить N значений (обязателен) |
limit | Количество возвращаемых значений (обязателен) |
Параметры ответа:
| Параметр | Назначение |
|---|---|
id | Идентификатор платежа |
pay_amount | Сумма платежа |
refund_amount | Возвращённая часть |
clientid | Идентификатор клиента |
orderid | Номер заказа |
payment_system_id | ID платёжной системы |
unique_id | Уникальный ID транзакции |
status | Статус |
repeat_counter | Количество попыток оповещения |
pending_datetime | Дата создания |
obtain_datetime | Дата обработки |
success_datetime | Дата успешного оповещения |
Пример ответа:
[
{
"id": "136641",
"pay_amount": "1000.00",
"refund_amount": "0.00",
"clientid": null,
"orderid": null,
"payment_system_id": "6",
"unique_id": "Rj5er56P5ItOLxi0uuptDER7NM=",
"status": "canceled",
"repeat_counter": "0",
"pending_datetime": "2017-03-17 16:44:30",
"obtain_datetime": null,
"success_datetime": null
},
{
"id": "136640",
"pay_amount": "2150.00",
"refund_amount": "0.00",
"clientid": "Оплата за кресло-качалку",
"orderid": "Петров Иван Сергеевич",
"payment_system_id": "6",
"unique_id": "xONlvdy91aB+N3I21n1WE5/5ZqEg=",
"status": "success",
"repeat_counter": "0",
"pending_datetime": "2017-03-15 16:54:49",
"obtain_datetime": "2017-03-15 16:56:26",
"success_datetime": "2017-03-15 16:56:30"
}
]2.2 Количество платежей /info/payments/bydatecount/
Тип: GET
Формат: /info/payments/bydatecount/?start=2014-04-14&end=2014-05-14&status[]=success&status[]=canceled&status[]=failed&payment_system_id[]=6&payment_system_id[]=1
Параметры аналогичны 2.1 (без from/limit).
Параметры ответа:
| Параметр | Назначение |
|---|---|
statuses | Массив [status, count] |
payment_systems | Массив [payment_system_id, count] |
fullcount | Общее число платежей |
Пример:
[
{
"statuses": [
{"status": "canceled", "count": "14"},
{"status": "success", "count": "71"},
{"status": "failed", "count": "3"}
]
},
{
"payment_systems": [
{"payment_system_id": "1", "count": "47"},
{"payment_system_id": "6", "count": "41"}
]
},
{
"fullcount": [{"count": "88"}]
}
]2.3 Информация по ID /info/payments/byid/
Тип: GET
Формат: /info/payments/byid/?id=11186
Параметры:
| Параметр | Назначение |
|---|---|
id | ID платежа в PayKeeper |
advanced | Флаг получения дополнительных данных (true) |
Параметры ответа: аналогично 2.1 + site_description, system_description.
При advanced=true добавляются:
| Параметр | Назначение |
|---|---|
APPROVAL_CODE | Код авторизации |
CARD_NUMBER | Маскированный номер карты |
RESULT | Результат операции |
RESULT_CODE | Код результата |
3DSECURE | Использовалась ли 3D Secure |
RRN | RRN успешного платежа |
Пример ответа:
[
{
"id": "11186",
"pay_amount": "12000.00",
"refund_amount": "0.00",
"clientid": "ivan.petrov@mail.ru",
"orderid": "7916",
"payment_system_id": "40",
"site_description": "Сбербанк",
"system_description": "SberBank",
"unique_id": "8613d9ab-1234-4678-9014-0f3489dcaba4",
"status": "success",
"repeat_counter": "0",
"pending_datetime": "2017-03-21 14:25:33",
"obtain_datetime": "2017-03-21 14:29:48",
"success_datetime": "2017-03-21 14:30:02",
"APPROVAL_CODE": "933921",
"CARD_NUMBER": "400011xxxxxx1111",
"RESULT": null,
"RESULT_CODE": null,
"3DSECURE": "Y",
"RRN": "16560565471"
}
]2.4 Дополнительные параметры /info/options/byid/
Тип: GET
Формат: /info/options/byid/?id=11186
Ответ зависит от платёжной системы и статуса.
Пример:
[
{
"orderid": "7916",
"client_ip": "109.252.85.68",
"service_name": "Uslugi po perevodu",
"client_email": "info@example.com",
"client_phone": "+79112511000",
"qiwi_phone": "",
"msgtype": "Visa",
"RRN": "304756189111",
"APPROVAL_CODE": "186111",
"CARD_NUMBER": "472732**2524",
"actionCode": "0",
"actionCodeDescription": "",
"orderStatus": "2",
"preauth": "false"
}
]2.5 Необязательные параметры /info/params/byid/
Тип: GET
Формат: /info/params/byid/?id=11186
Параметры ответа:
| Параметр | Назначение |
|---|---|
id | ID |
payment_id | ID платежа |
field | Ключ |
value | Значение |
Пример:
[
{"id": "282", "payment_id": "11186", "field": "0/value", "value": "86ead1ab-111d-4aa6-8daf-01119bbaaa1"},
{"id": "287", "payment_id": "11186", "field": "cardAuthInfo/expiration", "value": "202109"},
{"id": "288", "payment_id": "11186", "field": "cardAuthInfo/cardholderName", "value": "Ivan Petrov"}
]2.6 HTTP-лог /info/httplog/byid/
Тип: GET
Формат: /info/httplog/byid/?id=11186
Параметры ответа:
| Параметр | Назначение |
|---|---|
id | ID |
payment_id | ID платежа |
request_method | Метод |
request_uri | URI |
ip | IP-адрес |
body | Тело запроса |
datetime | Дата/время |
Пример:
[
{
"id": "176325",
"payment_id": "11186",
"request_method": "POST",
"request_uri": "/order/inline/",
"ip": "187.145.22.11",
"body": "orderid=7916&clientid=ivanivanov%40mail.ru&sum=120000&phone=891112345678",
"datetime": "2017-03-21 14:25:20"
}
]2.7 Возвраты по платежу /info/refunds/bypaymentid/
Тип: GET
Формат: /info/refunds/bypaymentid/?id=124076
По одному платежу может быть несколько возвратов.
Параметры ответа:
| Параметр | Назначение |
|---|---|
id | ID возврата |
payment_id | ID платежа |
refund_number | Порядковый номер возврата |
user | Кто инициировал |
amount | Сумма возврата |
remainder | Остаток после возврата |
datetime | Дата выполнения |
status | Статус: started, done, failed |
Пример:
[
{
"id": "1",
"payment_id": "124076",
"refund_number": "1",
"user": "admin",
"amount": "9730.00",
"remainder": "0.00",
"datetime": "2017-02-10 10:58:36",
"status": "done"
}
]2.8 Возврат /change/payment/reverse/
Тип: POST
Формат: /change/payment/reverse/
Метод сам определяет, какой тип операции применить (полный возврат, отмена, частичный возврат, частичное списание) в зависимости от состояния платежа и возможностей банка-эквайера.
При работе в режиме автоматической фискализации (54-ФЗ) при возвратах можно передавать информацию о товарах. Для полного возврата с корзиной товары можно не передавать; для частичных — обязательна корзина возврата для корректной генерации чека.
Параметры:
| Параметр | Назначение |
|---|---|
id | ID платежа |
amount | Сумма возврата (точка как разделитель) |
partial | Флаг частичного возврата (true/false, не 1/0) |
sbp_refund_to | Используется только в особых случаях; обычно не передавать |
token | Токен безопасности |
refund_cart | JSON-строка с корзиной возврата (формат — как при инициализации счёта) |
Успех:
{"result": "success"}Ошибка:
{
"result": "fail",
"msg": "Нельзя сделать возврат по платежу, статус которого не \"совершён\", \"получен\" или \"превышено число повторов\""
}Возврат выполняется асинхронно — инициализация не гарантирует успешного исполнения. Контроль: запрос 2.1 с фильтром по
refunding, либо запрос 2.7 по конкретному платежу. Результат обычно приходит через несколько минут; проверять рекомендуется через 3 минуты. PayKeeper может слать callback при завершении возврата.
2.9 Сброс счётчика оповещений /change/payment/repeatcnt/
Тип: POST
Формат: /change/payment/repeatcnt/
Сбрасывает счётчик попыток оповещения и запускает информатор.
Параметры: id, token.
Ответ:
[{"result": "success"}]2.10 Инициализация платежа
Не поддерживается.
2.11 Поиск платежей /info/payments/search/
Тип: GET
Формат: /info/payments/search/?query=4038*9682&beg_date=2016-01-01&end_date=2017-04-04
Возвращает платежи, в номерах/параметрах/номерах карт/кодах авторизации которых содержится искомая подстрока.
Параметры:
| Параметр | Назначение |
|---|---|
query | Подстрока. Ищется в payment.id, payment.clientid, options.orderid, options.service_name, options.client_email, options.client_phone, options.CARD_NUMBER, options.APPROVAL_CODE. Поддерживает MySQL LIKE-синтаксис; * = % |
beg_date | Начало периода (YYYY-MM-DD) |
end_date | Конец периода (YYYY-MM-DD) |
user_ids[] | Массив ID пользователей (из метода 4.7) |
Пример ответа:
[
{
"id": "124134",
"pay_amount": "1.00",
"clientid": "Иванов Петр Семенович",
"orderid": "325009",
"payment_system_id": "6",
"unique_id": "Nhf+fl3l8Rz/rvCEtMNCVm12Ew=",
"status": "success",
"repeat_counter": "0",
"pending_datetime": "2017-03-30 13:20:59",
"obtain_datetime": "2017-03-30 13:21:43",
"success_datetime": "2017-03-30 13:21:47"
}
]2.12 Подтверждение списания /change/payment/capture/
Тип: POST
Формат: /change/payment/capture/
Досрочное списание средств при предавторизации (без ожидания автосписания). Для частичного — использовать 2.8.
Параметры: id, token.
Ответ:
[{"result": "success"}]Для Промсвязьбанка
status=queuedозначает принятие банком, но ещё не выполнение. Проверять через 2.4 через несколько минут.
2.13 Чек окончательного расчёта /change/payment/post-sale-receipt/
Тип: POST
Формат: /change/payment/post-sale-receipt/
По 54-ФЗ при доставке предоплаченного товара онлайн необходимо выдать чек. Метод упрощает выдачу чека в момент доставки.
Параметры: id — номер платежа.
Если в исходном чеке у всех позиций был признак полной предоплаты, метод формирует соответствующий чек окончательного расчёта с теми же позициями.
Нельзя использовать для аванса — окончательный расчёт должен содержать точные позиции. В «зачёте аванса» используется сумма «электронно» из исходного чека. Для частично возвращённых платежей учитываются оставшиеся товары. Формирование асинхронное — при успехе вернётся
receipt_id, результат проверять через запрос 8.4.