Skip to content

WHMCS

Официальный addon-модуль CaptchaLa для WHMCS. Добавляет проверку CAPTCHA в клиентскую область WHMCS — вход, регистрацию, восстановление пароля, форму обратной связи, отправку тикета и оформление корзины — без написания кода.

В отличие от обычного виджета с site-key, каждый запрос подкреплён серверным одноразовым токеном (защита от повторов), и сторонние трекеры не загружаются.

Что охватывает

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

  • Вход
  • Регистрация
  • Восстановление пароля
  • Форма обратной связи
  • Отправка тикета
  • Оформление корзины

Требования

  • WHMCS 8.x и 9.x (протестировано на клиентской области 8.3 и 9.0; работает с темами six и twenty-one, с Friendly URLs или без них)
  • PHP 8.0+ (самой WHMCS 9.0 требуется PHP 8.2+)
  • Аккаунт CaptchaLa — получите свои App Key + App Secret на dash.captcha.la

Установка

1. Установите модуль

  1. Скачайте последний whmcs-x.y.z.zip из раздела releases.
  2. Распакуйте его в корневой каталог WHMCS. Это добавит modules/addons/captchala/.
  3. В админ-панели WHMCS перейдите в Setup → Addon Modules, найдите CaptchaLa и нажмите Activate.

2. Настройте

Нажмите Configure, затем:

  1. Вставьте свои App Key и App Secret.
  2. Выберите Widget mode и Theme.
  3. Включите формы, которые хотите защитить.
  4. Нажмите Save Changes.

Откройте страницу CaptchaLa в боковом меню админки, чтобы запустить живой тест соединения с панелью управления.

TIP

После активации, если виджет не появляется, пересохраните настройки модуля один раз — WHMCS регистрирует hooks.php модуля только при (повторной) активации/сохранении.

Конфигурация

Все настройки находятся в Setup → Addon Modules → CaptchaLa → Configure.

НастройкаТипПо умолчаниюОписание
App KeystringПубличный ключ из панели управления CaptchaLa. Обязательно.
App SecretstringСерверный секрет, используется для выпуска и проверки токенов. Обязательно; никогда не передаётся в браузер.
Widget modeenumpopuppopup (панель-триггер → полноэкранный запрос), float (встроенная панель), embed (встроенный чекбокс), bind (невидимый, перехватывает отправку).
ThemeenumdefaultЦветовой пресет: default, dark, slate, emerald, amber, rose.
LanguagestringautoКод BCP-47 (например, en, zh, de) или auto, чтобы следовать настройкам браузера.
Protect loginboolonЗапрос проверки при входе в клиентскую область.
Protect registrationboolonЗапрос проверки при регистрации нового аккаунта.
Protect password resetboolonЗапрос проверки на форме восстановления пароля.
Protect contact formbooloffЗапрос проверки на форме обратной связи.
Protect ticket submissionbooloffЗапрос проверки на финальном шаге отправки тикета.
Protect cart checkoutbooloffЗапрос проверки при оформлении корзины.
Skip for logged-in usersboolonНе запрашивать проверку у посетителей, у которых уже есть клиентская сессия.
Failure messagestringСообщение, отображаемое при неудачной проверке.

Как это работает

На каждой странице защищённой формы модуль выпускает свежий серверный токен (sct_) из панели управления, привязанный к action этой формы, и рендерит виджет, привязанный к нему. После того как посетитель решает запрос, SDK записывает одноразовый pass-токен (pt_) в форму. При отправке модуль проверяет этот pt_ на сервере до того, как WHMCS обработает форму; повторы и несоответствия action отклоняются.

Если панель управления временно недоступна, модуль fails open (пропускает отправку), чтобы ваша клиентская область никогда не блокировалась из-за сбоя вышестоящего сервиса.

FAQ

Модуль бесплатный?

Да. Модуль бесплатный. Бесплатный план CaptchaLa покрывает 10 000 проверок в месяц — платные планы нужны, только если требуется больший объём.

Работает ли он и с WHMCS 8, и с 9?

Да — протестировано на клиентской области 8.3 и 9.0, с темами six и twenty-one, с Friendly URLs или без них.

Виджет не появляется.

Пересохраните настройки модуля один раз (Configure → Save Changes). WHMCS регистрирует hooks.php только при (повторной) активации/сохранении.

Исходный код

MIT-licensed examples · CaptchaLa is operated independently