Webhook не работает с плагином WP Discourse

Я установил плагин WP Discourse, и всё работает нормально, кроме вебхука «Синхронизация данных комментариев». Он постоянно завершается ошибкой со статус-кодом 400.

Вот ответ:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
</body></html>
  • payload URL кажется правильным.
  • Webhook Secret Key указан и в Discourse, и в плагине WP.
  • Content Type установлен в application/json.
  • Пункт Post Event отмечен.
  • Пункт Check TLS certificate of payload url отмечен.
  • Пункт Active отмечен.

Буду очень признателен за любые идеи.

Еще раз проверьте, что URL полезной нагрузки и секретный ключ веб-хука указаны верно.

Если это не решит проблему, сообщите, пожалуйста, какую структуру постоянных ссылок использует ваш сайт WordPress. Структура постоянных ссылок находится в разделе Настройки / Постоянные ссылки панели управления WordPress.

URL полезной нагрузки и секретный ключ веб-хука настроены правильно.

Структура постоянных ссылок: «Имя записи».

Какой ответ вы получаете от своего сайта WordPress, если нажимаете кнопку «Ping» в списке событий веб-хука на Discourse?

Просто интересно, есть ли какие-то дополнительные мысли по этому поводу…

Вы знаете, отключили ли вы WordPress REST API на своём сайте? Если да, то это приведёт к сбою вебхук-запросов, отправляемых из Discourse.

Похоже, что это включено, но я изучу это подробнее

REST вроде бы в порядке… но когда я ввожу URL полезной нагрузки в браузере, получаю ошибку 404…

Это ожидаемо. Маршрут, на который вебхук отправляет данные в Discourse, принимает только запросы POST.

Тогда можно ожидать, что ping сработает?

Да, ping должен работать.

В каком формате вы вводите URL в поле «Payload URL» вебхука на Discourse? Вы можете опустить доменную часть URL. URL, который указан в описании опции «Синхронизация данных комментариев» на WordPress, должен быть правильным (он создается на основе структуры постоянных ссылок вашего сайта), но возможно, он не подходит для вашего случая.

https://my.url.net/wp-json/wp-discourse/v1/update-topic-content

Скопируйте и вставьте данные из плагина WP Discourse. Раздел «Синхронизация данных комментариев» на вкладке веб-хуков.

URL полезной нагрузки выглядит корректно. Есть ли на вашем сайте WordPress какие-либо плагины, связанные с безопасностью, которые могут блокировать запрос?

Сейчас у нас он есть, но когда я впервые столкнулся с проблемой, его не было.

Плагин находится здесь: Solid Security Pro - SolidWP

Одной из заявленных функций плагина iThemes Security является возможность блокировки доступа к REST API. Стоит убедиться, что проблема не вызвана именно этим.

Вам не обязательно использовать вебхук Sync Comment Data с плагином WP Discourse. Основное преимущество его использования заключается в том, что комментарии отображаются сразу после публикации на Discourse, без необходимости ждать до 10 минут для получения новых комментариев. На очень загруженных сайтах вебхук может снизить количество запросов к API, которые ваш сайт отправляет в Discourse. Это в основном влияет на сайты, где на странице списка постов отображается количество комментариев.

Да, у меня это работает, но я хотел внедрить вебхуки, чтобы избежать задержек.
Я обсудил это с нашим разработчиком, и он сказал, что до и после установки плагина безопасности REST API не блокировался. Я в полном недоумении.

Есть ли способ подтвердить URL полезной нагрузки иначе, чем на странице веб-хука плагина Discourse?

Скриншот, который вы опубликовали выше, хорошо показывает, что URL-адрес полезной нагрузки верен. Код ответа 400, который вы получаете, указывает на то, что сервер WordPress отклоняет запрос. Если бы проблема заключалась в несовпадении секретного ключа, вы бы получали код ответа 500.

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

Вы знакомы с точным файлом журнала доступа WP, который мне следует просматривать? Я не могу найти ничего полезного.