Перейти к содержанию

Способы оплаты

Для чтения и изменения способов оплаты приложению нужны права на настройки магазина и на внешние оплаты.

Если нужного права нет, ответ 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 оплаты нет.

POST/admin/payment_gateways.json
Параметр Описание
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 позволяет создать собственный способ оплаты без перехода на платёжную страницу. Его можно связать с отдельными способами доставки.

POST/admin/payment_gateways.json
Параметр Описание
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}
  ]
}

Смена доставки, названия и наценки:

PUT/admin/payment_gateways/6101772.json
Параметр Описание
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 уже не содержит.