Ir para conteúdo
  • Cadastre-se

Recommended Posts

Postado

Parabéns pela sua descoberta... como você conseguiu achar esse token e url? Eu acredito que se não rejeitar ao tentar declarar é porque esta certa, pra mim quando envio um código gerado (pelo executável) por ex com cnpj errado ele retorna uma rejeição de identificador invalido

Postado

Pessoal eu estou com um projeto aqui que esta GERANDO o CIOT para ANTT quando a empresa é ETC.
Se alguém precisar me chama lá no privado.

Postado
2 horas atrás, fabio disse:

Parabéns pela sua descoberta... como você conseguiu achar esse token e url? Eu acredito que se não rejeitar ao tentar declarar é porque esta certa, pra mim quando envio um código gerado (pelo executável) por ex com cnpj errado ele retorna uma rejeição de identificador invalido

Com a ajuda do ChatGPT identificamos as funçoes dentro da dll: public class GeradorCIOTService_v3
{
public GeradorCIOTService_v3()

public string AutenticarEObterTokenAsync()

public string GerarCIOT(string cpfCnpj)

public string ObterApiKey()

public string ValidarCIOT(string ciot)
}  e tambem o caminho: _apiBaseUrl =
"https://mtcuybq605.execute-api.sa-east-1.amazonaws.com/api-ciot-prd/GeradorCIOT" , com isso identificamos a chave: 3UwR]CYTeAQRF que por algum motivo é fixa, entao so precisamos estar enviando a cada requisição por que o token retornado tem que ser sempre diferente. URL :=
'https://mtcuybq605.execute-api.sa-east-1.amazonaws.com/api-ciot-prd/GeradorCIOT/gerar';
Http.Request.CustomHeaders.Values['Authorization'] :=
'Bearer ' + Token; , dai conforme o codigo anterior , basta desmembrar o json retornado e usar lembrando que nas operações de consulta , encerramento e cancelamento é necessario usar o protocolo retornado e não o idoperacaotransporte. então é necessario estar armazenando este retorno para cada mdfe gerado. Ate.

  • Curtir 1
Postado
3 horas atrás, Gm Saldanha disse:

Com a ajuda do ChatGPT identificamos as funçoes dentro da dll: public class GeradorCIOTService_v3
{
public GeradorCIOTService_v3()

public string AutenticarEObterTokenAsync()

public string GerarCIOT(string cpfCnpj)

public string ObterApiKey()

public string ValidarCIOT(string ciot)
}  

 

Conseguiu chamar o metodo GerarCIOT? Estou tentando aqui sem sucesso.

-=Ma®©oS=-

Postado (editado)

Evolui aqui, utilizando o ILSpy para explorar a DLL e converter o código dela de .NET para Delphi.

 

Objetivo é gerar o código do CIOT (Item B4 do manual: "Código Identificador da Operação de Transporte: deve ser gerado conforme padrão definido pela ANTT, utilizando a DDL/Executável  disponibilizada para geração do identificador") que vai no campo IdOperacaoTransporte no serviço DeclaracaoOperacaoTransporte

Codigo:

1 - tentei anexar, o forum estava bloqueando achando se tratar de um ataque (estranho não?)
2 - Não consegui anexar, nem como .PAS nem como .TXT, erro 200
3 - Editando e anexando como ZIP foi

Agora para chamar/gerar é só fazer assim:

 

procedure TForm1.Button1Click(Sender: TObject);
var
  Gerador: TGeradorCIOTService;
begin
  Gerador := TGeradorCIOTService.Create;
  try
    ShowMessage(Gerador.GerarCIOT('AquiVaiOCNPJ'));
  finally
    Gerador.Free;
  end;
end;

 

Tem algumas coisas pra acertar ainda (memory leaks), estava em em um app só de teste, agora vou migrar pra dentro do sistema e fazer as melhorias.

 

 

 

Unit1.zip

Editado por MarcosRWeimer

-=Ma®©oS=-

Postado
3 horas atrás, MarcosRWeimer disse:

 

Conseguiu chamar o metodo GerarCIOT? Estou tentando aqui sem sucesso.

Ja deixei o codigo no post anterior, esta funcionando pra mim.

Postado
1 minuto atrás, osmarbentojr disse:

Obrigado, eu já tenho o exe pronto, estava com BO apenas nos endpoints, vou validar tudo e posto o que deu ou não certo, obrigado

Se conseguir fazer um envio em homologação, me fala se funcionou. O meu funcionou até sexta-feira, pois, tem dado um erro. Parece ser da ANTT.

Postado
6 horas atrás, carlos_augusto disse:

Alguém tem tido algum erro de envio do CIOT em homologação?

O meu parou de funcionar em homologaçao tambem, de sexta pra cá, deve ser alguma alteraçao ou indisponibilidade na ANTT

Postado
44 minutos atrás, rafahot89 disse:

O meu parou de funcionar em homologaçao tambem, de sexta pra cá, deve ser alguma alteraçao ou indisponibilidade na ANTT

Acabei de conseguir fazer um envio em ambiente de homologação.
Talvez tenha restabelecido.

  • Curtir 1
Postado

Olá pessoal, gostaria de saber se conseguiram integrar tanto homologação quanto produção direto na ANTT.
Estou tentando integrar aqui também, ainda sem sucesso, e NÃO estou usando as DLLs ou o exe da antt.

Postado
12 horas atrás, Marcio Cenci disse:

Olá pessoal, gostaria de saber se conseguiram integrar tanto homologação quanto produção direto na ANTT.
Estou tentando integrar aqui também, ainda sem sucesso, e NÃO estou usando as DLLs ou o exe da antt.

Continua funcionando pra mim usando a url e a key pra gerar o token diretamente. Espero que o codigo ajude. 

procedure TFRMMDFENEW.BitBtn31Click(Sender: TObject);
var
  Http: TIdHTTP;
  SSL: TIdSSLIOHandlerSocketOpenSSL;
  JsonEnvio: TStringStream;
  Resposta: string;
  URL: string;
  ciot, Token: string;
  JsonResposta: TJSONObject;
  DadosObj: TJSONObject;
begin
  // 1. OBTER TOKEN
  URL := 'https://mtcuybq605.execute-api.sa-east-1.amazonaws.com/api-ciot-prd/GeradorCIOT/token';

  Http := TIdHTTP.Create(nil);
  SSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  SSL.SSLOptions.Method := sslvTLSv1_2;
  SSL.SSLOptions.SSLVersions := [sslvTLSv1_2];

  try
    Http.IOHandler := SSL;
    Http.Request.ContentType := 'application/json';
    Http.Request.Accept := 'application/json';
    Http.Request.CustomHeaders.Values['chave'] := '3UwR]CYTeAQRF';

    JsonEnvio := TStringStream.Create('{}', TEncoding.UTF8);
    try
      Resposta := Http.Post(URL, JsonEnvio);
      memo4.Lines.Add('Token HTTP: ' + IntToStr(Http.ResponseCode));
      memo4.Lines.Add('Resposta Token: ' + Resposta);
    finally
      JsonEnvio.Free;
    end;

    // Extrai o token
    JsonResposta := TJSONObject.ParseJSONValue(Resposta) as TJSONObject;
    if JsonResposta <> nil then
    begin
      try
        Token := JsonResposta.GetValue<string>('token', '');
        memo4.Lines.Add('Token obtido: ' + Token);
      finally
        JsonResposta.Free;
      end;
    end;

    if Token = '' then
    begin
      memo4.Lines.Add('ERRO: Não foi possível obter o token');
      Exit;
    end;

    // 2. GERAR CIOT
    URL := 'https://mtcuybq605.execute-api.sa-east-1.amazonaws.com/api-ciot-prd/GeradorCIOT/gerar';
    Http.Request.CustomHeaders.Values['Authorization'] := 'Bearer ' + Token;

    JsonEnvio := TStringStream.Create(
      '{"cpfCnpj":"' + OnlyNumbers(frmmodule.tblempresaCNPJ.Text) + '"}',
      TEncoding.UTF8
    );

    try
      Resposta := Http.Post(URL, JsonEnvio);
      memo4.Lines.Add('Gerar HTTP: ' + IntToStr(Http.ResponseCode));
      memo4.Lines.Add('Resposta Gerar: ' + Resposta);
    finally
      JsonEnvio.Free;
    end;

    // 3. EXTRAIR O CIOT (CORRIGIDO - está dentro do objeto "dados")
    JsonResposta := TJSONObject.ParseJSONValue(Resposta) as TJSONObject;
    if JsonResposta <> nil then
    begin
      try
        memo4.Lines.Add('=== DADOS DO RETORNO ===');

        // Verifica se o campo "dados" existe
        if JsonResposta.TryGetValue<TJSONObject>('dados', DadosObj) then
        begin
          // Agora sim, pega o CIOT dentro de "dados"
          ciot := DadosObj.GetValue<string>('ciot', '');
          memo4.Lines.Add('CIOT gerado: ' + ciot);
          memo4.Lines.Add('CNPJ: ' + DadosObj.GetValue<string>('cnpj', ''));
          memo4.Lines.Add('Data Geração: ' + DadosObj.GetValue<string>('dataGeracao', ''));
        end
        else
        begin
          // Se não tiver "dados", tenta mensagem de erro
          memo4.Lines.Add('Mensagem: ' + JsonResposta.GetValue<string>('mensagem', ''));
        end;

      finally
        JsonResposta.Free;
      end;
    end;

    // 4. SALVAR CIOT
    if ciot <> '' then
    begin
      if MessageDlg('Confirmar Inclusão CIOT ' + ciot + '?',
        mtConfirmation, [mbYes, mbNo], 0) = mrYes then
      begin
        frmmodule.tblmdfe.Open;
        frmmodule.tblmdfe.Edit;
        frmmodule.tblmdfeciot.Text := ciot;
        frmmodule.tblmdfe.Post;
        memo4.Lines.Add('CIOT salvo com sucesso: ' + ciot);
      end;
    end
    else
    begin
      memo4.Lines.Add('ERRO: CIOT não foi gerado ou não pôde ser extraído');
    end;

  except
    on E: Exception do
    begin
      memo4.Lines.Add('ERRO: ' + E.Message);
      if Assigned(Http.Response) then
        memo4.Lines.Add('HTTP: ' + IntToStr(Http.ResponseCode));
    end;
  end;

  SSL.Free;
  Http.Free;
end;

Postado
Em 19/06/2026 at 08:28, Gm Saldanha disse:

Continua funcionando pra mim usando a url e a key pra gerar o token diretamente. Espero que o codigo ajude. 

procedure TFRMMDFENEW.BitBtn31Click(Sender: TObject);
var
  Http: TIdHTTP;
  SSL: TIdSSLIOHandlerSocketOpenSSL;
  JsonEnvio: TStringStream;
  Resposta: string;
  URL: string;
  ciot, Token: string;
  JsonResposta: TJSONObject;
  DadosObj: TJSONObject;
begin
  // 1. OBTER TOKEN
  URL := 'https://mtcuybq605.execute-api.sa-east-1.amazonaws.com/api-ciot-prd/GeradorCIOT/token';

  Http := TIdHTTP.Create(nil);
  SSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  SSL.SSLOptions.Method := sslvTLSv1_2;
  SSL.SSLOptions.SSLVersions := [sslvTLSv1_2];

  try
    Http.IOHandler := SSL;
    Http.Request.ContentType := 'application/json';
    Http.Request.Accept := 'application/json';
    Http.Request.CustomHeaders.Values['chave'] := '3UwR]CYTeAQRF';

    JsonEnvio := TStringStream.Create('{}', TEncoding.UTF8);
    try
      Resposta := Http.Post(URL, JsonEnvio);
      memo4.Lines.Add('Token HTTP: ' + IntToStr(Http.ResponseCode));
      memo4.Lines.Add('Resposta Token: ' + Resposta);
    finally
      JsonEnvio.Free;
    end;

    // Extrai o token
    JsonResposta := TJSONObject.ParseJSONValue(Resposta) as TJSONObject;
    if JsonResposta <> nil then
    begin
      try
        Token := JsonResposta.GetValue<string>('token', '');
        memo4.Lines.Add('Token obtido: ' + Token);
      finally
        JsonResposta.Free;
      end;
    end;

    if Token = '' then
    begin
      memo4.Lines.Add('ERRO: Não foi possível obter o token');
      Exit;
    end;

    // 2. GERAR CIOT
    URL := 'https://mtcuybq605.execute-api.sa-east-1.amazonaws.com/api-ciot-prd/GeradorCIOT/gerar';
    Http.Request.CustomHeaders.Values['Authorization'] := 'Bearer ' + Token;

    JsonEnvio := TStringStream.Create(
      '{"cpfCnpj":"' + OnlyNumbers(frmmodule.tblempresaCNPJ.Text) + '"}',
      TEncoding.UTF8
    );

    try
      Resposta := Http.Post(URL, JsonEnvio);
      memo4.Lines.Add('Gerar HTTP: ' + IntToStr(Http.ResponseCode));
      memo4.Lines.Add('Resposta Gerar: ' + Resposta);
    finally
      JsonEnvio.Free;
    end;

    // 3. EXTRAIR O CIOT (CORRIGIDO - está dentro do objeto "dados")
    JsonResposta := TJSONObject.ParseJSONValue(Resposta) as TJSONObject;
    if JsonResposta <> nil then
    begin
      try
        memo4.Lines.Add('=== DADOS DO RETORNO ===');

        // Verifica se o campo "dados" existe
        if JsonResposta.TryGetValue<TJSONObject>('dados', DadosObj) then
        begin
          // Agora sim, pega o CIOT dentro de "dados"
          ciot := DadosObj.GetValue<string>('ciot', '');
          memo4.Lines.Add('CIOT gerado: ' + ciot);
          memo4.Lines.Add('CNPJ: ' + DadosObj.GetValue<string>('cnpj', ''));
          memo4.Lines.Add('Data Geração: ' + DadosObj.GetValue<string>('dataGeracao', ''));
        end
        else
        begin
          // Se não tiver "dados", tenta mensagem de erro
          memo4.Lines.Add('Mensagem: ' + JsonResposta.GetValue<string>('mensagem', ''));
        end;

      finally
        JsonResposta.Free;
      end;
    end;

    // 4. SALVAR CIOT
    if ciot <> '' then
    begin
      if MessageDlg('Confirmar Inclusão CIOT ' + ciot + '?',
        mtConfirmation, [mbYes, mbNo], 0) = mrYes then
      begin
        frmmodule.tblmdfe.Open;
        frmmodule.tblmdfe.Edit;
        frmmodule.tblmdfeciot.Text := ciot;
        frmmodule.tblmdfe.Post;
        memo4.Lines.Add('CIOT salvo com sucesso: ' + ciot);
      end;
    end
    else
    begin
      memo4.Lines.Add('ERRO: CIOT não foi gerado ou não pôde ser extraído');
    end;

  except
    on E: Exception do
    begin
      memo4.Lines.Add('ERRO: ' + E.Message);
      if Assigned(Http.Response) then
        memo4.Lines.Add('HTTP: ' + IntToStr(Http.ResponseCode));
    end;
  end;

  SSL.Free;
  Http.Free;
end;

Obrigado pelo compartilhamento, testado aqui e deu certo. Parabéns!!!

  • Obrigado 1

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...