autenticarProcurador method

Future<Map<String, dynamic>> autenticarProcurador({
  1. required String termoAutorizacaoBase64,
  2. required String contratanteNumero,
  3. required String autorPedidoDadosNumero,
})

Autentica procurador usando termo de autorização assinado digitalmente

Este método é usado quando um procurador precisa realizar operações em nome do contribuinte.

termoAutorizacaoBase64: Termo de autorização assinado e codificado em Base64 contratanteNumero: CNPJ da empresa contratante autorPedidoDadosNumero: CPF/CNPJ do procurador

Retorna: Map com token de procurador e informações de cache

Implementation

Future<Map<String, dynamic>> autenticarProcurador({
  required String termoAutorizacaoBase64,
  required String contratanteNumero,
  required String autorPedidoDadosNumero,
}) async {
  if (_authModel == null) {
    throw Exception(
      'Cliente não autenticado. Chame o método authenticate primeiro.',
    );
  }

  final requestBody = {'termoAutorizacao': termoAutorizacaoBase64};

  final requestTag = RequestTagGenerator.generateRequestTag(
    autorPedidoDadosNumero: autorPedidoDadosNumero,
    contribuinteNumero: contratanteNumero,
    idServico: 'AUTENTICARPROCURADOR',
  );

  final response = await http.post(
    Uri.parse('$_baseUrl/AutenticarProcurador'),
    headers: {
      'Authorization': 'Bearer ${_authModel!.accessToken}',
      'jwt_token': _authModel!.jwtToken,
      'Content-Type': 'application/json',
      'X-Request-Tag': requestTag,
    },
    body: json.encode(requestBody),
  );

  if (response.statusCode >= 200 && response.statusCode < 300) {
    Map<String, dynamic> responseBody =
        json.decode(utf8.decode(response.bodyBytes)) as Map<String, dynamic>;

    // Salvar token de procurador no authModel
    if (responseBody['autenticarProcuradorToken'] != null) {
      // Atualizar o _authModel com o token do procurador
      _updateProcuradorToken(responseBody['autenticarProcuradorToken']);
    }

    return responseBody;
  } else {
    throw Exception(
      'Falha na autenticação de procurador: ${response.statusCode} - ${utf8.decode(response.bodyBytes)}',
    );
  }
}