3. Счета
API вызовы раздела «Счета» могут быть использованы для автоматизации выставления счетов, либо для генерации прямых ссылок на оплату для отображения в личном кабинете, отправки в собственных e-mail’ах, в Telegram, WhatsApp, Viber, SMS или любым другим способом.
Раздел протокола содержит следующие запросы:
URI | Назначение | |
---|---|---|
3.1 | /info/invoice/byid/ | Получение данных счёта по его номеру |
3.2 | /info/invoice/list/ | Получение истории счетов за период |
3.3 | /info/invoice/listcount/ | Получение количества счетов за период |
3.4 | /change/invoice/preview/ | Подготовка счёта |
3.5 | /change/invoice/send/ | Отправка созданного счёта |
3.6 | /change/invoice/revoke/ | Отмена созданного счёта |
3.7 | /change/invoice/accept-cash/ | Оплата счёта наличными |
3.1. Запрос получения данных счёта /info/invoice/byid/
Для получения данных счёта необходимо выполнить GET-запрос по URL с GET-параметром id, равным номеру нужного счёта.
Тип | Формат запроса | ||
GET | /info/invoice/byid/?id=20140402085214805 | ||
Параметр | Назначение | ||
1. | id | Id счёта, по которому нужно получить данные | |
Таблица 3.1.1. Параметры запроса |
В ответ возвращается объект следующего вида:
Тип | Формат ответа | ||
Параметр | Назначение | Допустимые значения | |
1. | id | Уникальный номер счёта | Строка из символов 0-9 |
2. | status | Статус заказа | Строковые значения created, sent, paid, expired |
3. | pay_amount | Сумма счёта | Число, разделитель дробной части – точка |
4. | clientid | Идентификатор клиента | Строка, любые буквы и цифры |
5. | orderid | Номер заказа | Строка, любые буквы и цифры |
6. | service_name | Наименование услуги | Строка, любые буквы и цифры |
7. | client_email | E-mail клиента | Строка, корректно записанный e-mail |
8. | client_phone | Телефон клиента | Строка, любые буквы и цифры |
9. | expiry_datetime | Счёт действует до | Дата в формате YYYY-MM-DD HH:MM:SS |
10. | created_datetime | Дата создания счёта | Дата в формате YYYY-MM-DD HH:MM:SS |
11. | paid_datetime | Дата оплаты счёта | Дата в формате YYYY-MM-DD HH:MM:SS. Если счёт не оплачен — null |
12. | user_id | Идентификатор пользователя ЛК, выставившего счёт | Число |
13. | payment_id | Номер платежа, которым оплачен счёт | Число, если счёт не оплачен — null |
Таблица 3.1.2. Параметры ответа на запрос |
Пример ответа на запрос:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
[ { "id" : "20110115085347329", "clientid" : "Ivanov Ivan Ivanovich", "orderid" : "1337", "paymentid" : "7331", "service_name" : "Document delivery", "client_email" : "ivanov@ivan.ivanovich.com", "client_phone" : "+79254973590", "created_datetime" : "2011-01-15 08:53:47", "paid_datetime" : "2011-01-16 14:12:00", "expiry_datetime" : "2011-01-19 00:00:00", "pay_amount" : "1205.98", "status" : "paid", "user_id" : 9 } ] |
3.2. История счетов /info/invoice/list/
Данный запрос позволяет получить список счетов за указанный период. Для удобства вывода в таблицу можно указать максимальное число объектов в выборке и пропустить первые сколько-то значений. Также, указав статусы, можно выбрать счета только с определёнными статусами. Счета выводятся в порядке от самого нового к самому старому.
Тип | Формат запроса | ||
GET | /info/invoice/list/?status[]=paid&start_date=2014-04-15&end_date=2014-04-25&from=30&limit=10 | ||
Параметр | Назначение | ||
1. | status[] | Выбрать счета только с указанными статусами, может принимать значения sent, paid, expired. | |
2. | start_date | Выбрать счета, выставленные после даты в формате YYYY-MM-DD | |
3. | end_date | Выбрать счета, выставленные до даты в YYYY-MM-DD | |
4. | from | Пропустить N результатов в начале выборки | |
5. | limit | Выдавать не более указанного числа результатов | |
Таблица 3.2.1. Параметры запроса |
В ответ возвращается массив объектов формата 3.1.1. Пример ответа:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
[ { "id" : "20140415042846859", "status" : "expired", "pay_amount" : "5999.00", "clientid" : "Кристина Бушуева", "orderid" : "3946", "service_name" : "null", "client_email" : "hidden@paykeeper.ru", "client_phone" : "null", "expiry_datetime" : "2014-04-19 00:00:00", "created_datetime": "2014-04-15 04:28:46", "paid_datetime" : "null" }, … ] |
Приведённый в примере запрос найдёт только оплаченные счета, выставленные в период от 15 апреля 2014 года до 25 апреля 2014 года, отбросит первые 30 результатов и выведет следующие 10. Если оплаченных счетов в этот период окажется менее 30, запрос вернёт пустой массив.
3.3. История счетов /info/invoice/listcount/
Данный запрос возвращает количество счетов за указанный период. Запрос возвращает данные, разбитые по статусам счетов sent, paid, expired. Указав статусы, можно подсчитать счета только с определёнными статусами. Для получения данных необходимо выполнить GET-запрос со следующими параметрами:
Тип | Формат запроса | ||
GET | /info/invoice/listcount/?status[]=expired&status[]=sent&status[]=paid&start_date=2014-04-15&end_date=2014-04-25 | ||
Параметр | Назначение | ||
1. | status[] | Подсчитать счета только с указанными статусами, может принимать значения sent, paid, expired. | |
2. | start_date | Выбрать счета, выставленные после даты в формате YYYY-MM-DD | |
3. | end_date | Выбрать счета, выставленные до даты в YYYY-MM-DD | |
Таблица 3.3.1. Параметры запроса |
В ответ возвращается составной объект следующего вида:
- Массив счетов, сгруппированный по статусам.
- Полный счётчик всех счетов с учётом фильтров.
Тип | Формат ответа | |
Параметр | Назначение | |
1. | statuses | Массив, сгруппированный по различным статусам, состоящий из элементов [status=>”value”,count=>”value”] |
2. | fullcount | Полное количество платежей |
Таблица 3.3.2 Параметры ответа на запрос |
Пример ответа на запрос:
1 2 3 4 5 6 7 8 9 10 11 12 |
{ "statuses": [ {"status":"paid","count":"7"}, {"status":"expired","count":"9"}, {"status":"sent","count":"1"} ], "fullcount": [ {"count":"17"} ] } |
3.4. Подготовка счёта /change/invoice/preview/
Этот запрос создаёт по переданным параметрам оплаты счёт и генерирует для отображения в виде предварительного просмотра HTML-код письма счёта.
Тип | Формат запроса | ||
POST | /change/invoice/preview/ | ||
Параметр | Назначение | ||
1. | pay_amount | Сумма заказа к оплате | |
2. | clientid | Идентификатор клиента | |
3. | orderid | Номер заказа | |
4. | service_name | Наименование услуги | |
5. | client_email | E-mail адрес клиента | |
6. | client_phone | Телефон клиента | |
7. | expiry | Срок действия счёта в формате YYYY-MM-DD или YYYY-MM-DD H:i:s (не включительно) |
|
8. | token | Токен безопасности. | |
Таблица 3.4.1. Параметры запроса |
В ответ на данный запрос возвращается объект с полями invoice_id, содержащим уникальный номер созданного счёта, invoice_url, полный URL данного счёта, и invoice, где находится HTML-код предпросмотра e-mail сообщения, которое будет выслано клиенту:
1 2 3 4 5 |
{ "invoice_id" : "20120229133742255", "invoice_url" : 'https://pay.example.com/bill/20120229133742255", "invoice" : "<HTML><HEAD><META http-equiv=Content-Type ..." } |
Созданному счёту назначается служебный статус created. Счета с этим статусом не возвращаются в запросе истории счетов.
Плательщику можно передать адрес счёта из invoice_url, по любому каналу (почта, сервисы сообщений и т. п.). При переходе по этому адресу плательщик попадёт на страницу оплаты данного счёта для ввода реквизитов карты.
Также, к полученной ссылке можно добавить GET-параметр pstype с указанием идентификатора способа оплаты:
1 |
https://<адрес сервера Paykeeper>/bill/<invoice_id>?pstype= |
Например, если нужно показать плательщику QR-код Системы Быстрых Платежей, идентификатор способа оплаты sbp_default. Если нужно получить содержимое QR-кода для того, чтобы отобразить его своими средствами (в приложении, отправить в письме, напечатать на товарной накладной и т. п.), надо также добавить к URL счёта GET-параметр, returnFormat=json, например:
1 |
https://<адрес сервера Paykeeper>/bill/<invoice_id>?pstype=sbp_default&returnFormat=json |
При выставлении счёта возможно, также, указать не только список товарных позиций и дополнительные свойства чека, но и некоторые дополнительные атрибуты платежа. Для этого нужно в переменной service_name передавать JSON-объект со следующими полями:
Поле | Назначение | ||
cart | Объект корзины для чека 54-ФЗ | ||
receipt_properties | Объект дополнительных свойств чека | ||
lang | Параметр lang платежа | ||
user_result_callback | Параметр user_result_callback платежа | ||
service_name | При платеже будет отображаться в качестве наименования услуги | ||
Таблица 3.4.2. Объект service_name |
Пример:
1 2 3 4 5 6 7 |
service_name := "{ cart : [ {...} ], user_result_callback : "https://", lang : 'ru'|'en', receipt_properties : { agent_info : {}, supplier_info: {} , ...} service_name : '' }" |
3.5. Отправка счёта клиенту /change/invoice/send/
Данный запрос отправляет клиенту письмо, созданное предыдущим запросом.
Тип | Формат запроса | ||
POST | /change/invoice/send/ | ||
Параметр | Назначение | ||
1. | id | Идентификатор созданного счёта, письмо по которому необходимо отправить. | |
2. | token | Токен безопасности. | |
Таблица 3.5.1. Параметры запроса |
Результатом данного запроса будет объект
1 2 3 |
{ "result" : "success" } |
в случае, если отправка произошла успешно, и объект ошибки, если письмо отправить не удалось.
3.6. Отмена счёта /change/invoice/revoke/
Данный запрос отменяет счёт, который был ранее сформирован.
Тип | Формат запроса | ||
POST | /change/invoice/revoke/ | ||
Параметр | Назначение | ||
1. | id | Идентификатор созданного счёта, который нужно отменить. | |
2. | token | Токен безопасности. | |
Таблица 3.6.1. Параметры запроса |
Результатом данного запроса будет объект
1 2 3 |
{ "result" : "success" } |
3.7. Оплата счёта наличными /change/invoice/accept-cash/
Данный запрос позволяет отметить счёт, как оплаченный наличными.
Тип | Формат запроса | ||
POST | /change/invoice/accept-cash/ | ||
Параметр | Назначение | ||
1. | invoice_id | Идентификатор созданного счёта, который нужно оплатить. | |
2. | client_phone | Телефон плательщика (необязательный параметр). | |
3. | token | Токен безопасности. | |
Таблица 3.7.1. Параметры запроса |
Результатом данного запроса будет следующий объект:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
{ "result" : "success", "payment" : { "id" : "20140415042846859", "status" : "success", "pay_amount" : "777.00", "clientid" : "Иван Иванов", "orderid" : "34567", "service_name" : "null", "client_email" : "hidden@paykeeper.ru", "client_phone" : "+79954332810", "created_datetime": "2023-04-15 04:28:46", "paid_datetime" : "2023-04-19 04:29:15" } } |
Запросы 3.* и личный кабинет PayKeeper
Ниже приведен скриншот, поясняющий применение запросов данного раздела на примере личного кабинета PayKeeper.