client = $client; } /** * Garante que a Franquia exista como Customer (Cliente) na conta-mãe. * Retorna o ID do cliente no Asaas (cus_xxxxxx). */ public function ensureFranchiseeCustomer(Unit $unit): string { $cpfCnpj = preg_replace('/[^0-9]/', '', $unit->cnpj); if (empty($cpfCnpj)) { throw new Exception("Unidade {$unit->fantasy_name} não possui CNPJ para ser cobrada."); } // Tenta buscar no Asaas se já existe o customer com esse CNPJ $existing = $this->client->get('/customers', ['cpfCnpj' => $cpfCnpj]); if (isset($existing['data']) && count($existing['data']) > 0) { return $existing['data'][0]['id']; } // Se não existe, cria um novo $payload = [ 'name' => $unit->social_reason ?? $unit->fantasy_name ?? 'Franquia', 'cpfCnpj' => $cpfCnpj, 'email' => $unit->email, 'postalCode' => preg_replace('/[^0-9]/', '', $unit->postal_code), 'address' => $unit->street, 'addressNumber' => $unit->address_number ?? 'S/N', 'province' => $unit->neighborhood, ]; $mobilePhone = preg_replace('/[^0-9]/', '', $unit->cell_number ?? $unit->phone_number ?? ''); if (strlen($mobilePhone) >= 10 && strlen($mobilePhone) <= 11) { $payload['mobilePhone'] = $mobilePhone; } $response = $this->client->post('/customers', $payload); return $response['id']; } /** * Garante que o Aluno exista como Customer na Subconta da Franquia. * Retorna o ID do cliente no Asaas (cus_xxxxxx). */ public function ensureStudentCustomer(\App\Models\Student $student, string $apiKey): string { $client = new AsaasClient($apiKey); $cpf = preg_replace('/[^0-9]/', '', $student->document_number); if (empty($cpf)) { throw new Exception("Aluno {$student->name} não possui CPF cadastrado para cobrança."); } // Tenta buscar no Asaas se já existe $existing = $client->get('/customers', ['cpfCnpj' => $cpf]); if (isset($existing['data']) && count($existing['data']) > 0) { return $existing['data'][0]['id']; } // Se não existe, cria um novo $payload = [ 'name' => $student->name, 'cpfCnpj' => $cpf, 'email' => $student->email, 'postalCode' => preg_replace('/[^0-9]/', '', $student->postal_code ?? ''), 'address' => $student->street, 'addressNumber' => $student->address_number ?? 'S/N', 'province' => $student->neighborhood, ]; $mobilePhone = preg_replace('/[^0-9]/', '', $student->phone ?? ''); if (strlen($mobilePhone) >= 10 && strlen($mobilePhone) <= 11) { $payload['mobilePhone'] = $mobilePhone; } $response = $client->post('/customers', $payload); return $response['id']; } }