Видео-обзор: https://vk.com/video
Модуль помогает организовать программный интерфейс для внешних и внутренних приложений.
| С 01.01.2020 запускаем программу поддержки общественных организаций, некоммерческих фондов, сообществ волонтёров, то есть всех тех компаний, которые работают на благо общества. В рамках данной программы уже поддержали проект Автоволонтёров России: https://x-15.ru Подробнее о программе вы можете узнать у наших операторов, по любым доступным каналам связи. |
| Один из фактов о модуле: на основе данного модуля, студенты изучают работу REST API, а также реализуют собственные интерфейсы, которые позже сдают в виде курсовых и даже дипломных работ. |
| Один из часто задаваемых вопросов: может ли модуль загружать на сайт остатки по товарам с сайта поставщика? Нет, модуль не может импортировать остатки по товарам с сайта поставщика. Модуль помогает реализовать API на вашем сайте, чтобы сторонние клиенты (другие сайты, мобильные приложения, и так далее) могли отдавать или забирать данные с вашего сайта. |
Ранее нами уже был разработан и опубликован на бесплатной основе модуль REST API. Данный модуль хорошо себя зарекомендовал для решения задач межплатформенных обменов, показателями этого факта являются отзывы и количество скачиваний. Со временем стало появляться множество запросов по доработке модуля, и как следствие, мы приняли решение о написании новой, усовершенствованной версии уже полюбившегося модуля.
В данной версии мы учли все недостатки и пожелания из прошлой версии, очень хорошо оптимизировали ядро модуля, теперь оно работает гораздо быстрее, и на этом мы делаем свой основной упор.
Помимо переработки ядра немаловажным фактором является и добавление карты роутов. За счет карты появилась возможность очень гибко настраивать параметры для любого отдельного роута.
Что получите от приобретения модуля:
- Уменьшение стоимости разработки API за счет сокращения времени на программирование интерфейса.
- Поддержка от профессионалов, имеющих большой опыт создания API.
- Готовый RESTful API интерфейс, с библиотекой встроенных методов, а также с возможностью создавать собственные, кастомные методы, реализующие любую, необходимую логику. И конечно, с автогенерируемой документацией, которую можно предоставить сторонним разработчикам.
Возможности:
- Использование API 1С-Битрикс через нативный рест-провайдер.
- Загрузка интерфейса до запуска публичной части сайта.
- Отсутствие необходимости в дополнительной настройке платформы.
- Виртуальный путь к интерфейсу, в том числе и от корня домена (https://domain.com/ или https://domain.com/{api}/ или https://api.domain.com/).
- Настройка доступа в административной части сайта к разделам модуля на уровне групп пользователей.
- Автогенерируемая документация в административном разделе.
- Автогенерируемая документация для клиента в JSON-формате.- Поддержка карт роутов.
- Создание произвольных роутов (/{api}/user/, /{api}/user/get/, /{api}/user/v1/, ... ).
- Установка собственных контроллеров для роутов (классы, внешние классы, php-файлы).
- Настройка уровня доступа к роутам.
- Валидация параметров входящего запроса.
- Авторизация по логину и паролю для конкретного роута.
- Авторизация по токену для конкретного роута.- Генерация токенов для пользователей.
- Поддержка списка "белых" логинов/токенов для конкретного роута.
- Проверка групп пользователя при авторизации для конкретного роута.
- Возможность ограничения количества запросов в единицу времени на уровне групп пользователей.
- Возможность передачи дополнительных заголовков при ответе.
- Возможность деактивировать конкретный роут.
- Кэширование входящих запросов и ответов средствами платформы.
- Журналирование запросов и ответов.
- Настройка CORS из административной части сайта.
- Наличие функций упрощающих разработку интерфейса.
- Наличие библиотеки встроенных роутов ускоряющих разработку интерфейса.- Наличие примеров и руководств для разработчика.
Более подробно все возможности, функции и примеры описаны в документации, которая имеется в модуле.
Чем данный модуль отличается от REST API Битрикса?
1.1. В REST API Битрикса мало гибкости, есть необходимость использовать именно предоставленные роуты. Данный модуль позволяет формировать свои роуты, писать свою логику при обработке запроса, то есть предоставляет больше гибкости;
1.2. REST API Битрикса реализовано не совсем согласно архитектурному стилю REST;
1.3. В REST API Битрикса, при обработке запроса порой происходят «лишние» действия, которые могут создавать дополнительную задержку при ответе клиенту, может это и не сильно критично, но API должно быть настолько быстрым, насколько это возможно;
1.4. API не всегда должно быть доступно всем, иногда оно должно быть уникально (роуты, параметры, ... ) для проекта, но за счет общего стиля REST API Битрикса, документация которого в общем доступе, эта уникальность нарушается и создает дополнительную лайзеку для атак на сайт. Используя данный модуль, можно указывать собственное имя роута, где будет работать API. Например: domain.com/rest/ или domain.com/api/, или domain.com/rest-api/, или api.domain.com, и так далее;
1.5. В REST API Битрикса нет возможности как-то управлять интерфейсом из административной части сайта;
1.6. В REST API Битрикса нет возможности регулировать доступы к роутам, ограничивать доступ по количеству запросов от клиента, журналировать запросы и ответы, и некоторые другие функции.
1.7. На текущий момент, в REST API Битрикса, например, нет возможности создать заказ через API. Используя данный модуль вы можете реализовать этот функционал.
1.8 В целом, данный модуль пишется и развивается на основе запросов пользователей, но REST API Битрикса пишется на усмотрение Битрикса. Плюс это или минус - решать вам.
Примечание:
- Минимальная версия PHP >= 8.1 (согласно требованиям платформы). Использование более ранней версии возможно, но крайне не рекомендуется, в виду возникновения ошибок.
- Обязательно наличие файла для обработки 404 ошибки (обычно имеется в корне сайта - 404.php) со всеми "директивами" 1С-Битрикса.
- Если используется веб-сервер Apache: обязательно прописать ErrorDocument 404 /404.php в .htaccess, расположенный в корне сайта, или прямо в конфигурационном файле Apache.
- Если используется веб-сервер Nginx: обязательно прописать error_page 404 = /404.php?$query_string; в секцию server конфигурационного файла (обычно nginx.conf).
- Для работы CORS-запросов необходимо чтобы на веб-сервере были разрешены запросы типа OPTIONS.
Спасибо Вам за ознакомление с нашим модулем. Если у Вас имеются какие-либо вопросы/предложения, то мы всегда готовы обсудить их через контакты, указанные в разделе поддержки.
Для наших партнёров готовы предлагать скидки на модуль по индивидуальным условиям.
Для получения подробностей напишите нашему менеджеру через раздел контактов.
- Исправлено: поправлен сброс значений параметров.
- Исправлено: исправлено получение значений параметров. Причина: после обновления платформы, названия параметров приводились к нижнему регистру.
- Доработано: обновлена ссылка на Документацию в меню модуля.
- Доработано: доработано описание параметра Отложенный запуск.
- Доработано: техническое обновление.
- Доработано: улучшена поддержка версии PHP выше 8.1.
- Доработано: добавлена поддержка отключения передачи данных ответа при использовании json(). Например: response()->json(null, 404);
- Доработано: добавлена проверка существования пути при установке пути к собственным картам роутов.
- Доработано: добавлена возможность дополнять заголовок Access-Control-Allow-Headers. Смотрите раздел: Безопасность - Фильтры.
- Доработано: улучшено определение кастомных заголовков Content-Type (+json) при выполнении запросов к модулю.
- Доработано: добавлена возможность указывать кастомные заголовки Content-Type (+json) при выполнении запросов к модулю. Например: Content-Type: application/vnd.eda.picker.errors.v1+json или application/problem+json, и так далее. Подробнее: https://www.iana.org/assignments/media-types/media-types.xhtml
- Доработано: добавлена возможность передачи собственного ID клиента в функцию journal()->add().
- Доработано: добавлены функции-полифилы для корректной работы модуля на версии PHP меньше 8.0: str_contains, str_starts_with, str_ends_with.
- Доработано: добавлена возможность указывать собственный заголовок Content-Type при ответе клиенту. Внимание: при проверке используется функция str_contains, которая доступна только с версии PHP 8.0.
- Доработано: улучшена совместимость с PHP 8 и выше.
- Доработано: обновлена ссылка на документацию к модулю.
- Доработано: поправлена логика проверки входных параметров.
- Доработано: улучшена совместимость с PHP 8 и выше.
- Доработано: улучшена совместимость с PHP 8 и выше.
- Доработано: на уровне ядра добавлен заголовок Access-Control-Allow-Credentials со значением true.
- Доработано: отключена проверка модуля безопасности на фишинг при редиректе на страницу документации из административного раздела.
- Улучшено: работа с журналом Входящие запросы - переведено на штатное ORM.
- Улучшено: повышена производительность Монитора поддержки.
- Доработано: доработана вёрстка Монитора поддержки.
- Исправления: рефакторинг и оптимизация.
- Доработано: добавлена обратная совместимость для старых версий модуля, где еще отсутствует класс Password с методом equals().
- Исправления: мелкие правки.
- Доработано: в новых версиях главного модуля, поле PASSWORD объявлено приватным. Поэтому, при авторизаци по логину и паролю, могли наблюдаться проблемы.
- Исправления: незначительные улучшения.
- Доработано: теперь учитывается формат даты и времени для не RU локализаций.
- Исправлено: кодировка копирайта в заголовке ответа.
- Доработано: мелкие правки и рефакторинг.
- Доработано: добавлена возможность выбора сайтов, на которых необходимо запускать модуль.
- Доработано: улучшена работа модуля в режиме многосайтовости.
- Доработано: добавлено игнорирование всех запросов, которые выполняются на адрес /bitrix/.
- Доработано: авторизация по логину и паролю. Теперь проверка пароля выполняется с помощью метода Bitrix\Main\Security\Password::equals().
- Доработано: в связи с устаревшим, начиная с версии PHP 7.2.0, функционалом механизма перегрузки функций (mbstring.func_overload), и отказом от использования его в платформе, строковые функции модуля были переведны в многобайтовый режим работы.
- Исправлено: проблема при подключении модуля в файле init.php, в случае, если файл имелся в директории, но был абсолютно пустым.
- Доработано: теперь резервная копия файла init.php создаётся до установки и до удаления модуля. Ранее копия создавалась лишь при установке модуля.
- Доработано: незначительные технические изменения.
- Доработано: авторизация по логину и паролю.
- Доработано: функция возврата ответа клиенту: response()->json(). Теперь в данную функцию можно передавать значения заголовков не только в виде строки, но и в виде массива. В котором могут быть указаны дополнительные параметры для заголовка (в соответствии с функцией header($header, $replace, $http_response_code)). Подробнее смотрите в роуте-примере (example).
- Добавлено: класс Artamonov\Rest\Foundation\Token. Теперь можно генерировать токены пользователей с помощью данного класса, при любой необходимости. Класс поддерживает как генерацию токенов, так и другие действия. Генерация токенов возможна для списка пользователей, плюс поддерживаются параметры ($parameters) от метода UserTable::getList(). Для удобства добавлена функция token(). Подробнее смотрите в документации.
- Добавлено: в разделе Безопасность, пошаговое создание и обновление токенов для пользователей. Полезная функция, если в базе сайта зарегистрировано большое количество пользователей.
- Доработано: незначительные технические изменения.
- Доработано: техническое обновление.
- Исправлено: проблема возникающая после истечения демонстрационного периода.
- Доработано: метод получения параметров модуля из базы. Теперь получаемые параметры кэшируются. Время кэширования зависит от настроек параметра cache_flags в файле /bitrix/.settings.php.
- Доработано: метод получения данных пользователя, если была активна авторизация для роута. Теперь метод умеет десериализовывать данные в пользовательских полях.
- Доработано: ключ карты роутов example был добавлен в роуте {api}/docs.
- Исправлено: если в карте роутов отсутствует какой-либо контроллер (файл или класс), тогда в документации будет выведено сообщение об этом.
- Добавлено: параметр для регулирования глобальной проверки сроков годности токенов. Внимание: по умолчанию данный параметр отключен. Подробнее в разделе Безопасность.
- Добавлено: автогенерация токена при добавлении нового пользователя. Подробнее в разделе Безопасность.
- Добавлено: сообщения возвращаемые клиенту при возникновении ошибок на этапе запуска интерфейса.
- Добавлено: проверка многоуровневых параметров при передаче запроса. Подробнее структуру карты можно посмотреть в документации к модулю.
- Доработано: раздел документации с картой роутов - теперь поддерживается отображение неограниченного количества уровней параметров роута.
- Добавлено: поддержка разделителя параметров в документации карты роутов - для лучшего визуального представления списка параметров. Подробнее структуру карты можно посмотреть в примере карты роутов.
- Доработано: при проверке параметра на integer, в опции max_range теперь используется константа PHP_INT_MAX.
- Добавлено: теперь числа переданные в виде строки, будут автоматически преобразованы в нужный тип, при проверке входящих параметров. Поддерживаемые типы для преобразования: integer, float.
- Исправлено: верстка в разделе Документация - Карта роутов.
- Исправлено: проверка типа входящих параметров.
- Добавлено: настройка видимости меню модуля в общем меню админ. раздела.
- Добавлено: нативный роут {{api}}/provider. Роут является провайдером к внутреннему апи платформы 1С-Битрикс. Поддерживает get и post запросы. Подробнее про использование роута можно узнать в документации.
- Добавлено: в Helper модуля добавлен метод isBool.
- Доработано: техническое обновление.
- Добавлено: возможность использовать переменные в роутах. Теперь в карте роутов можно указывать шаблон строки с использованием переменных. Например: /example/check/section/{{sectionId}}/{{productId}}/view/. Значения переменных sectionId и productId можно будет получить так же через request()->get(). Примеры шаблонов строк можно посмотреть в документации по картам роутов.
- Добавлено: константы отключающие сбор статистики, проверки агентов и другие.
- Исправлено: мелкие правки по дизайну модуля в админ.разделе.
- Исправлено: мелкие правки по коду.
- Исправлено: решена проблема отображения роутов в документации, если контроллеры роутов были прописаны через путь к файлу, а не через неймспейс.
- Исправлено: решена проблема отображения технического сообщения на страницах Настройки и Безопасность при активации режима "Установка для разработки".
- Доработано: отложенный запуск интерфейса. Теперь можно регулировать момент запуска модуля с помощью параметра в Настройках. Стало возможным запускать модуль либо при старте init.php (1.5), либо перед запуском визуальной части, в событии OnProlog (1.15). Подробнее: https://dev.1c-bitrix.ru/api_help/main/general/pageplan.php
- Обновлено: документация.
- Доработано: техническое обновление.
- Изменено: для большего удобства документация по модулю вынесена на сторонний ресурс.
- Доработано: документация по модулю.
- Доработано: мелкие улучшения.
- Доработано: метод создания таблиц журналов.
- Исправлено: языковые фразы.
- Исправлено: выборка данных по дате в журнале Входящие запросы.
- Исправлено: ошибка возникающая в случае удаления таблиц при удалении модуля.
- Исправлено: логика внутренних функций.
- Исправлено: незначительные ошибки.
- Доработано: если роут отключен, тогда он будет исключен из документации в публичной части (см. описание версии 2.5.0).
- Исправлено: теперь функции модуля не доступны из публичной части сайта.
- Доработано: Оптимизация и увеличение производительности.
- Добавлено: в Журнал Запрос/Ответ добавлено поле Метод, а также добавлен фильтр по данному полю.
- Добавлено: при авторизации через логин и пароль теперь еще происходит проверка на наличие $_SERVER['PHP_AUTH_USER'] и $_SERVER['PHP_AUTH_PW'], для поддержки HTTP Authorization.
- Добавлено: при несовпадении типа контента запроса с настройками роута, теперь возвращается название типа контента, который необходим при запросе.
- Добавлено: если запрос производится с участием авторизации, через токен или логин/пароль, тогда в параметры запроса будет добавлена информация о пользователе, которому принадлежат авторизационные данные. Данные пользователя сохраняются в ключ _user. Напоминание: в контроллере, параметры входящего запроса, можно получить с помощью функции request()->get().
- Доработано: при отключении нативных роутов они деактивируются и в документации.
- Доработано: добавлен индикатор активности нативных роутов в раздел Поддержка.
- Доработано: расширена поддержка типов контента при запросе. Например, ранее, метод PUT или DELETE поддерживали только application/json, теперь поддерживают и application/x-www-form-urlencoded, и другие. Напоминание: не забывайте указывать/ограничивать тип контента запроса через карту роутов, с помощью ключа contentType.
- Доработано: расширена поддержка типов запросов: HEAD, PATCH.
- Изменено: название Журнала Запрос/Ответ -> Входящие запросы.
- Изменено: актуализирована документация по модулю.
- Удалено: описание модуля из раздела Документация - Основные сведения.
- Доработано: Незначительные исправления.
- Изменено: приведение названий входящих заголовков к нижнему регистру.
- Добавлено: нативный роут для получения ID пользователя по логину или токену. При запросе требуется авторизация по токену. Уточнение: любой роут может быть перекрыт через собственную карту роутов. То есть, если нативный роут вам чем-то не подходит, то вы можете скопировать его в собственную карту и модифицировать под необходимую логику.
- Добавлено: возможность включать/отключать использование нативных роутов.
- Добавлено: возможность указывать путь к собственным картам роутов. Теперь, нет необходимости хранить рабочие файлы в папке модуля. А именно, карты роутов и контроллеры. Напоминаем о том, что контроллером для роута может выступать, как класс доступный по неймспейсу, так и обычный скрипт. Которые могут располагаться за пределами директории модуля.
- Добавлены: lang-папки для языков: en, de, fr. Внимание, все фразы имеют русский перевод. Папки добавлены для корректной работы модуля на мультиязычных сайтах.
- Доработано: добавлен параметр Срок годности токена. Теперь можно указывать срок годности токена при его генерации.
- Доработано: в карте роутов, в секции security, в ключ token, добавлен ключ checkExpire, регулирующий необходимость проверки срока годности токена, при авторизации через токен.
- Изменено: в карте роутов, в секции security, ключ authType переименован в type, и перенесен в ключ auth.
- Доработано: добавлен встроенный роут /{api}/docs для получения документации в публичной части. Теперь клиенты могут получать автоматически генерируемую документацию в JSON-формате, которая создается на основе карт роутов.
- Изменено: папка {module_id}/lib/controllers/example/ удалена, а класс Example перенесен в {module_id}/lib/controllers/native/.
- Доработано: возможность управлять CORS (кросс-доменными запросами) из административного раздела сайта.
- Исправлено: вернули поддержку файлового режима работы. Теперь в карте роута, вместо контроллера, можно указать путь к php-скрипту. Подробнее смотрите в карте-примере: /routes/_example.php.
- Доработано: функция json_encode заменена на Bitrix\Main\Web\Json::encode для принудительного кодирования ответа в utf-8.
- Доработано: заголовки модуля отсылаются только в том случае, если был запущен интерфейс.
- Исправлено: в карте роутов, в секции security, убран ключ required.
- Доработано: возможность авторизации по логину/паролю. Тип авторизации настраивается в карте роута - ключ authType - подробнее смотрите в карте-примере: /routes/_example.php.
- Доработано: все настройки и функционал присущий авторизации через токен, так же действует и для авторизации через логин/пароль.
- Доработано: добавлен принудительный перевод в нижний регистр названия класса при его автоматическом подключении
- Доработано: в карту роутов, в секцию security, добавлен ключ required, который указывает на необходимость активации параметра Авторизация по токену. Подробнее смотрите в карте-примере: /routes/_example.php
- Доработано: отключение использования функции GetModuleID, так как из-за неё возникала проблема в работе модуля на windows-серверах, в виду разности разделителей директорий ("/", "\"). Проблема описана в Отзыве.
- Доработано: увеличен размер поля IP в таблице artamonov_rest_request_response. Для избежания проблемы, когда запросы посылаются из REST-клиентов.
- Доработано: добавлены роуты для работы с токенами (создание, получение, удаление).
- Доработано: добавлены роуты для работы с пользователями (создание, получение, обновление, удаление).
- Доработано: небольшая оптимизация и ускорение работы ядра.
- Доработано: добавлена возможность передавать сообщение при ответе badRequest, internalServerError.
- Доработано: добавлена валидация входящих параметров при запросе. Происходит проверка на наличие параметра в запросе, а также на соответствие типу. Валидация параметров реализована на два уровня. Поддерживаемые типы параметров при валидации: string, integer, float, email, ip, domain, url. Подробнее смотрите в карте роутов.
- Доработано: добавлены человеко-понятные ответы при неудачных запросах типа badRequest.
- Исправлено: проблема при получении GET-параметров при запросах типа PUT и DELETE.
- Исправлено: проблема при получении заголовков запроса на Nginx (без Apache).
- Поправлено: стили модуля в административном разделе сайта.
- Исправлено: языковые фразы.
- Доработано: условие при установке кэша для избежания получения Исключения.
- Доработано: добавлен параметр в разделе Настройки для включения/отключения тестового роута - http|https://{domain}/{api}/example/check.
- Доработано: в карте роутов добавлен ключ possibleValue, для указания возможных значений параметра запроса. Подробнее смотрите в карте роутов.
- Доработано: в карте роутов добавлена возможность добавлять пример ответа на запрос. Подробнее смотрите в карте роутов.
- Доработано: в карте роутов добавлена возможность исключать описание роута. Подробнее смотрите в карте роутов.
- Доработано: вывод JSON в журнале Запрос/Ответ.
- Исправлено: параметры для возможности работы демо-режима
- Исправлено: работа CORS-запросов
- Исправлено: интерфейсные ошибки
После установки модуль будет расположен в разделе Сервисы.
Онлайн-чат (срочные вопросы): https://wbc.bitrix24.ru/online/chat
E-mail (вопросы общего характера): mail@webco.one
E-mail (вопросы по документам): docs@webco.one
E-mail (вопросы по поддержке): support@webco.one
E-mail (вопросы по качеству услуг): d.artamonov@webco.one
Вконтакте: https://vk.com/webco
RUTUBE: https://rutube.ru/u/webco
Telegram-канал: https://t.me/webco_one
Telegram-бот: https://t.me/webco_one_bot
MAX-канал: https://max.ru/id540550482808_biz
MAX-бот: https://max.ru/id540550482808_bot
Документация: https://webco.one/docs
Для покупки товара в нашем интернет-магазине выберите понравившийся товар и добавьте его в корзину. Далее перейдите в Корзину и нажмите на «Оформить заказ» или «Быстрый заказ».
Если оформляете быстрый заказ: напишите ФИО, телефон и e-mail. Вам перезвонит менеджер и уточнит условия заказа. По результатам разговора вам придет подтверждение оформления товара на почту или через СМС. Теперь останется только ждать доставки и радоваться новой покупке.
Оформление заказа в стандартном режиме выглядит следующим образом. Заполняете полностью форму по последовательным этапам: адрес, способ доставки, оплаты, данные о себе. Советуем в комментарии к заказу написать информацию, которая поможет курьеру вас найти. Нажмите кнопку «Оформить заказ».
Оплачивайте покупки удобным способом. В интернет-магазине доступно 3 варианта оплаты:
- Наличные при самовывозе или доставке курьером. Специалист свяжется с вами в день доставки, чтобы уточнить время и заранее подготовить сдачу с любой купюры. Вы подписываете товаросопроводительные документы, вносите денежные средства, получаете товар и чек.
- Безналичный расчет при самовывозе или оформлении в интернет-магазине: карты МИР. Чтобы оплатить покупку на сайте, система перенаправит вас на сервер платежной системы. Здесь нужно ввести номер карты, срок действия и имя держателя.
- Электронные системы при онлайн-заказе: ЮMoney. Для совершения покупки система перенаправит вас на страницу платежного сервиса. Здесь необходимо заполнить форму по инструкции.
- Безналичная оплата на наш расчетный счет по выставленному счету.
Экономьте время на получении заказа. В интернет-магазине доступно 4 варианта доставки:
- Электронная поставка - все необходимые сведения о лицензии, праве пользования, кодах, ключах и др. высылаются покупателю на его e-mail.
- Курьерская доставка. Когда товар будет отправлен с нашего склада, Вам придет уведомление. В день доставки с Вами заблаговременно свяжется курьер для уточнения времени и деталей доставки. Доставка производится "до двери". Осмотрите упаковку на целостность и соответствие указанной комплектации.
- Постамат. Когда заказ поступит на точку, на Ваш телефон или e-mail придет уникальный код. Заказ нужно оплатить в терминале постамата. Срок хранения — 3 дня.
- Доставка Почтой России. Когда заказ придет в отделение, на Ваш адрес придет извещение о посылке. Перед оплатой Вы можете оценить состояние коробки: вес, целостность. Вскрывать коробку самостоятельно Вы можете только после оплаты заказа. Один заказ может содержать не больше 10 позиций и его стоимость не должна превышать 100 000 р.
Дополнительная информация.
Изучите полный алгоритм продления лицензий на модули 1С-Битрикс: Маркетплейс, включая активацию льготных купонов. Мы детально разбираем все условия: обязательный 30-дневный срок для сохранения максимальной выгоды, пропорциональное ценообразование (12,5%, 25%, 50% от цены модуля) и ограничение по минимальной сумме в 500 рублей. Этот гайд поможет вам эффективно планировать бюджет и гарантировать актуальность вашего проекта.