Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

Boa tarde!

 

estou com dificuldades em enviar nfse para salvador estou tendo a seguinte, alguns dos senhores poderia me dá uma ajuda?

Erro: 10/11/2018 16:23:27 Assinatura do Hash nao confere Reenvie asssinatura do Hash conforme algoritmo estabelecido no Manual de Instrucao da NFS-e 

 

Salvador.ini

[Assinar]
RPS=1
Lote=1
URI=0
ConsSit=0
ConsLote=0
ConsNFSeRps=0
ConsNFSe=0
Cancelar=1
RpsGerar=1
LoteGerar=0
Substituir=0

Sem título.png

  • Consultores
Postado

Bom dia Hugo,

Me parece que os seus fontes estão desatualizados.

Favor atualizar todos os fontes de todas as pastas, reinstale os componentes usando o ACBrInstall_Trunk2.

O seu arquivo INI não confere com o que esta no repositório.

  • 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

Postado (editado)

Italo, bom dia!

fiz as alterações  que você me pediu, gerei um novo exe e troquei os arquivos .ini, mas mesmo assim esta ocorrendo o mesmo erro.

12/11/2018 10:34:38 Assinatura do Hash nao confere Reenvie asssinatura do Hash conforme algoritmo estabelecido no Manual de Instrucao da NFS-e 

segue xml gerados pela aplicação.

25236-env-lot.xml

25236-env-lot-soap.xml

25236-rec.xml

25236-rec-soap.xml

Editado por hugo.filho
erro de digitação
  • Consultores
Postado

Boa tarde Hugo,

Se tratando de Salvador não será possível usar o libCapicom e nem o libCapicomDelphiSoap, esses dois não funcionam quando o identificado é "id" tudo minúsculo.

Por outro lado o libWinCrypt funciona com esse identificado.

  • Curtir 2
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
2 horas atrás, Italo Jurisato Junior disse:

Boa tarde Hugo,

Se tratando de Salvador não será possível usar o libCapicom e nem o libCapicomDelphiSoap, esses dois não funcionam quando o identificado é "id" tudo minúsculo.

Por outro lado o libWinCrypt funciona com esse identificado.

Só que com esta configuração libWinCrypt  esta dando errro Assinatura do Hash nao confere Reenvie asssinatura do Hash conforme algoritmo estabelecido no Manual de Instrucao da NFS-e 

Postado

Italo, bom dia!

em pesquisa no site https://nfse.sefaz.salvador.ba.gov.br/OnLine/Modulo/ValidaXSDLoteFrm.aspx, encontrei os xml abaixo ajuda em alguma coisa?

acho à atenção para o aquivo servico_enviar_lote_rps_envio.xml e servico_enviar_lote_rps_envio.xml.

dados_complementares_construcaocivil.xml

dados_complementares_educacao.xml

dados_complementares_porto.xml

servico_consultar_lote_rps_envio.xml

servico_consultar_lote_rps_resposta.xml

servico_consultar_lote_rps_resposta_complementar_civil.xml

servico_consultar_lote_rps_resposta_complementar_porto.xml

servico_consultar_lote_rps_resposta_erro.xml

servico_consultar_nfse_envio.xml

servico_consultar_nfse_pendente_aceite_envio.xml

servico_consultar_nfse_pendente_aceite_resposta.xml

servico_consultar_nfse_pendente_aceite_resposta_erro.xml

servico_consultar_nfse_resposta.xml

servico_consultar_nfse_resposta_complementar.xml

servico_consultar_nfse_resposta_erro.xml

servico_consultar_nfse_rps_envio.xml

servico_consultar_nfse_rps_resposta.xml

servico_consultar_nfse_rps_resposta_complementar_civil.xml

servico_consultar_nfse_rps_resposta_complementar_porto.xml

servico_consultar_nfse_rps_resposta_erro.xml

servico_consultar_situacao_lote_rps_envio.xml

servico_consultar_situacao_lote_rps_resposta.xml

servico_consultar_situacao_lote_rps_resposta_erro.xml

servico_consultar_situacao_nfse_envio.xml

servico_consultar_situacao_nfse_resposta.xml

servico_consultar_situacao_nfse_resposta_erro.xml

servico_enviar_lote_rps_envio.xml

servico_enviar_lote_rps_resposta.xml

servico_enviar_lote_rps_resposta_erro.xml

servico_registrar_aceite_tomador_envio.xml

servico_registrar_aceite_tomador_resposta.xml

servico_registrar_aceite_tomador_resposta_erro.xml

  • Consultores
Postado

Boa tarde Hugo,

O problema é que Salvador na assinatura digital esta se utilizando de apenas uma transformação, o ACBr se utiliza de duas, pois é o que é usado em todos os documentos fiscais eletrônicos.

Na assinatura do XML exemplo de Salvador no grupo X509Data consta o elemento X509SubjectName que não é usado no padrão.

E também existe a presença do grupo KeyValue que não é usado na assinatura padrão.

Quando me refiro assinatura padrão, é a assinatura utilizada pela NF-e, NFC-e, CT-e, CT-e OS, MDF-e, BP-e, e-Social, Reinf e a maioria dos provedores de NFS-e.

 

  • 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

Postado
Em 16/11/2018 at 14:12, Italo Jurisato Junior disse:

Boa tarde Hugo,

O problema é que Salvador na assinatura digital esta se utilizando de apenas uma transformação, o ACBr se utiliza de duas, pois é o que é usado em todos os documentos fiscais eletrônicos.

Na assinatura do XML exemplo de Salvador no grupo X509Data consta o elemento X509SubjectName que não é usado no padrão.

E também existe a presença do grupo KeyValue que não é usado na assinatura padrão.

Quando me refiro assinatura padrão, é a assinatura utilizada pela NF-e, NFC-e, CT-e, CT-e OS, MDF-e, BP-e, e-Social, Reinf e a maioria dos provedores de NFS-e.

 

Italo, boa tarde!

obrigado pelas dicas, resumindo o Acbr não atende a prefeitura de salvador correto?

então vou fazer uma dll em c# e vou disponibilizar aqui, pois a dll da prefeitura não esta funcionando no windows 10.

Postado

As informações abaixo foi retirado do manual de integração disponibilizando pela prefeitura de Salvador-BA , o mesmo segue em anexo.

3.2.3. Padrão de Assinatura Digital As mensagens enviadas ao Sistema de Nota Fiscal de Serviços Eletrônica da Prefeitura de Salvador são documentos eletrônicos elaborados no padrão XML e devem ser assinados digitalmente utilizando certificado digital, descrito no item 3.2.2. Os elementos abaixo estão presentes dentro do Certificado do contribuinte tornando desnecessária a sua representação individualizada na mensagem XML. Portanto, a mensagem XML não deve conter os elementos:

<X509SubjectName>

<X509IsssuerSerial>

<X509IsssuerName>

<X509SerialNamber>

<X509SKI>

 

Analogamente, as TAGs abaixo não deverão ser informadas, pois as informações serão obtidas a partir do Certificado do emitente: Para o processo de assinatura, o contribuinte não deve fornecer a Lista de Certificados Revogados, já que a mesma será montada e validada pelo Sistema de Nota Fiscal de Serviços Eletrônica® da Prefeitura de Salvador.

<KeyValue>

<RSAKeyValue>

<Modulus>

<Exponent>

MANUAL_NFTS_Web_Service_v1.3 - SALVADOR.pdf

  • Curtir 1
Postado

Boa tarde Hugo,

Onde trabalho fizemos um .exe (solução paleativa) em C# e conseguimos fazer a transmissão, estamos providenciando uma DLL para isto agora, mas o ideal seria que o ACBr conseguisse fazer isto independente de qqer outra app externa.

Você, através das informações que postou, já conseguiu transmitir totalmente com o ACBr?

Postado
Em 27/11/2018 at 09:11, Italo Jurisato Junior disse:

Bom dia Rubens,

Você poderia anexar o XML assinado pelo seu EXE que foi aceito pelo provedor para que possamos comparar com o que é gerado e assinado pelo ACBr?

Boa tarde,

Anexo lote de envio assinado que a prefeitura de Salvador aceita (1-env-lot.xml) o outro foi assinado com componente de terceiros. Pode usar este site para validar o lote de NFSe produzido: http://validator.doctrails.net/default.aspx (na prefeitura de Salvador me indicaram este para validar nossas requisições).

 

1-env-lot.xml

lote_assinado_outro_componente.xml

  • Curtir 1
Postado

Olá a todos,

Vou colocar abaixo a solução (passo a passo) utilizando um programa em C# (anexo AssinaPIL.sln) que fizemos (em parceria com o colega de trabalho Sandecki) para fazer o envio para o Município de Salvador. 

A princípio geramos um .EXE que faz a assinatura, mas uma DLL para este fim é mais interessante, se alguém se habilitar por favor compartilhe no grupo.

O IDEAL é que um dia funcione apenas com o ACBr e seus próprios métodos de assinatura.

1. A versão do .NET deve ser a .NETFramework,Version=v4.6.2 ou superior;

2. Foram utilizados os mesmos SCHEMAS do ACBr para montagem dos arquivos XML de RPS e LOTE de envio;

3. Arquivo salvador.ini deve estar da seguinte maneira:

[Assinar]
RPS=1
Lote=1
URI=1

4. DELPHI - no seu componente visual ACBrNFSe é necessário atribuir o evento OnAntesDeAssinar ou se utiliza em runtime faça a atribuição do método:

ACBrNFSe.OnAntesDeAssinar := ACBrNFSeAntesDeAssinar;

5. DELPHI - Cole o seguinte código e adapte para seu uso o método OnAntesDeAssinar:

// Método para assinar pelo executável externo  
procedure TFormNFS.ACBrNFSeAntesDeAssinar(
  var ConteudoXML: String; const docElement, infElement, SignatureNode,
  SelectionNamespaces, IdSignature: String);
var
  xml: TStringList;
  pathNFSe,
  pathRPS,
  pathGeral,
  assinaPIL,
  xmlFileName,
  cmdLine: String;
begin
  // Somente para o provedor de SALVADOR
  if ACBrNFSe.Configuracoes.Geral.Provedor = proSalvador then
  begin
    try
      xml := TStringList.Create;
	  
	  // caminho e nome do executável
      assinaPIL := ExtractFilePath(ParamStr(0))+'assinaPIL.exe';

      // Verifica se o assinador existe
      if not FileExists(assinaPIL) then
        raise Exception.Create('O arquivo para assinatura digital não foi encontrado!'+#13+assinaPIL);

      // Caminho onde salva o XML
      pathGeral := ACBrNFSe.Configuracoes.Arquivos.GetPathGer(Date, ACBrNFSe.Configuracoes.Geral.Emitente.CNPJ);

      // Descobre se é RPS ou LOTE, pois esta rotina sempre é executada antes de assinar
      if AnsiLowerCase(docElement) = 'rps' then
      begin
        xmlFileName := pathGeral + '\assinar.xml';
        xml.Add(ConteudoXML);
        xml.SaveToFile(xmlFileName);
        cmdLine := xmlFileName+' InfRps';
      end
      else if AnsiLowerCase(docElement) = 'enviarloterpsenvio' then
      begin
        xmlFileName := pathGeral + '\assinar.xml';
        xml.Add(ConteudoXML);
        xml.SaveToFile(xmlFileName);
        cmdLine := xmlFileName+' LoteRps';
      end;

      // Cria o comando de assinatura
      cmdLine := assinaPIL+' '+cmdLine;

      if (not ExecAndWait(PChar(cmdLine)) > 0) then
        raise Exception.Create('Não foi possível assinar o arquivo:'+#13+xmlFileName)
      else
      begin
        xml.LoadFromFile(xmlFileName);
        conteudoXML := xml.GetText;
        // Apaga o arquivo temporario de assinatura
        if FileExists(xmlFileName) then
          DeleteFile(xmlFileName);
      end;
      // Continua o envio pelo ACBr
    finally
      xml.Free;
    end;
  end;
end;

6. DELPHI - crie a função para executar o aplicativo externo de assinatura que é chamado no método acima:

function ExecAndWait(ExecFile:PChar): Integer;
var
  STARTUPINFO: TStartupInfo;
  PROCESSINFO : TProcessInformation;
  Status      : Cardinal;
begin
  with STARTUPINFO do
  begin
    cb          := SizeOf(STARTUPINFO);
    lpReserved  := nil;
    lpDesktop   := nil;
    lpTitle     := nil;
    dwFlags     := STARTF_USESHOWWINDOW;  // não motra o cursor de load
    lpReserved  := nil;
    cbReserved2 := 0;
    lpReserved2 := nil;
    //wShowWindow := SW_HIDE;  // HIDE não funciona em WINDOWS 8, W10 não houve problema
    wShowWindow := SW_SHOW;
  end;
  Result:=0;

  if CreateProcess(nil,ExecFile,nil,nil,False,NORMAL_PRIORITY_CLASS,nil,nil, STARTUPINFO,PROCESSINFO) then
  begin
    try
      Status:=WaitForSingleObject(PROCESSINFO.hProcess,1000 * 5 * 60);
      if Status=WAIT_TIMEOUT then
      begin
        TerminateProcess(PROCESSINFO.hProcess,0);
      end
      else
      if Status=WAIT_FAILED then
        Result:=GetLastError
      else
      begin
        GetExitCodeProcess(PROCESSINFO.hProcess,Status);
        Result := Status * -1;
      end;
    finally
      CloseHandle(PROCESSINFO.hProcess);
      CloseHandle(PROCESSINFO.hThread);
    end;
  end
  else
   Result:=GetLastError;
end;

 

A maneira de envio é a de sempre  ACBrNFSe.Enviar(numero_lote);

Quem utilizar por favor manda um feedback do resultado, hoje utilizamos desta maneira para alguns clientes.

Abs,

 

 

AssinaPIL.zip

  • Curtir 1
  • Consultores
Postado

Boa tarde Rubens,

Pelo que notei a assinatura feita pelo componente ACBrNFSe possui o grupo <Transforms> e neste contem duas transformações.

Já o outro não possui o grupo mencionando.

Então isso significa que para o provedor de Salvador não se deve aplicar o algoritmo de transformação ao realizar a assinatura?

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

Boa tarde Rubens,

Pelo que notei a assinatura feita pelo componente ACBrNFSe possui o grupo <Transforms> e neste contem duas transformações.

Já o outro não possui o grupo mencionando.

Então isso significa que para o provedor de Salvador não se deve aplicar o algoritmo de transformação ao realizar a assinatura?

Boa tarde, também achei que poderia ser isto, mas não fez diferença quando mandamos com a assinatura feita no C#, tanto que os dois lotes que estão no anexo acima são validos para a prefeitura.

O problema esta na assinatura do bloco <rps> dentro de cada arquivo XML de RPS, como tem que assinar cada RPS e depois o LOTE com estes RPSs isto gera diferença e o erro de HASH INVÁLIDO.

Se eu fizer a assinatura de um arquivo xml de RPS apenas, ele será validado, porém ao gerar o lote com todos estes arquivos RPSs assinados e ao assinar o lote ficará inválido.

Se somente o lote for assinado sem os RPSs ele também ficará válido. 

Em outro post, vou tentar ser mais claro e explicar o que fizemos para assinar corretamente com a validação por outro programa.

 

 

 

 

 

 

 

 

  • Curtir 1
  • 2 semanas depois ...
Postado

Bom dia!

utilizei o método utilizado passado pelo rubenstz e tive sucesso, porem tive que ajustar a aplicação em c# disponibilizada para selecionar o certificado pelo numero de serie e passei o numero de serie junto aos parâmetros passado para o exe gerado pela aplicação c#.

linha alterada.

 

método ACBrNFSeAntesDeAssinar

// Cria o comando de assinatura
 cmdLine := assinaPIL+' '+cmdLine+' '+ACBrNFSe1.Configuracoes.Certificados.NumeroSerie;

 

método ExecAndWait 

with STARTUPINFO do
  begin
    cb          := SizeOf(STARTUPINFO);
    lpReserved  := nil;
    lpDesktop   := nil;
    lpTitle     := nil;
    dwFlags     := STARTF_USESHOWWINDOW;  // não motra o cursor de load
    lpReserved  := nil;
    cbReserved2 := 0;
    lpReserved2 := nil;
    wShowWindow := SW_HIDE;  // HIDE não funciona em WINDOWS 8, W10 não houve problema  <- DESCOMENTADO e funcionou no windows 10, estou usando o Delphi  10.2.3
    //wShowWindow := SW_SHOW; <- Comentado
  end;

 

  • Curtir 2
Postado (editado)

informações tirada do manual de integração pagina 26 e 27:

Desenvolvedores com sistemas em outras linguagens devem se certificar que o String a ser assinado corresponde exatamente ao mostrado abaixo:

 <tpNFTS><TipoDocumento>VALOR</TipoDocumento><ChaveDocumento><InscricaoMunicipal>VALOR</InscricaoMunicipal><SerieNFTS>VALOR</SerieNFTS><NumeroDocumento>VALOR</NumeroDocumento></ChaveDocumento><DataPrestacao>VALOR</DataPrestacao><StatusNFTS>VALOR</StatusNFTS><TributacaoNFTS>VALOR</TributacaoNFTS><ValorServicos>VALOR</ValorServicos><ValorDeducoes>VALOR</ValorDeducoes><CodigoServico>VALOR</CodigoServico><CodigoSubItem>VALOR</CodigoSubItem><AliquotaServicos>VALOR</AliquotaServicos><ISSRetidoTomador>VALOR</ISSRetidoTomador><ISSRetidoIntermediario>VALOR</ISSRetidoIntermediario><Prestador><CPFCNPJ><CNPJ>VALOR</CNPJ></CPFCNPJ><InscricaoMunicipal>VALOR</InscricaoMunicipal><RazaoSocialPrestador>VALOR</RazaoSocialPrestador><Endereco><TipoLogradouro>VALOR</TipoLogradouro><Logradouro>VALOR</Logradouro><NumeroEndereco>VALOR</NumeroEndereco><ComplementoEndereco>VALOR</ComplementoEndereco><Bairro>VALOR</Bairro><Cidade>VALOR</Cidade><UF>VALOR</UF><CEP>VALOR</CEP></Endereco><Email>VALOR</Email></Prestador><RegimeTributacao>VALOR</RegimeTributacao><DataPagamento>VALOR</DataPagamento><Discriminacao>VALOR</Discriminacao><TipoNFTS>VALOR</TipoNFTS><Tomador><CPFCNPJ><CPF>VALOR</CPF></CPFCNPJ><RazaoSocial>VALOR</RazaoSocial></Tomador></tpNFTS>

Os seguintes cuidados devem ser tomados ao gerar esta string:

1. Não deixar nenhum espaço em branco (a não ser como parte dos valores) ou quebra de linha;

2. Não incluir namespaces;

3. Não incluir tags de valores não informados;

4. Não incluir a tag “Assinatura”;

5. Não fazer padding de valores (com “0” ou “ “) a esquerda ou a direita

6. Imprimir os valores como UTF-8. O problema mais comum encontrado durante a assinatura envolve CPFs e CNPJs que começam com o número 0. Ao serem transmitidos para o Web Service da Nota Salvador esses valores são convertidos em números e, quando a validação é feita no servidor, este campo (assim como todos os outros campos numéricos), não recebe nenhum tipo de padding a esquerda para chegar ao tamanho máximo permitido (11 números para CPF, 14 para CNPJ). Se o desenvolvedor ler o valor do CPF/CNPJ diretamente do usuário, sem convertê-lo para número antes de criar a string a ser assinada, os 0 não significativos não serão eliminados e a assinatura ficará incorreta. Depois que o string for gerado realize os seguintes passos para finalizar a assinatura:

   6.1. Converta a cadeia de caracteres UTF-8 para bytes.

  6.2. Gere o HASH (array de bytes) utilizando SHA1.

 6.3. Assine o HASH (array de bytes) utilizando RSA-SHA1.

 6.4. Atribua o resultado ao valor do campo “Assinatura” do XML.

MANUAL_NFTS_Web_Service_v1.3 - SALVADOR.pdf

Editado por hugo.filho
falta de detalhe no problema relatado.
  • Curtir 2
  • Consultores
Postado

Boa tarde Hugo,

Favor entrar em contato com a prefeitura para saber com exatidão se o webservice da mesma espera receber o XML segundo esse manual ou se espera receber o XML segundo a versão 1 do layout da ABRASF.

Até onde sei Salvador possui um webservice próprio que foi construído com base na versão 1 do layout da ABRASF.

  • 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

  • 3 meses depois ...
Postado

Bom dia @Italo Jurisato Junior

Estou com um cliente de Salvador que precisa da nota de serviço. As informações citadas pelo @hugo.filho estão em um dos manuais disponibilizados no site da prefeitura de Salvador, tentei entrar em contato com eles via e-mail (única forma disponível) mas não houve resposta.

Se puder fazer as modificações, tenho condições de testa-las rapidamente. 

Obrigado.

  • Este tópico foi criado há 2063 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.