Сервис CASHOFF позволяет совершать платежи в рублях через ряд провайдеров (банков для физических и юридических лиц). Работает эта возможность поверх функциональности импорта данных и требует для работы существующий авторизованный профиль. Совершение платежа состоит из следующих шагов:

  1. Добавление профиля в систему
  2. Обновление авторизации и списка продуктов
  3. Выполнение запроса на создание платежа POST /profiles/{profile_id}/payments/rub/add
  4. Выполнение запроса на подтверждение платежа POST /profiles/{profile_id}/payments/rub/{payment_id}/confirm
  5. (опционально) Отслеживание статуса платежа

Обновление авторизации и списка продуктов

Первым делом для совершения платежа необходимо авторизовать профиль, а так же загрузить по нему список продуктов. Совершать рублевые платежи возможно только по продуктам, у которых признак available_ops.payment_rub равен true. Этот атрибут по умолчанию не заполняется при обновлении данных, его нужно запросить явно через атрибут шага импорта продуктов payment_rub:

Запрос
{
	"accounts": {
		"payment_rub": true
	}
}

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

Признак сбрасывается, если обновить продукты без payment_rub=true, по этому последнее запрошенное обновление должно быть с payment_rub.

Создание платежа

Платеж создается запросом POST /profiles/{profile_id}/payments/rub/add, в котором нужно указать идентификатор продукта account_id, с которого совершается перевод, а так же атрибут doc с реквизитами платежа. Данный запрос создаст объект платежа в CASHOFF, а так же запустит создание платежа в провайдере в фоновом режиме. Список платежей по профилю можно получить запросом GET /profiles/{profile_id}/payments/rub (или конкретный GET /profiles/{profile_id}/payments/rub/{payment_id})

Результат заведения платежа в системе провайдера придет через нотификацию profile.rub_payment.add (на которую нужно подписаться): 

Запрос
{
  "event": "profile.rub_payment.add",
  "data": {
    "result": "confirm_required",
    "confirm": {
      "message": "Введите код подтверждения операции"
    },
    "payment": {
      "created": "2019-12-24T12:32:14Z",
      "changed": "2019-12-24T12:32:14Z",
      "id": 12,
      "ext_id": "38c443c6ac424d3e8ae4261620d505b3",
      "account_id": 31880,
      "status": "at_confirmation"
    },
    "profile": {
      "created": "2019-12-23T14:41:06Z",
      "changed": "2019-12-24T12:32:14Z",
      "id": 8675,
      "user_id": 6604,
      "provider": {
        "id": 153,
        "key": "sber-sme",
        "name": "Сбербанк Бизнес Онлайн",
        "type": "bank_sme",
        "logo": "https://cashoff.ru/static/media/institutions_logo/sber_36.svg"
      }
      "session": {
        "key": "ae2a33e3c9ae4de8bf0dea0c4f930785",
        "status": "ok"
      },
      "status": "ok",
      "update_done_at": "2019-12-24T12:32:14Z",
      "update_started_at": "2019-12-23T14:42:39Z"
    }
  }
}

Исход процедуры содержится в поле result, так же в нотификации будет указан объект профиля и платежа. Таблица исходов и предполагаемых действий:

Код исходаОписаниеДальнейшие действия
acceptedплатеж проверен и принят банкомНа этом заведение платежа завершается, подтверждение не требуется
confirm_requiredплатеж проверен, но требует подтвержденияТребуется выполнить следующий шаг, подтверждение платежа.
deniedплатеж не принятПлатеж с заданными реквизитами и продуктом не принят. Нужно внести изменения и создать новый.
profile_errorобщая ошибка работы с профилемОбщая ошибка работы с провайдером. Аналогична ошибке импорта данных
not_authorizedпрофиль не авторизованПрофиль не авторизован, необходимо авторизоваться (запустить обновление профиля с update_stages=["auth"]

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

Подтверждение платежа

Подтверждение платежа необходимо, если создание завершилось статусом confirm_required (подтверждение будет требоваться в абсолютом большинстве банков). Для подтверждения платежа необходимо выполнить запрос POST /profiles/{profile_id}/payments/rub/{payment_id}/confirm с кодом подтверждения, который клиент получит от банка (sms/карточка с ключами/генератор кодов). Как и в случае с созданием, подтверждение будет выполнено в фоновом режиме, а результат будет доставлен нотификацией profile.rub_payment.confirm (на которую то же нужно подписаться). Формат нотификации аналогичен созданию, как и исходы операции (за минусом того, что статуса confirm_required не будет, т.к. платеж уже в этом статусе). 

Отслеживание статуса заведенных платежей

CASHOFF может отслеживать статус проведения заведенных платежей. Для этого надо в update_stages обновления добавить шаг payments: это приведет к тому, что по всем заведенным в CASHOFF платежам (кроме тех, что в финальном статусе) будет обновлен статус из провайдера. Далее статус можно прочитать в информации по платежу (GET /profiles/{profile_id}/payments/rub / GET /profiles/{profile_id}/payments/rub/{payment_id}).