Ir para conteúdo
  • Cadastre-se

dev botao

Erro 401 ao enviar NFSe - Provedor Giap


Ver Solução Respondido por Italo Giurizzato Junior,
  • Este tópico foi criado há 1329 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Bom dia.

 

Estou tentando emitir uma NFSe pela cidade de Bragança Paulista mas estou com um problema.

No arquivo "cidades.ini" disponibilizado, diz que para essa cidade, o provedor é o GovDigital, mas pelo site da prefeitura, verifiquei que o servidor correto é o Giap, os endereços do WS são sempre: http://webservice.giap.com.br/WSNfsesCotia/nfseresources/ws

Dessa forma, alterei o arquivo que ficou dessa forma:

 

[3507605]

Nome=Braganca Paulista

UF=SP

Provedor=Giap

NomeURL_H=Cotia

NomeURL_P=Cotia

 

Esse provedor, utiliza um token de acesso e pelo que vi no manual, precisa enviar um parâmetro “Authorization” composto por esse token no HEADER.

Acredito que a propriedade “ACBrNFSe.Configuracoes.Geral.Emitente.WebChaveAcesso” seja onde eu informe esse token.

 

Porémn ao tentar enviar, está ocorrendo erro 401, que pelo que consultei, é erro de autorização.

 

Na unit ACBrNFSeWebServices achei o seguinte código:

 

{Configura Authorization para GIAP}

// if Provedor = proGiap then

// FAuthorization := FPConfiguracoesNFSe.Geral.Emitente.WebChaveAcesso;

 

Não achei mais nada referente a essa autorização.

 

Gostaria da ajuda de vocês ou pelo menos um direcionamento sobre como posso informar essa autorização e ver se consigo enviar essa nota.

 

Obrigado.

Erro 401.png

  • Consultores
Postado

Boa tarde,

Você tem certeza que a URL esta correta?

Pois acessei o site da prefeitura e achei outra:

http://webservice.giap.com.br/WSNfsesPmbp/nfseresources/ws

Que comparando com a que você postou:

http://webservice.giap.com.br/WSNfsesCotia/nfseresources/ws

Noto um diferença.

Pmbp não significa Prefeitura Municipal de Bragança Paulista?

Se sim, a sua alteração no arquivo Cidades.ini esta errada.

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

Bom dia Italo, obrigado pelo retorno.

Você está correto, o link do manual que me passaram, se referia aos endereços como Cotia, mesmo acessando pelo site de Bragança Paulista.

 

Fiz a alteração no arquivo Cidades.ini e obtive o mesmo erro 401.

 

274369144_Erro401.png.5f8b7dbf80cd1b142ab8ba0e382190ea.png

  • 3 semanas depois ...
  • Consultores
Postado

Boa tarde,

Em um rápida pesquisa na internet achei essa informação sobre o erro 401, segue o link:

https://www.redehost.com.br/duvidas/erro-401-no-autorizado-como-resolver--1615

Tem provedor que requer que seja feito um cadastro para que seja possível emitir as notas via webservice.

Uma coisa é ter usuário e senha para emitir via site, outra coisa e ter permissão para emitir via webservice.

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
Em 10/06/2020 at 15:13, Italo Jurisato Junior disse:

Boa tarde,

Em um rápida pesquisa na internet achei essa informação sobre o erro 401, segue o link:

https://www.redehost.com.br/duvidas/erro-401-no-autorizado-como-resolver--1615

Tem provedor que requer que seja feito um cadastro para que seja possível emitir as notas via webservice.

Uma coisa é ter usuário e senha para emitir via site, outra coisa e ter permissão para emitir via webservice.

Bom dia Italo, obrigado pelo retorno.

Conforme mencionei lá em cima, o provedor requer um token para acesso, que deve ser enviado através de um parâmetro “Authorization” no HEADER.

Dei uma olhada nos fontes, mas não achei onde ele envia essa informação, a única coisa que encontrei foi a propriedade "ACBrNFSe.Configuracoes.Geral.Emitente.WebChaveAcesso", que acredito que faria esse processo, mas mesmo preenchendo ela, ocorre o mesmo problema.

 

Obs.: O cliente já possui esse token gerado, conforme pode ver na imagem.

1245936194_DadosCadastrais.thumb.png.046c3aa654d45c28107642368648739c.png

Postado
7 horas atrás, Juliomar Marchetti disse:

vish sai totalmente do padrão

tem um exemplo junto ao manual deles?

Boa tarde Juliomar.

Não achei nada referente a esse token nos manuais, nenhuma explicação, somente exemplos de como mandar o xml, coisa que o componente já está fazendo.

O endereço é: https://bragancapaulista.giap.com.br/apex/pmbp/f?p=996:70

Existe uma seção Web Service, que é onde menciona sobre esse Authorization, mas também não vi nada que ajude muito, apenas os endereços. (Segue imagem).

WS.thumb.png.846ac0ba90b98788f205ddf6d9aa8d6e.png

Obrigado.

  • Consultores
  • Solution
Postado

Bom dia,

Necessito de um exemplo completo (Envelope) de envio da nota para o webservice.

Não basta o XML da nota, tem que ser completo, assim vai ser possível ter uma ideia de como devemos gerar o XML antes de ser enviado para o webservice.

Outra coisa não temos os arquivos XSD (Schemas) desse provedor, logo fica complicado gerar o XML e enviar sem realizar a validação.

Trabalhar sem os schemas é implementar na tentativa e erro.

  • Curtir 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

  • 2 semanas depois ...
Postado
Em 15/06/2020 at 09:24, Italo Jurisato Junior disse:

Bom dia,

Necessito de um exemplo completo (Envelope) de envio da nota para o webservice.

Não basta o XML da nota, tem que ser completo, assim vai ser possível ter uma ideia de como devemos gerar o XML antes de ser enviado para o webservice.

Outra coisa não temos os arquivos XSD (Schemas) desse provedor, logo fica complicado gerar o XML e enviar sem realizar a validação.

Trabalhar sem os schemas é implementar na tentativa e erro.

Boa tarde Italo.

Vou tentar conseguir o exemplo com o pessoal da prefeitura e retornar no tópico.

 

Obrigado por enquanto.

  • Curtir 1
  • 1 mês depois ...
  • 4 semanas depois ...
  • Moderadores
Postado
9 minutos atrás, Carlos Júnior disse:

Está dificil conseguir resposta da prefeitura desta cidade....

O colega a cima pelo jeito não vai responder por aqui....

Situação complicada para esta cidade..

 

Mas tu pode fazer igual ele e tentar conversar com o provedor por todos os meios possíveis e se conseguir postar aqui também

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Transparent-02.png
 

 

Postado
22 horas atrás, Juliomar Marchetti disse:

Mas tu pode fazer igual ele e tentar conversar com o provedor por todos os meios possíveis e se conseguir postar aqui também

Sim, eu estou tentando comunicação, mas não respondem...

 

  • Consultores
Postado

Boa tarde Carlos,

Altere no arquivo Giap.ini a seção Recepcionar:

[Recepcionar]
IncluiEncodingCab=0
IncluiEncodingDados=0
Texto1=<nfe>%DadosMsg%</nfe>

Note como ficou o campo Texto1.

Faça novos testes.

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
1 hora atrás, Italo Jurisato Junior disse:

Boa tarde Carlos,

Altere no arquivo Giap.ini a seção Recepcionar:


[Recepcionar]
IncluiEncodingCab=0
IncluiEncodingDados=0
Texto1=<nfe>%DadosMsg%</nfe>

Note como ficou o campo Texto1.

Faça novos testes.

Com esta configuração ficou assim:

<nfe><EnviarLoteRpsEnvio><notaFiscal> 

 

Postado (editado)

Italo,

Estou tentando entender o funcionamento do envio, e achei o seguinte na função a baixo

 

#ACBrDFeSSL

function TDFeSSLHttpClass.Enviar(const ConteudoXML: String; const AURL: String;
  const ASoapAction: String; const AMimeType: String): String;
var
  AMethod: String;
begin
  FDataReq.Clear;
  if (ConteudoXML <> '') then
  begin
    AMethod := 'POST';
    WriteStrToStream(FDataReq, AnsiString(ConteudoXML));
  end
  else
    AMethod := 'GET';

  HeaderReq.Clear; // Para informar Haders na requisição, use HTTPMethod();
  FSoapAction := ASoapAction;
  FMimeType := AMimeType;
  try
    HTTPMethod( AMethod, AURL ) ;

    FDataResp.Position := 0;
    Result := ReadStrFromStream(FDataResp, FDataResp.Size);

    // Verifica se o ResultCode é: 200 OK; 201 Created; 202 Accepted
    // https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
    if not (FpHTTPResultCode in [200..202]) then
      raise EACBrDFeException.Create('');
  except
//    on E:EACBrDFeException do
//      raise;
    on E:Exception do
    begin
      raise EACBrDFeException.CreateDef( Format(ACBrStr(cACBrDFeSSLEnviarException),
                                         [FpInternalErrorCode, FpHTTPResultCode, FURL] )
                                         + sLineBreak + LastErrorDesc);
    end;
  end;

end;
 

Este webservice manda justamente adicionar um header com a tag authorization informando o token.

image.thumb.png.39f86d16023baf4a4d69425d80883375.png

 

A Pergunta é como usar este HTTPMethod corretamente para informar a este header?

Aguardo,

 

Editado por Carlos Júnior
  • Consultores
Postado

Bom dia Carlos,

Então volte o arquivo INI para ficar desta forma:

[Recepcionar]
IncluiEncodingCab=0
IncluiEncodingDados=0
TagGrupo=nfe
Texto1=%DadosMsg%

Tente enviar um lote.

Anexe o XML de envio do lote: ( *-env-lot.xml e *-env-lot-soap.xml ) para que possamos analisar.

Estou trabalhando no Refactoring do componente ACBrNFSe. 

Ao fazer testes com o provedor Giap também obtive o erro 401 para os serviços: EnviarLoteRps e Cancelar, só o serviço ConsultarNFSeporRps que não ocorreu esse erro.

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

Italo,

Fiz o seguinte: 

Inclui a seguinte linha e consegui comunicação( ALELUIA ), agora preciso só saber como faço pra informar este header via componente para não ficar fixo no código..

 HeaderReq.AddHeader('authorization', 'xxxx-xxxxxxxxxxxxxxxxxxRYX');

Aguardo,

Capturar.JPG

  • Consultores
Postado

Carlos,

Veja se desta forma funciona:

Unit ACBrNFSeWebServices

procedure TNFSeWebService.InicializarServico;
begin
  { Sobrescrever apenas se necessário }
  FProvedor := FPConfiguracoesNFSe.Geral.Provedor;

  inherited InicializarServico;

  if FPConfiguracoesNFSe.Geral.ConfigGeral.VersaoSoap = '' then
    FPMimeType := 'application/xml'
  else if FPConfiguracoesNFSe.Geral.ConfigGeral.VersaoSoap = '1.2' then
    FPMimeType := 'application/soap+xml'
  else
    FPMimeType := 'text/xml';

  FPDFeOwner.SSL.UseCertificateHTTP := FPConfiguracoesNFSe.Geral.ConfigGeral.UseCertificateHTTP;

  FPDFeOwner.SSL.HTTPMethod('authorization', 'xxxx-xxxxxxxxxxxxxxxxxxRYX'); // <=== inclui esta linha

  TACBrNFSe(FPDFeOwner).SetStatus(FPStatus);
end;

Se funcionar, esse código de autorização podemos colocar ele em uma propriedade de configuração por exemplo WebChaveAcesso.

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

  • Este tópico foi criado há 1329 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

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