Способы оплаты
Для чтения и изменения способов оплаты приложению нужны права на настройки магазина и на внешние оплаты.
Если нужного права нет, ответ 403:
{"status":"error","message":"Недостаточно прав для операции"}
Способы оплаты
GET /admin/payment_gateways.json возвращает способы оплаты, отсортированные по position. Для чтения одного способа используйте GET /admin/payment_gateways/:id.json. Несуществующий идентификатор возвращает 404 с HTML-страницей.
Объект способа оплаты содержит id, type, position, title, description, margin, available_for_individual_clients, available_for_juridical_clients, payment_delivery_variants, created_at и updated_at.
Поле margin задаёт наценку в процентах и возвращается строкой, например "0.0". Массив payment_delivery_variants содержит связи со способами доставки через delivery_variant_id. Без такой связи способ оплаты не отображается при оформлении заказа с выбранной доставкой.
Чтобы привязать способ оплаты ко всем существующим доставкам, при создании передайте add_delivery_variants: true. Чтобы выбрать отдельную доставку, передайте payment_delivery_variants_attributes с её delivery_variant_id. Одновременно передавать оба параметра не нужно: для выбранных доставок достаточно массива.
Название способа оплаты должно быть уникальным в магазине. При повторе API возвращает 422 и {"title":["уже существует"]}. Если оба флага доступности для типов клиентов равны false, API возвращает 422 и {"client_types":["Не задан тип клиента"]}. Неподдерживаемый тип, например PaymentGateway::YandexMoney, приводит к ответу 500 с HTML-страницей.
Запрос PUT изменяет название, описание, наценку, доступность для типов клиентов и связи с доставками. Чтобы удалить связь, передайте её id и _destroy: 1. Чтобы добавить — элемент с delivery_variant_id. Удаление и добавление можно выполнить одним запросом.
DELETE /admin/payment_gateways/:id.json отвечает 200, тело пустое.
Протокол PaymentGateway::External — в статье о внешнем способе. Создание этого типа тем же POST отвечает 201 и добавляет url, shop_id, password, send_order, success_url, fail_url, server_url.
Наложенный платёж
PaymentGateway::Cod — оплата при получении. Отдельного URL оплаты нет.
| Параметр | Описание |
|---|---|
payment_gateway[type] обязательныйстрока |
PaymentGateway::Cod. |
payment_gateway[title] обязательныйстрока |
Название. Уникально в магазине. |
payment_gateway[margin] необязательныйчисло |
Наценка в процентах. Больше -100 и меньше 1000. |
payment_gateway[description] необязательныйстрока |
Текст для покупателя. |
payment_gateway[available_for_individual_clients] необязательныйлогический |
Доступен физлицам. По умолчанию true. |
payment_gateway[available_for_juridical_clients] необязательныйлогический |
Доступен юрлицам. Хотя бы один тип клиента должен быть true. |
payment_gateway[add_delivery_variants] необязательныйлогический |
Привязать все текущие доставки. |
POST /admin/payment_gateways.json
Authorization: Basic API_KEY:API_PASSWORD
Accept: application/json
Content-Type: application/json
{
"payment_gateway": {
"type": "PaymentGateway::Cod",
"title": "docs-api наложенный",
"margin": 2.5,
"available_for_individual_clients": true,
"available_for_juridical_clients": false,
"add_delivery_variants": true
}
}
Ответ · 201
{
"id": 6101773,
"type": "PaymentGateway::Cod",
"position": 4,
"title": "docs-api наложенный",
"description": null,
"margin": "2.5",
"available_for_individual_clients": true,
"available_for_juridical_clients": false,
"payment_delivery_variants": [
{"id": 8, "delivery_variant_id": 9},
{"id": 9, "delivery_variant_id": 17}
]
}
Связь есть у каждого способа доставки магазина.
Произвольный способ
PaymentGateway::Custom позволяет создать собственный способ оплаты без перехода на платёжную страницу. Его можно связать с отдельными способами доставки.
| Параметр | Описание |
|---|---|
payment_gateway[type] обязательныйстрока |
PaymentGateway::Custom. |
payment_gateway[title] обязательныйстрока |
Название. |
payment_gateway[description] необязательныйстрока |
Текст для покупателя. |
payment_gateway[margin] необязательныйчисло |
Наценка в процентах. |
payment_gateway[payment_delivery_variants_attributes] необязательныймассив |
Доставки, для которых способ доступен. У элемента delivery_variant_id. |
POST /admin/payment_gateways.json
Authorization: Basic API_KEY:API_PASSWORD
Accept: application/json
Content-Type: application/json
{
"payment_gateway": {
"type": "PaymentGateway::Custom",
"title": "docs-api произвольный",
"description": "Счёт менеджеру",
"margin": 0,
"payment_delivery_variants_attributes": [
{"delivery_variant_id": 49}
]
}
}
Ответ · 201
{
"id": 6101772,
"type": "PaymentGateway::Custom",
"title": "docs-api произвольный",
"description": "Счёт менеджеру",
"margin": "0.0",
"available_for_individual_clients": true,
"available_for_juridical_clients": true,
"payment_delivery_variants": [
{"id": 7, "delivery_variant_id": 49}
]
}
Смена доставки, названия и наценки:
| Параметр | Описание |
|---|---|
id обязательныйчисло |
id способа в пути. |
payment_gateway[title] необязательныйстрока |
Новое название. |
payment_gateway[margin] необязательныйчисло |
Новая наценка. |
payment_gateway[description] необязательныйстрока |
Новое описание. |
payment_gateway[payment_delivery_variants_attributes] необязательныймассив |
Удаление связи: id и _destroy. Новая связь: delivery_variant_id. |
PUT /admin/payment_gateways/6101772.json
Authorization: Basic API_KEY:API_PASSWORD
Accept: application/json
Content-Type: application/json
{
"payment_gateway": {
"title": "docs-api произвольный обновлён",
"margin": "1.5",
"description": "Новое описание",
"payment_delivery_variants_attributes": [
{"id": 7, "_destroy": 1},
{"delivery_variant_id": 17}
]
}
}
Ответ · 200
{
"id": 6101772,
"type": "PaymentGateway::Custom",
"title": "docs-api произвольный обновлён",
"description": "Новое описание",
"margin": "1.5",
"payment_delivery_variants": [
{"id": 26, "delivery_variant_id": 17}
]
}
DELETE /admin/payment_gateways/6101772.json отвечает 200, тело пустое. Следующий список этого id уже не содержит.