webhook = $webhook; $this->event = $event; $this->detail = $detail; $this->initiator = user(); $this->initiatedTime = time(); } /** * Execute the job. * * @return void */ public function handle() { $themeResponse = Theme::dispatch(ThemeEvents::WEBHOOK_CALL_BEFORE, $this->event, $this->webhook, $this->detail, $this->initiator, $this->initiatedTime); $webhookData = $themeResponse ?? WebhookFormatter::getDefault($this->event, $this->webhook, $this->detail, $this->initiator, $this->initiatedTime)->format(); $lastError = null; try { $response = Http::asJson() ->withOptions(['allow_redirects' => ['strict' => true]]) ->timeout($this->webhook->timeout) ->post($this->webhook->endpoint, $webhookData); } catch (\Exception $exception) { $lastError = $exception->getMessage(); Log::error("Webhook call to endpoint {$this->webhook->endpoint} failed with error \"{$lastError}\""); } if (isset($response) && $response->failed()) { $lastError = "Response status from endpoint was {$response->status()}"; Log::error("Webhook call to endpoint {$this->webhook->endpoint} failed with status {$response->status()}"); } $this->webhook->last_called_at = now(); if ($lastError) { $this->webhook->last_errored_at = now(); $this->webhook->last_error = $lastError; } $this->webhook->save(); } }