toArray() : $payload; $endpoint = $this->diditUrl($path); try { $options = $payload === null ? [] : ['json' => $payload]; $response = $this->diditHttp() ->send($method, $endpoint, $options) ->throw(); $result = $response->json() ?? []; if (app()->environment('local', 'development')) { Log::channel('didit')->info('Requisicao ao Didit concluida com sucesso', [ 'method' => strtoupper($method), 'endpoint' => $endpoint, 'payload' => $this->maskDiditPayload($payload ?? []), 'result' => $this->maskDiditPayload($result), ]); } return $result; } catch (Throwable $e) { $responseBody = null; if (method_exists($e, 'getResponse')) { $responseBody = $e->getResponse()?->json(); } elseif (isset($e->response)) { $responseBody = $e->response->json(); } Log::channel('didit')->error('Falha na requisicao ao Didit', [ 'method' => strtoupper($method), 'endpoint' => $endpoint, 'payload' => $this->maskDiditPayload($payload ?? []), 'exception' => $e->getMessage(), 'result' => $responseBody, ]); $message = $errorMessage; $detail = data_get($responseBody, 'detail') ?? data_get($responseBody, 'message'); if (is_string($detail) && $detail !== '') { $message .= ': '.$detail; } throw new \RuntimeException($message, previous: $e); } } protected function diditHttp(): PendingRequest { return Http::withHeaders([ 'x-api-key' => (string) config('services.didit.api_key'), 'Content-Type' => 'application/json', ]) ->connectTimeout((int) config('services.didit.connect_timeout', 5)) ->timeout((int) config('services.didit.timeout', 15)) ->acceptJson(); } protected function diditUrl(string $path): string { return rtrim((string) config('services.didit.base_url'), '/').'/'.ltrim($path, '/'); } protected function maskDiditPayload(array $data): array { $sensitive = [ 'identification_number', 'personal_number', 'document_number', 'tax_number', 'date_of_birth', 'first_name', 'last_name', 'full_name', 'email', 'phone', ]; array_walk_recursive($data, function (&$value, $key) use ($sensitive) { if (in_array($key, $sensitive, true) && is_scalar($value)) { $value = '***'; return; } if (is_string($value) && str_starts_with($value, 'http')) { $value = explode('?', $value)[0]; } }); return $data; } }