* @copyright Copyright (c) 2013 - 2020, Alex Tselegidis * @license http://opensource.org/licenses/GPL-3.0 - GPLv3 * @link http://easyappointments.org * @since v1.4.0 * ---------------------------------------------------------------------------- */ use GuzzleHttp\Client; /** * Webhooks client library. * * Handles the webhook HTTP related functionality. * * @package Libraries */ class Webhooks_client { /** * @var EA_Controller|CI_Controller */ protected EA_Controller|CI_Controller $CI; /** * Webhook client constructor. */ public function __construct() { $this->CI = &get_instance(); $this->CI->load->model('providers_model'); $this->CI->load->model('secretaries_model'); $this->CI->load->model('secretaries_model'); $this->CI->load->model('admins_model'); $this->CI->load->model('appointments_model'); $this->CI->load->model('settings_model'); $this->CI->load->model('webhooks_model'); } /** * Trigger the registered webhooks for the provided action. * * @param string $action Webhook action. * @param array $payload Payload data. * * @return void|null */ public function trigger(string $action, array $payload) { $webhooks = $this->CI->webhooks_model->get(); foreach ($webhooks as $webhook) { if (str_contains($webhook['actions'], $action)) { $this->call($webhook, $action, $payload); } } } /** * Call the provided webhook. * * @param array $webhook * @param string $action * @param array $payload */ private function call(array $webhook, string $action, array $payload): void { try { $client = new Client(); $headers = []; if (!empty($webhook['secret_header']) && !empty($webhook['secret_token'])) { $headers[$webhook['secret_header']] = $webhook['secret_token']; } $response = $client->post($webhook['url'], [ 'verify' => $webhook['is_ssl_verified'], 'headers' => $headers, 'json' => [ 'action' => $action, 'payload' => $payload, ], ]); echo $response->getBody()->getContents(); // Use this for quick debugging } catch (Throwable $e) { log_message( 'error', 'Webhooks Client - The webhook (' . ($webhook['id'] ?? null) . ') request received an unexpected exception: ' . $e->getMessage(), ); log_message('error', $e->getTraceAsString()); } } }