Рейтинг:0

How to Manage Webhook Notifications?

флаг pe

I had developed a controller to retrieve data from an API via a webhook. This is the type of data I received with https://webhook.site for testing :

{
  "owner": {
    "id": "100000",
    "userName": "lorem"
  },
  "notes": "",
  "created": {
    "dateTime": "2021-12-14T18:54:36",
    "timeZone": "Europe/Paris"
  },

Here is a preview of the controller :

    class WebhookLoremController extends ControllerBase {

        public function LoremListener(Request $request) {

            $data_webhook = $request->getContent();
     
            // data is invalid       
            dump($request);
            
            // data is invalid    
            dump($data_webhook);

            // obviously doesn't work as $data_webhook is invalid
            $decode = Json::decode($data_webhook);

         }

    }

Everything was working fine but now the data received is invalid. We can see the @ character for example, or problems with comma, colon, or } :

{
   "owner":"@""id":"100000",
   "userName":"lorem",
   "notes":"",
   "created":"@""dateTime":"2021-12-14T18:54:36",
   "timeZone":"Europe/Paris",

I immediately thought of a problem with the API but I have no problem if I test with https://webhook.site. I take it that the problem is on my side. If I dump $request the problem is already there.

It worked before and I did not change the code. The only thing I'm thinking about is that I updated to Drupal 9 but I'm not sure if that has anything to do with it.

Do I have to do something with drupal to retrieve this kind of data?

EDIT

Here is the dump() of $request :

"POST /webhook/listener-api-lorem-10000 HTTP/1.1 Authorization":"Content-Length":"3607 Content-Type":"application/json Host":"lorem.fr User-Agent":"Jakarta Commons-HttpClient/3.1 X-Agendize-Objectevent":"deleted X-Autonomous-System":"16276 X-Country-Code":"FR X-Forwarded-Port":"443 X-Forwarded-Proto":"https X-Php-Ob-Level":"1 X-Ssl":"yes"{
   "owner":"@""id":"10000",
   "userName":"lorem",
   "notes":"",
   "created":"@""dateTime":"2021-12-14T20:04:36",
   "timeZone":"Europe/Paris"
Jaypan avatar
флаг de
Показанный вами JSON недействителен. Вам нужно определить, является ли он недействительным или что-то происходит на стороне Drupal, что делает его недействительным. Можете ли вы просмотреть журналы запросов вашего сервера, чтобы увидеть необработанные данные запроса?
флаг pe
@Jaypan Если я тестирую веб-перехватчик с помощью https://webhook.site, полученный json действителен. Тот же вебхук, полученный с моим контроллером, недействителен. Это точно такое же уведомление, поэтому мне было интересно, нужно ли делать что-то особенное с Drupal.
Jaypan avatar
флаг de
Как вы получили недопустимый JSON, показанный в вашем сообщении? Это результат вызова dump()?
флаг pe
@Jaypan да, это дамп из `LoremListener()`, я вижу проблему в `$request`, поэтому, очевидно, в `$request->getContent()` и, конечно же, `Json::decode($data_webhook)` не работает Раньше работало, поэтому я не понимаю. Я спрашиваю у сопровождающего API, но они говорят, что это на моей стороне. Я не исключаю, что изменился API.
флаг pe
@Jaypan Вам кажется, что контроллер правильный?
Jaypan avatar
флаг de
То, что у вас есть до сих пор, выглядит нормально для меня. Я подвергаю сомнению ввод, который вы получаете, но не исключено, что Drupal мог преобразовать его между получением и вашим контроллером. Но я чувствую, что значение из запроса, вероятно, не изменилось, что заставляет меня сомневаться в поступающих данных из API.
флаг pe
@Jaypan Как проверить данные, полученные до контроллера, чтобы убедиться, что я получаю правильно или нет. Вот что мешает мне отлаживать. Я слепой. Дамп мне говорит, что это не правильно, но тест с webhook.site правильный (точно такое же уведомление).
Lambic avatar
флаг ph
Приходит ли запрос с правильным типом содержимого? Если это не «application/json», это может вызвать проблемы.
Jaypan avatar
флаг de
Журналы входящих запросов сервера - это то, с чего я бы начал.
флаг pe
@Lambic Я обновил свой вопрос с помощью `dump()` из `$request`. Я вижу `application/json` Это кажется правильным, но я вижу неверные данные.
Jaypan avatar
флаг de
Мне кажется, это ошибка в JSON, который они отправляют. Я бы попробовал снова связаться с ними и отправить дамп запроса, как вы показали выше.
флаг pe
@Jaypan Спасибо за просмотр. Мне нужно было еще раз взглянуть на эту проблему. Так что я вернусь к ним снова.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.