Ir para conteúdo
  • Cadastre-se

dev botao

BAUHAUS - Prefeitura Moderna


Ver Solução Respondido por Italo Giurizzato Junior,

Recommended Posts

  • Consultores
Postado

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

  • Obrigado 1
Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

Postado
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.

  • Curtir 1
  • 4 semanas depois ...
Postado
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



 

Postado

@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
Postado

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.
 

  • Obrigado 1
Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

Postado (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 por Everson Clei
  • Consultores
Postado

Bom dia @Everson Clei,

Na página 6 do manual que você anexou temos:

image.png

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.

  • Obrigado 1
Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

Postado
39 minutos atrás, Italo Giurizzato Junior disse:

Bom dia @Everson Clei,

Na página 6 do manual que você anexou temos:

image.png

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 

 

  • 2 semanas depois ...
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • 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...