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

Чтобы поддержать платежные сценарии в смартапе, разработанном с помощью SmartApp API вам потребуются сообщения:

  • POLICY_RUN_APP — сообщение для запуска системного смартапа оплаты.
  • PAY_DIALOG_FINISHED — сообщение, которое вернет ассистент в результате обработки платежа.

Создание счета

Для создания счета на оплату, отправьте POST запрос на адрес https://smartmarket.online.sberbank.ru/smartpay/v1/invoices.

В результате запроса вы получите номер счета в поле invoice_id.

Подробное описание запроса и ответа вы найдёте в описании Smartpay API.

Вызов платежного сценария

Для вызова платежного сценария и проведения оплаты используйте сообщение POLICY_RUN_APP, сформированное следующим образом:

Пример вызова:

{
    "command": "POLICY_RUN_APP",
    "nodes": {
      "server_action": {
        "app_info": {
          "systemName": "payment_app"
        },
        "parameters": {
          "invoice_id": "3000",
          "app_info": {
            "projectId": "0da9a4a0-cb52-4490-afce-4f535c9d1eb5"
          }
        }
      }
    }
  }

В параметре projectId укажите идентификатор вашего смартапа в SmartMarket Studio. В параметре invoice_id укажите идентификатор счета.

Формат результата оплаты

В результате оплаты, ассистент вернет сообщение PAY_DIALOG_FINISHED, которое позволяет определить статус счета. Событие можно получить независимо от типа платежа — одностадийный или двухстадийный.

В событии передается response_code с кодом ответа. Этот код является информационным и говорит о наиболее вероятном состоянии оплаты. После получения кода ответа нужно отправить запрос на проверку статуса счета, затем можно принимать решение о формировании ответа клиенту и дальнейших шагах. В случае одностадийного платежа процесс оплаты завершается после получения этого стауса. Возможные значения response_code:

  • 0 — успешная оплата;
  • 1 — неожиданная ошибка;
  • 2 — пользователь закрыл смартап. При получении этого кода необходимо дополнительно отправить запрос на проверку статуса платежа, чтобы отобразить результат пользователю;
  • 3 — невозможно начать оплату, так как отображается другой сценарий оплаты;
  • 4 — время оплаты счета истекло;
  • 5 — оплата отклонена бэкендом;
  • 6 — состояние оплаты неизвестно;
  • 7 — оплата для данной поверхности недоступна.
Чтобы принять решение о формировании заказа необходимо дополнительно отправить запрос на проверку статуса счета, т.к. получение события PAY_DIALOG_FINISHED не означает, что счет перешел в финальный статус.

Пример сообщения:

"payload": {
    ...
    "server_action": {
      "action_id": "PAY_DIALOG_FINISHED",
      "parameters": {
        "payment_response":
            {
                "response_code": 0,
                "invoice_id": "***ID****"
            }
        "app_info":
            {
                "projectId": "**",
                "systemName": "**"
            }
        }
      }
    }
    ...
}

Заметили ошибку?

Выделите текст и нажмите Ctrl + Enter, чтобы сообщить нам о ней