Consultores Italo Giurizzato Junior Postado 11 Novembro Consultores Postado 11 Novembro Boa tarde @Everson Clei, Veja este fragmento de código: procedure TACBrNFSeXWebserviceBauhaus.SetHeaders(aHeaderReq: THTTPHeader); begin aHeaderReq.AddHeader('Authorization', TConfiguracoesNFSe(FPConfiguracoes).Geral.Emitente.WSChaveAutoriz); end; Você tem que colocar o SecurityKey na propriedade de configuração: WSChaveAutoriz 1 Italo Giurizzato Junior Ajude o Projeto ACBr crescer - Assine o SAC Analista de Sistemas / Araraquara-SP Araraquara - A era dos Trólebus
Everson Clei Postado 11 Novembro Postado 11 Novembro 30 minutos atrás, Italo Giurizzato Junior disse: Boa tarde @Everson Clei, Veja este fragmento de código: procedure TACBrNFSeXWebserviceBauhaus.SetHeaders(aHeaderReq: THTTPHeader); begin aHeaderReq.AddHeader('Authorization', TConfiguracoesNFSe(FPConfiguracoes).Geral.Emitente.WSChaveAutoriz); end; Você tem que colocar o SecurityKey na propriedade de configuração: WSChaveAutoriz Boa tarde @Italo Giurizzato Junior, Vou seguir estas instruções, fazer os testes e reporto um feedback depois. Obrigado pela ajuda. 1
Everson Clei Postado 4 Dezembro Postado 4 Dezembro Em 11/11/2024 at 15:17, Italo Giurizzato Junior disse: Boa tarde @Everson Clei, Veja este fragmento de código: procedure TACBrNFSeXWebserviceBauhaus.SetHeaders(aHeaderReq: THTTPHeader); begin aHeaderReq.AddHeader('Authorization', TConfiguracoesNFSe(FPConfiguracoes).Geral.Emitente.WSChaveAutoriz); end; Você tem que colocar o SecurityKey na propriedade de configuração: WSChaveAutoriz Boa tarde @Italo Giurizzato Junior, Conforme suas instruções após adicionar o parametro no header foi passível autenticar na prefeitura da cidade. Abaixo segue detalhes dos ajustes e alterações no arquivo .INI { TACBrNFSeXWebserviceBauhaus } procedure TACBrNFSeXWebserviceBauhaus.SetHeaders(aHeaderReq: THTTPHeader); begin aHeaderReq.AddHeader('Authorization', TConfiguracoesNFSe(FPConfiguracoes).Geral.Emitente.WSChaveAutoriz); aHeaderReq.AddHeader('SecurityKey', TConfiguracoesNFSe(FPConfiguracoes).Geral.Emitente.WSChaveAutoriz); end; [3120201] Nome=Cristais UF=MG Provedor=Bauhaus ProRecepcionar=* ProGerarNFSe=https://api-nfse-cristais-mg.prefeituramoderna.com.br/ws/services/gerar ProConsultarNFSeRps=https://api-nfse-cristais-mg.prefeituramoderna.com.br/ws/services/consultar ProConsultarNFSe=https://api-nfse-cristais-mg.prefeituramoderna.com.br/ws/services/consultar ProCancelarNFSe=https://api-nfse-cristais-mg.prefeituramoderna.com.br/ws/services/cancelar ProSubstituirNFSe=https://api-nfse-cristais-mg.prefeituramoderna.com.br/ws/services/substituir Muito Obrigado
Everson Clei Postado 4 Dezembro Postado 4 Dezembro @Italo Giurizzato Junior, o provedor Bauhaus para o município de Cristais/MG quando recebo o retorno da nota autorizada o arquivo tem a tag <xml> no inicio do arquivo, porem este provedor trata todo processo em Json. Está gerando um erro no método LerJsonNfse() da classe Bauhaus.LerJson quando é carregado para geração do DANFSE pois o .Parse do Json não reconhece a tag contida e levanta a exception. function RemoverTagXml(const Arquivo: string): string; // Remove: <?xml version="1.0" encoding="UTF-8"?> var lPos: Integer; begin Result := Arquivo; lPos := Pos('<?xml', Result); if lPos > 0 then begin lPos := Pos('?>', Result) + 1; Result := Trim(Copy(Result, lPos + 1, Length(Result))); end; end; function TNFSeR_Bauhaus.LerJsonNfse(const ArquivoRetorno: String): Boolean; var jsRet: TACBrJSONObject; lArquivoRetorno: String; begin Result := False; tpXML := txmlNFSe; try lArquivoRetorno := RemoverTagXml(ArquivoRetorno); //jsRet := TACBrJSONObject.Parse(String(ArquivoRetorno)); // <<-- ERRO jsRet := TACBrJSONObject.Parse(String(lArquivoRetorno)); // Ajuste if Assigned(jsRet.AsJSONObject['DadosNfse']) then begin LerNota(jsRet.AsJSONObject['DadosNfse'], False); LerPrestador(jsRet.AsJSONObject['DadosNfse']); LerTomador(jsRet.AsJSONObject['DadosNfse']); LerRps(jsRet.AsJSONObject['DadosNfse']); LerServicos(jsRet.AsJSONObject['DadosNfse']); Result := True; end; finally jsRet.Free; end; end; Gostaria de saber em qual classe no ACBrNFSeX posso acrescentar este método RemoverTagXml() para não engessar a funcão na classe Bauhaus.LerJson.pas ? Agradeço seu feedback mestre, Everson
Consultores Italo Giurizzato Junior Postado 4 Dezembro Consultores Postado 4 Dezembro Boa tarde @Everson Clei, Coisa estranha, no Header tem que ter tanto o Authorization quanto o SecurityKey com o mesmo valor? Quando foi escrito o componente bastava o primeiro e o envio ocorreu sem nenhum problema. Quando a declaração de encoding também acho estranho a presença, pois ao gravar o Json da nota é para salvar sem ele. Por favor verifique: Você tem fontes do ACBr com alterações locais? Verifica se não tem nenhuma unit do ACBr com uma bolinha vermelha em seu ícone, caso afirmativo delete a unit. Atualize todos os fontes de todas as pastas. Reinstale o ACBr com a opção de apagar arquivos antigos marcada. Compile a aplicação com a opção Build. Por fim repita os testes. 1 Italo Giurizzato Junior Ajude o Projeto ACBr crescer - Assine o SAC Analista de Sistemas / Araraquara-SP Araraquara - A era dos Trólebus
Everson Clei Postado 5 Dezembro Postado 5 Dezembro (editado) 15 horas atrás, Italo Giurizzato Junior disse: Boa tarde @Everson Clei, Coisa estranha, no Header tem que ter tanto o Authorization quanto o SecurityKey com o mesmo valor? Quando foi escrito o componente bastava o primeiro e o envio ocorreu sem nenhum problema. Quando a declaração de encoding também acho estranho a presença, pois ao gravar o Json da nota é para salvar sem ele. Por favor verifique: Você tem fontes do ACBr com alterações locais? Verifica se não tem nenhuma unit do ACBr com uma bolinha vermelha em seu ícone, caso afirmativo delete a unit. Atualize todos os fontes de todas as pastas. Reinstale o ACBr com a opção de apagar arquivos antigos marcada. Compile a aplicação com a opção Build. Por fim repita os testes. Bom dia @Italo Giurizzato Junior, Sobre o header a principio na documentação exige este SecurityKey e para este caso vou encaminhar em anexo a documentação para sua avaliação, verifique na folha 7 por favor, e só consegui transmitir para esta cidade quando foi colocado na classe. Sobre o segundo caso vou revisar todas as units se existe o icone de bolinha vermelha ao baixar do SVN e seguir os testes conforme orientação e reporto o resultado. Também vou encaminhar um exemplo do retorno recebido da consulta da nota no formato .json pra sua analise. Aguarda seu novo feedback, Muito obrigado nfse-manual-api-bauhaus-cristais-mg.pdf 3124124214351700018056000000000003418-nfse.json Editado 5 Dezembro por Everson Clei
Consultores Italo Giurizzato Junior Postado 5 Dezembro Consultores Postado 5 Dezembro Bom dia @Everson Clei, Muito obrigado pela colaboração, já foi criado a TK-6318 para analise. 1 Italo Giurizzato Junior Ajude o Projeto ACBr crescer - Assine o SAC Analista de Sistemas / Araraquara-SP Araraquara - A era dos Trólebus
Consultores Italo Giurizzato Junior Postado 6 Dezembro Consultores Postado 6 Dezembro Bom dia @Everson Clei, Na página 6 do manual que você anexou temos: O manual deixa claro que o Header deverá conter 3 parâmetros, o valor de Authorization é o SecurityKey fornecido pela prefeitura conforme consta no rodapé da página. Na unit Bauhaus.Provider temos a procedure SetHeaders que define o valor do parâmetro Authorization: procedure TACBrNFSeXWebserviceBauhaus.SetHeaders(aHeaderReq: THTTPHeader); begin aHeaderReq.AddHeader('Authorization', TConfiguracoesNFSe(FPConfiguracoes).Geral.Emitente.WSChaveAutoriz); end; Você deve configurar o componente, mais precisamente: Configuracoes.Geral.Emitente.WSChaveAutoriz com o SecurityKey fornecido pela prefeitura que eles chamam de Chave de Segurança. Na unit ACBrNFSeXWebserviceBase temos a definição da classe TACBrNFSeXWebserviceRest que é utilizada pelo provedor: TACBrNFSeXWebserviceRest = class(TACBrNFSeXWebserviceNoSoap) protected function DefinirMsgEnvio(const Message, SoapAction, SoapHeader: string; namespace: array of string): string; override; public constructor Create(AOwner: TACBrDFe; AMetodo: TMetodo; const AURL: string; const AMethod: string = 'POST'; const AMimeType: string = 'application/json'); end; Note que no Create é informado o MimeType (Content - Type) com o valor application/json conforme consta no manual. Por favor verifique se todos os fontes de todas pastas estão atualizados, caso afirmativo reinstale o ACBr com a opção de apagar arquivos antigos marcada e faça novos testes. 1 Italo Giurizzato Junior Ajude o Projeto ACBr crescer - Assine o SAC Analista de Sistemas / Araraquara-SP Araraquara - A era dos Trólebus
Everson Clei Postado 6 Dezembro Postado 6 Dezembro 39 minutos atrás, Italo Giurizzato Junior disse: Bom dia @Everson Clei, Na página 6 do manual que você anexou temos: O manual deixa claro que o Header deverá conter 3 parâmetros, o valor de Authorization é o SecurityKey fornecido pela prefeitura conforme consta no rodapé da página. Na unit Bauhaus.Provider temos a procedure SetHeaders que define o valor do parâmetro Authorization: procedure TACBrNFSeXWebserviceBauhaus.SetHeaders(aHeaderReq: THTTPHeader); begin aHeaderReq.AddHeader('Authorization', TConfiguracoesNFSe(FPConfiguracoes).Geral.Emitente.WSChaveAutoriz); end; Você deve configurar o componente, mais precisamente: Configuracoes.Geral.Emitente.WSChaveAutoriz com o SecurityKey fornecido pela prefeitura que eles chamam de Chave de Segurança. Na unit ACBrNFSeXWebserviceBase temos a definição da classe TACBrNFSeXWebserviceRest que é utilizada pelo provedor: TACBrNFSeXWebserviceRest = class(TACBrNFSeXWebserviceNoSoap) protected function DefinirMsgEnvio(const Message, SoapAction, SoapHeader: string; namespace: array of string): string; override; public constructor Create(AOwner: TACBrDFe; AMetodo: TMetodo; const AURL: string; const AMethod: string = 'POST'; const AMimeType: string = 'application/json'); end; Note que no Create é informado o MimeType (Content - Type) com o valor application/json conforme consta no manual. Por favor verifique se todos os fontes de todas pastas estão atualizados, caso afirmativo reinstale o ACBr com a opção de apagar arquivos antigos marcada e faça novos testes. Bom dia @Italo Giurizzato Junior, Estranho que consegui enviar uma nota só depois de ter passado SecurityKey como nome de parametro, mas posso estar equivocado. Atualmente estou com a última versão porem vou reinstalar novamente seguindo esta opção de apagar arquivos antigos como informado e te passo um feedback sobre este. Já sobre a questão da tag xml estar no arquivo o que você sugere? Obrigado
Consultores Italo Giurizzato Junior Postado 6 Dezembro Consultores Postado 6 Dezembro @Everson Clei, Quanto ao Encoding vou ver o que pode estar ocorrendo. Italo Giurizzato Junior Ajude o Projeto ACBr crescer - Assine o SAC Analista de Sistemas / Araraquara-SP Araraquara - A era dos Trólebus
Consultores Italo Giurizzato Junior Postado 6 Dezembro Consultores Postado 6 Dezembro Boa tarde @Everson Clei, Ajuste para não gerar a linha do encoding ao salvar um Json. Já esta no SVN. 1 Italo Giurizzato Junior Ajude o Projeto ACBr crescer - Assine o SAC Analista de Sistemas / Araraquara-SP Araraquara - A era dos Trólebus
Everson Clei Postado 6 Dezembro Postado 6 Dezembro 52 minutos atrás, Italo Giurizzato Junior disse: Boa tarde @Everson Clei, Ajuste para não gerar a linha do encoding ao salvar um Json. Já esta no SVN. Boa tarde @Italo Giurizzato Junior, Perfeito, vou atualizar os fontes e novamente fazer os testes, e depois volto pra reportar o resultado. Muito obrigado novamente 1
Consultores Italo Giurizzato Junior Postado Sexta as 17:51 Consultores Postado Sexta as 17:51 Obrigado por reportar. Fechando. Para novas dúvidas, criar um novo tópico. Italo Giurizzato Junior Ajude o Projeto ACBr crescer - Assine o SAC Analista de Sistemas / Araraquara-SP Araraquara - A era dos Trólebus
Recommended Posts