| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- <?php
- namespace App\Services\Didit\Concerns;
- use App\Data\Didit\DiditData;
- use Illuminate\Http\Client\PendingRequest;
- use Illuminate\Support\Facades\Http;
- use Illuminate\Support\Facades\Log;
- use Throwable;
- trait SendsDiditRequests
- {
- protected function diditRequest(
- string $method,
- string $path,
- string $errorMessage,
- array|DiditData|null $payload = null,
- ): array {
- $payload = $payload instanceof DiditData ? $payload->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;
- }
- }
|