-
Total de ítens
11 -
Registro em
-
Última visita
Tipo de Conteúdo
Blocks
Notes ACBrLibNFe
Fóruns
Downloads
Calendário
Tudo que Gm Saldanha postou
-
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;
-
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.
-
Ola a todos, preciso de ajuda pra saber se o processo é valido. Abri a Dll GeradorCIOTShared.dll no ILSpy e ela foi compilada como uma DLL .NET. dentro dela temos: GeradorCIOTService_v3 ValidarCIOT GerarCIOT AutenticarEObterTokenAsync ObterApiKey. Ou seja a DLL possui autenticação própria. Então achei o token que é fixo : 3UwR]CYTeAQRF , pra usar em URL := 'https://mtcuybq605.execute-api.sa-east-1.amazonaws.com/api-ciot-prd/GeradorCIOT/token'; Depois disso montei o codigo: procedure TFRMMDFENEW.BitBtn31Click(Sender: TObject); var Http: TIdHTTP; SSL: TIdSSLIOHandlerSocketOpenSSL; JsonEnvio: TStringStream; Resposta: string; URL: string; Token: string; JsonResposta: TJSONObject; begin 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'; // vamos descobrir se a chave está correta Http.Request.CustomHeaders.Values['chave'] := '3UwR]CYTeAQRF'; JsonEnvio := TStringStream.Create('{}', TEncoding.UTF8); try Resposta := Http.Post(URL, JsonEnvio); MemoCIOT.Lines.Add('HTTP: ' + IntToStr(Http.ResponseCode)); MemoCIOT.Lines.Add('Resposta:'); MemoCIOT.Lines.Add(Resposta); finally JsonEnvio.Free; end; except on E: Exception do begin MemoCIOT.Lines.Add('ERRO: ' + E.Message); if Assigned(Http.Response) then MemoCIOT.Lines.Add('HTTP: ' + IntToStr(Http.ResponseCode)); end; end; JsonResposta := TJSONObject.ParseJSONValue(Resposta) as TJSONObject; if JsonResposta <> nil then begin try memociot.Lines.Add('=== Dados ==='); memociot.Lines.Add('token: ' + JsonResposta.GetValue<string>('token', '')); token:= JsonResposta.GetValue<string>('token', ''); finally JsonResposta.Free; end; end; 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 ); Resposta := Http.Post(URL, JsonEnvio); MemoCIOT.Lines.Add('Resposta: ' + Resposta); SSL.Free; Http.Free; end; Que vai retornar este resultado: HTTP: 200 Resposta: {"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6IkV4ZWN1dGF2ZWxDbGllbnRlIiwibmJmIjoxNzgxMTgwNzQ3LCJleHAiOjE3ODExODQzNDcsImlhdCI6MTc4MTE4MDc0NywiaXNzIjoiR2VyYWRvckNJT1RBUEkiLCJhdWQiOiJHZXJhZG9yQ0lPVENsaWVudCJ9.XEk3ftq3a7wiHRTaHTBqeV6Niax4W4sUXxZ_NN7QiRU"} === Dados === token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6IkV4ZWN1dGF2ZWxDbGllbnRlIiwibmJmIjoxNzgxMTgwNzQ3LCJleHAiOjE3ODExODQzNDcsImlhdCI6MTc4MTE4MDc0NywiaXNzIjoiR2VyYWRvckNJT1RBUEkiLCJhdWQiOiJHZXJhZG9yQ0lPVENsaWVudCJ9.XEk3ftq3a7wiHRTaHTBqeV6Niax4W4sUXxZ_NN7QiRU Resposta: {"sucesso":true,"mensagem":"CIOT gerado com sucesso","dados":{"ciot":"520005524641","cnpj":"xx.xxx/xxxx-xx","dataGeracao":"2026-06-11T12:25:47.8038116+00:00"},"erros":null} , consegui consultar o ciot normalmente. Com isso não vou precisar usar o aplicativo da ANTT indiretamente, mas quero saber se não vai haver algum problema com isso, Obrigado.
-
Só conseguir gerar um IdoperacaoTransporte valido usando o aplicativo https://www.gov.br/antt/pt-br/assuntos/cargas/ciot-para-todos-1/documentos-tecnicos/piso-minimo-ciot em producao com a Dll, de posse do codigo funcionou normal: Retorno: Status Code: 200 Resposta: {"IdOperacaoTransporte":"520004603581","CodigoVerificador":"3558","Protocolo":"5200046035813558","Codigo":"110","Mensagem":"Dados inseridos com sucesso!","AvisoTransportador":null}
-
Ola, Marcos. O Valor foi gerado pela rota https://appservices-hml.antt.gov.br/pefServices/gerar que é de homologação, como fiz no codigo anexo acima e gera o json de saida: URL: https://appservices-hml.antt.gov.br/pefServices/gerar Status Code: 200 Resposta Bruta: {"Sucesso":true,"Mensagem":"CIOT gerado com sucesso","Dados":{"CIOT":"560000157333","CpfCnpj":"xx.xxx/xxxx-xx","DataGeracao":"2026-06-04T09:36:48.5855354"},"Erros":null} Mensagem do servidor: CIOT gerado com sucesso , >>> CIOT GERADO COM SUCESSO: 560000157333 <<< , mas se for feito em contingencia o prazo para validar posteriormente é de 7 dias, o problema é se a validação não der certo. Gostaria de saber se o codigo que estou usando com o acbrmdfe pra validar o certificado esta funcionando.
-
Ainda continuo tentando, vou postar um txt com o codigo que ja tenho para nao poluir o forum. Ps: 01- Estou validando usando o AcbrMdfe, achei mais simples. 02 - homologação: https://appservices-hml.antt.gov.br/pefServices/api/ , Produção: https://appservices.antt.gov.br/pefServices/api/. Se alguem puder dar uma olhada e dar um feedback, agradeço. Se faltar algo pode pedir aqui. Ate.Codigo geracao CIOT.txt
-
Olá a todos, gostaria de saber se alguem obteve exito, se pode informar os endpoints. tentei gerar o Id , URL := 'https://appservices.antt.gov.br/pefServices/gerar'; , mas o retorno foi inviavel: === GERANDO CIOT === JSON Enviado: {"CpfCnpj":"31383970000147"} Status Code: 500 . E para a geracao do Ciot estou usando: https://appservices.antt.gov.br/pefServices/api/DeclaracaoOperacaoTransporte , mas ainda tenho varios bugs no meu codigo: {"IdOperacaoTransporte":null,"CodigoVerificador":null,"Protocolo":"E98000002677917","Codigo":"205,208,225","Mensagem":"[\"Rejeição: O campo IdOperacaoTransporte é inválido.\",\"Rejeição: É obrigatório informar ao menos um implemento quando o veÃculo automotor for do tipo cavalo-trator.\",\"Rejeição: CPF/CNPJ do destinatário obrigatório para o tipo de operação informado.\",\"Rejeição: O(s) contratante(s) da carga fracionada não pode(m) ser igual(is) ao contratante da operação de transporte.\",\"Rejeição: A data de inÃcio da viagem não pode ser inferior à data atual.\",\"Rejeição: A data de inÃcio da viagem não pode ser inferior à data de declaração.\"]","AvisoTransportador":null} . Se alguem tiver e puder fornecer mais informações, agradeço. Ps: Se nao houver problemas posso postar o codigo que estou utilizando no Xe8.
