Настройка commercetools Project и API

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Настройка commercetools Project и API
Средняя
~3-5 рабочих дней
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    874
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    851

Настройка commercetools Project и API

Первый шаг перед любой разработкой — корректная настройка Project: регионы, валюты, языки, каналы, сторы и API-клиенты. Ошибки на этом этапе дорого исправлять: перенос Project между регионами не предусмотрен, а неправильная структура каналов ломает ценообразование.

Выбор региона

commercetools работает на GCP и AWS в нескольких регионах:

Регион Хост API Хост Auth
Europe (GCP) api.europe-west1.gcp.commercetools.com auth.europe-west1.gcp.commercetools.com
US East (GCP) api.us-central1.gcp.commercetools.com auth.us-central1.gcp.commercetools.com
Australia api.australia-southeast1.gcp.commercetools.com auth.australia-southeast1.gcp.commercetools.com
Europe (AWS) api.eu-west-1.aws.commercetools.com auth.eu-west-1.aws.commercetools.com

Для СНГ-рынка — europe-west1.gcp. Регион фиксируется при создании Project и не меняется.

Начальная конфигурация через Merchant Center

После создания Project в mc.commercetools.com настраиваем базовые параметры:

Settings → International:

  • Languages: ru, en (первый — дефолтный)
  • Currencies: RUB, USD, EUR
  • Countries: RU, BY, KZ

Эти настройки определяют допустимые значения для цен, переводов и доставки во всём Project.

Channels и Stores

Channel — абстракция для ценообразования и инвентаря. Store — точка продажи с фильтрацией каталога.

// Создать Channel
const channel = await apiRoot.channels().post({
  body: {
    key: "storefront-ru",
    roles: ["ProductDistribution", "InventorySupply"],
    name: { ru: "Сайт Россия", en: "Website Russia" },
    defaultLocale: "ru",
    defaultCurrency: "RUB",
    address: { country: "RU" },
  },
}).execute();

// Создать Store с привязкой к Channel
const store = await apiRoot.stores().post({
  body: {
    key: "web-ru",
    name: { ru: "Веб-магазин Россия" },
    countries: [{ code: "RU" }],
    languages: ["ru"],
    distributionChannels: [{ typeId: "channel", id: channel.body.id }],
    supplyChannels: [{ typeId: "channel", id: channel.body.id }],
  },
}).execute();

Если нужно несколько сайтов (RU/BY/KZ), создаём отдельный Channel и Store для каждого.

Настройка API-клиентов

Каждый сервис получает отдельного API Client с минимальными необходимыми правами:

// Через Merchant Center: Settings → Developer settings → Create client

// Рекомендуемые клиенты:
// 1. storefront-anonymous — view_products, view_categories, manage_my_carts, manage_my_orders
// 2. storefront-customer — + manage_my_profile, manage_my_payments
// 3. backend-import — manage_products, manage_orders, manage_customers
// 4. extensions — manage_orders, view_payments
// 5. terraform — manage_project (только для инфраструктурных задач, не в коде)

Клиент для сторфронта (anonymous):

const anonymousAuthMiddleware = createAuthMiddlewareForAnonymousSessionFlow({
  host: "https://auth.europe-west1.gcp.commercetools.com",
  projectKey: process.env.CTP_PROJECT_KEY!,
  credentials: {
    clientId: process.env.CTP_STOREFRONT_CLIENT_ID!,
    clientSecret: process.env.CTP_STOREFRONT_CLIENT_SECRET!,
  },
  scopes: [
    `view_products:${process.env.CTP_PROJECT_KEY}`,
    `manage_my_carts:${process.env.CTP_PROJECT_KEY}`,
    `manage_my_orders:${process.env.CTP_PROJECT_KEY}`,
  ],
});

Клиент для залогиненного пользователя:

const customerAuthMiddleware = createAuthMiddlewareForPasswordFlow({
  host: "https://auth.europe-west1.gcp.commercetools.com",
  projectKey: process.env.CTP_PROJECT_KEY!,
  credentials: {
    clientId: process.env.CTP_STOREFRONT_CLIENT_ID!,
    clientSecret: process.env.CTP_STOREFRONT_CLIENT_SECRET!,
    user: { username: email, password },
  },
  scopes: [
    `manage_my_profile:${process.env.CTP_PROJECT_KEY}`,
    `view_orders:${process.env.CTP_PROJECT_KEY}`,
  ],
});

Terraform для version-controlled конфигурации

Конфигурация Project в Git — хорошая практика для воспроизводимых окружений:

# main.tf
terraform {
  required_providers {
    commercetools = {
      source  = "labd/commercetools"
      version = "~> 1.4"
    }
  }
}

provider "commercetools" {
  client_id     = var.ctp_client_id
  client_secret = var.ctp_client_secret
  project_key   = var.ctp_project_key
  token_url     = "https://auth.europe-west1.gcp.commercetools.com"
  api_url       = "https://api.europe-west1.gcp.commercetools.com"
}

resource "commercetools_channel" "storefront_ru" {
  key   = "storefront-ru"
  roles = ["ProductDistribution", "InventorySupply"]
  name = {
    ru = "Сайт Россия"
    en = "Website Russia"
  }
}

resource "commercetools_store" "web_ru" {
  key       = "web-ru"
  name      = { ru = "Веб-магазин Россия" }
  languages = ["ru", "en"]
  countries = ["RU"]

  distribution_channels = [commercetools_channel.storefront_ru.key]
  supply_channels       = [commercetools_channel.storefront_ru.key]
}
terraform init
terraform plan
terraform apply

Типы атрибутов (Product Types)

Product Type — схема атрибутов для группы товаров. Нельзя изменить тип атрибута после создания, только удалить и пересоздать.

await apiRoot.productTypes().post({
  body: {
    key: "apparel",
    name: "Одежда",
    description: "Атрибуты для одежды",
    attributes: [
      {
        name: "brand",
        label: { ru: "Бренд", en: "Brand" },
        type: { name: "text" },
        isRequired: false,
        isSearchable: true,
      },
      {
        name: "size",
        label: { ru: "Размер", en: "Size" },
        type: {
          name: "enum",
          values: [
            { key: "XS", label: "XS" },
            { key: "S", label: "S" },
            { key: "M", label: "M" },
            { key: "L", label: "L" },
            { key: "XL", label: "XL" },
          ],
        },
        isRequired: true,
        isSearchable: true,
      },
    ],
  },
}).execute();

Checklist перед запуском разработки

  • Region выбран, Project создан
  • Languages и Currencies настроены в Settings
  • Channels созданы (минимум 1 per storefront)
  • Stores привязаны к Channel
  • API Clients созданы с минимальными scopes
  • Product Types определены (согласовать схему атрибутов с контент-командой)
  • Shipping zones добавлены
  • Tax categories созданы
  • Конфигурация залита в Terraform (опционально, но рекомендуется)

Время на первичную настройку Project — 1–2 рабочих дня при наличии чёткого требования к структуре каталога.