Документация Онбординг коммерции в Cloud

Онбординг коммерции в Cloud

Прежде чем рынок сможет продавать платный план, оператор Cloud публикует коммерческий каталог и выпускает рынок. Всё делается в разделе Консоль оператора → Коммерческий каталог пятью пронумерованными шагами. Каждая запись просит недавнее подтверждение паролем и попадает в журнал аудита.

Панель Готовность вверху раздела перечисляет все условия продажи для продавца, рынка и валюты и показывает, чего ещё не хватает. Когда всё зелёное, клиенты этого рынка могут покупать через Подписка.

Держите у продавца один рынок на валюту. Клиент рынок не выбирает: его согласие с условиями записывается для того единственного рынка, который продаёт в валюте его аккаунта. Если в одной валюте открыты два рынка, рынок неоднозначен, согласие не записывается и новые клиенты не могут купить; панель готовности называет второй рынок, чтобы его можно было закрыть.

Кто что делает

Роль Кто назначает Что публикует
Администратор площадки повышение через CLI оператора назначает две роли ниже
Финансовый одобряющий администратор площадки юридического продавца, публичные цены, финансовое одобрение выпуска рынка
Privacy-советник администратор площадки политику рынка (налог и фискализация), одобрение выпуска рынка со стороны советника

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

Шаг 1 — Назначьте одобряющих

Введите e-mail пользователя, выберите роль и нажмите Назначить. У пользователя уже должен быть подтверждённый аккаунт Cloud и доступ оператора. Аккаунт без доступа оператора отклоняется с кодом target_not_operator — сначала выдайте доступ. Отозвать снимает роль; опубликованное ранее остаётся.

Шаг 2 — Опубликуйте юридического продавца

Код продавца (например, mockarty), страна, юридическое название и статус. Повторная публикация того же кода меняет статус; продавец никогда не удаляется.

Шаг 3 — Опубликуйте политику рынка

Privacy-советник публикует политику для пары продавец × рынок: ставку НДС, фискализацию и дату пересмотра. Каждая публикация — новая ревизия; прошлая утверждённая ревизия отзывается автоматически, так что у рынка всегда ровно одна действующая политика.

Шаг 4 — Опубликуйте публичные цены

Финансовый одобряющий публикует одну цену на план, рынок и валюту с периодом оплаты и датой начала. Новая цена закрывает предыдущую с даты своего начала — цены не пересекаются.

Для инфраструктурных единиц нужен ещё один шаг. Опубликуйте цену пополнения для плана wallet-topup-infra с периодом Разово, затем в форме Ставка инфраструктурной единицы под формой цены выберите эту цену и задайте цену одной единицы и нашу себестоимость одной единицы. Форма предлагает только цены пополнения, у которых ещё нет ставки. Пока ставки нет, витрина пополнений не продаёт инфраструктурные единицы, а у клиентов, включивших оплату раннер-минут сверх тарифа, остаётся жёсткий стоп.

Шаг 5 — Выпустите рынок

Пакет свидетельств закрепляет текущую версию условий, политику рынка, цену выбранного плана и текущие версии платёжного и фискального коннекторов. Сначала настройте эти коннекторы в разделе Коннекторы платформы (см. Коннекторы платформы Cloud) с кодом продавца, рынком и режимом, которые соответствуют контуру выпуска: sandbox берёт коннекторы в режиме test, production — в режиме live.

  1. Нажмите Показать состояние — панель перечислит, что закрепит пакет и чего не хватает.
  2. Нажмите Создать пакет и гейт в своей роли.
  3. Одобрите гейт в своей роли, затем попросите второго человека одобрить в его роли.

Когда оба одобрения записаны, гейт показывает Выпущен, а панель готовности становится зелёной. Любое последующее изменение закреплённых артефактов — новая цена, политика или версия коннектора — требует нового выпуска.

Что видит клиент

Покупатель принимает текущие условия при входе; это принятие становится договорным свидетельством продажи, поэтому второго согласия при оформлении нет. Подписка создаёт заказ и счёт. Оплата через провайдера перенаправляет к нему, а оплата целиком с промо-баланса завершается без перенаправления. В обоих случаях счёт становится paid и план активируется только после подтверждения расчёта. Действия возврата в кабинете нет: отменённый тариф работает до конца оплаченного периода, а ошибочное списание разбирает поддержка. Если сохранённый счёт временно не удаётся прочитать, кабинет сообщает об ошибке, а не утверждает, что счёта нет.

Каждую новую редакцию условий публикуйте с новым числовым номером, например v2 после v1. Повторное использование того же номера под другой меткой (v1b или v01) отклоняется: при изменении документа клиент должен принять действительно новую редакцию.

Для первой продажи должен быть однозначно определён рынок. Если новому платёжному аккаунту подходят несколько рынков, оформление останавливается, а не выбирает юридический регион за покупателя. До покупки обратитесь в поддержку: повторное принятие условий не устранит неоднозначность.

Настройка развёртывания

Платное оформление включается переменной CLOUD_API_BILLING_MODE=provider у Cloud API. Значение по умолчанию free оставляет каталог редактируемым, но отклоняет платное оформление.

Одного выбора provider недостаточно, чтобы развёртывание могло принимать деньги. Для реального списания нужны ещё CLOUD_API_ENV=prod и CLOUD_API_LIVE_PAYMENTS=true; если хотя бы одного нет, оформление остаётся в тестовом режиме, а клиенту сообщается, что для рынка нет одобренного sandbox-релиза. Это сделано намеренно: эквайринг, который ещё не подключён, не должен получить списание из-за того, что переменную окружения поменяли по другой причине. Пополнение по промокоду и все пути списания работают независимо — этого контура они не касаются.

Учёт тарифов на новом развёртывании

Лимиты считаются с первого запроса развёртывания — ничего сверять или включать отдельно не нужно. Каждой реплике Shared runtime нужны внутренние адреса Cloud API для четырёх служб учёта — SAAS_RUNTIME_CLOUD_FLOW_GRANT_URLS (месячные запросы, минуты раннера и исходящий трафик), SAAS_RUNTIME_CLOUD_MOCK_STOCK_URLS (лимит моков счёта), SAAS_RUNTIME_CLOUD_SYNC_STORAGE_URLS (хранилище синхронизации Team) и SAAS_RUNTIME_CLOUD_PROVIDER_CLAIM_URLS (актуальные права на работу, переданную общим провайдерам), — и её прежняя служебная аутентификация. В Helm это runtime.cloudFlowGrantURLs, runtime.cloudMockStockURLs, runtime.cloudSyncStorageURLs и runtime.cloudProviderClaimURLs; без них чарт не отрисуется, а рантайм не запустится.

  • Новый мок принимается в пределах лимита платёжного счёта хоста; удаление мока или папки моков освобождает место, а восстановление из корзины снова требует свободного места.
  • Каждый защищённый запрос к рантайму получает месячную квоту от Cloud. Экран «Использование» показывает эти цифры как зарезервированную квоту: выдача может резервировать небольшой блок до того, как израсходована каждая единица, поэтому цифра намеренно консервативна.
  • Если Cloud или одна из служб учёта недоступны, новая защищённая работа отклоняется до восстановления; квота не сбрасывается сменой Space или реплик.
  • Задание, удерживаемое для проверки прав провайдера, может быть передано только в течение 15 секунд после локального резерва. Затем оно отменяется при восстановлении или очистке по истечении, что освобождает слот провайдера. Отмена удерживаемого задания сама по себе не обещает и не запускает денежный возврат.

API

Все эндпоинты требуют сессию оператора, а для записи — подтверждение step-up и заголовок Idempotency-Key.

Метод Путь Роль, которую проверяет сервер
GET /api/v1/cloud/operator/commerce/catalogue любой оператор
GET /api/v1/cloud/operator/commerce/readiness?seller=…&market=…&currency=…&mode=test любой оператор
PUT /api/v1/cloud/operator/commerce/authority-roles администратор площадки
PUT /api/v1/cloud/operator/commerce/sellers финансовый одобряющий
POST /api/v1/cloud/operator/commerce/policies privacy-советник
POST /api/v1/cloud/operator/commerce/prices финансовый одобряющий
POST /api/v1/cloud/operator/commerce/team-packages финансовый одобряющий
POST /api/v1/cloud/operator/commerce/infrastructure-rates финансовый одобряющий
GET /api/v1/cloud/operator/commerce/market-release?seller=…&market=…&scope=sandbox&plan=team любой оператор
POST /api/v1/cloud/operator/commerce/market-release/bundles privacy-советник или финансовый одобряющий
POST /api/v1/cloud/operator/commerce/market-release/gates privacy-советник или финансовый одобряющий
POST /api/v1/cloud/operator/commerce/market-release/gates/{gate_id}/approve роль, указанная в запросе

Пакет Team — это цена на 5, 10 или 20 мест, выведенная из опубликованной базовой цены Pro и скидки, в отдельной неизменяемой ценовой линии: более поздняя публикация новой цены Pro не двигает уже опубликованный пакет. В кабинете финансовый одобряющий публикует его формой Пакет Team под формой цены (форма предлагает опубликованные цены Pro на выбор); через API тело называет версию базовой цены, тот же рынок, валюту и период оплаты, seats (5, 10 или 20), discount_bps (0–9999) и effective_from, с заголовком Idempotency-Key. Число мест вне трёх пакетов отвечает 400 bad_request; базовая цена, не являющаяся публичной ценой Pro для этого рынка, валюты и периода, — 409 commerce_catalogue_conflict.

Ставка инфраструктурной единицы называет commerce_price_version_id (открытая цена wallet-topup-infra), customer_rate_minor (цена одной единицы в минимальных единицах валюты, больше нуля), provider_cogs_minor (наша себестоимость одной единицы, ноль или больше) и необязательно rounding_mode (ceil, floor или half_up; по умолчанию ceil). Цена другого продукта или цена, у которой ставка уже есть, отвечает 409 commerce_catalogue_conflict. Опубликованные ставки перечислены в каталоге под ключом infrastructure_rates.

Запись пользователем без роли отвечает 403 authority_role_required. Публикация со ссылкой на несуществующего продавца, план или пользователя отвечает 409 commerce_catalogue_conflict; пакет с недостающими входами — 409 market_release_inputs_missing со списком пробелов.

Если каталог отвечает 503 commerce_catalogue_unavailable, сохраните номер запроса. Временный сбой может пройти при повторе; при неожиданном отказе публикации нужна проверка настройки каталога через поддержку. Кабинет показывает это пояснение на выбранном языке.