external_customer_id)) { return $client->external_customer_id; } $client->loadMissing('user'); $name = $client->user?->name ?? $data['name'] ?? 'Cliente'; $email = $client->user?->email ?? $data['email'] ?? null; $code = $this->ensureCustomerCode($client); $customerData = PagarmeCustomerResponseData::fromArray($this->pagarmeRequest( method: 'POST', path: '/customers', payload: PagarmeCustomerRequestData::fromPayload( name: $name, email: $email, document: $client->document ?? $data['document'] ?? null, code: $code, addressData: $data, phone: $client->user?->phone ?? $data['phone'] ?? null, ), idempotencyKey: $this->idempotencyKey($client->id), errorMessage: 'Erro ao criar cliente no Pagar.me.', )); $customerId = $customerData->requireId(); $client->forceFill([ 'external_customer_id' => $customerId, 'external_customer_code' => $code, ])->save(); return $customerId; } // evita criacao duplicada de customer private function idempotencyKey(int $clientId, string $suffix = 'customer'): string { return "client-{$clientId}-{$suffix}"; } private function ensureCustomerCode(Client $client): string { if (! empty($client->external_customer_code)) { return $client->external_customer_code; } $code = 'client-'.(string) Str::uuid(); $client->forceFill(['external_customer_code' => $code])->save(); return $code; } }