Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

Pessoal, boa tarde...
Estou com uma enorme dificuldade de gerar a tag de integridade para o xml da prefeitura de Limeira/SP
Utilizando o código php demostrado no área do desenvolver da prefeitura de Limeira eu consigo chegar na tag de integridade correta, mas ao gerar pelo componente ACBR, não está gerando igual.
 

<?php
	$token	     = 'd0pQZDIwMExaaWhNSGF6YVE5WDErMDYvRllvUXY2cXp6QncrcWR6aHBqST0=';
	$tag	     = '<RPS>[conteúdo]</RPS>';
	$tag	     = preg_replace('/[^\x20-\x7E]+/','',$tag);
	$tag	     = preg_replace('/[ ]+/','',$tag);
	$integridade = hash('sha512',$tag.$token);
	echo $integridade;
?>


 

function TACBrNFSeX.GerarIntegridade(const AXML: string): string;
var
  XML: string;
  i, j: Integer;
  xAssinatura: TStringList;
begin
  j := Length(AXML);
  XML := '';

  for i := 1 to J do
  begin
    if {$IFNDEF HAS_CHARINSET}ACBrUtil.Compatibilidade.{$ENDIF}CharInSet(AXML[i], ['!'..'~']) then
      XML := XML + AXML[i];
  end;

//  SSL.CarregarCertificadoSeNecessario;

  xAssinatura := TStringList.Create;
  try
    xAssinatura.Add(XML + Configuracoes.Geral.Emitente.WSChaveAcesso);

    Result := string(SSL.CalcHash(xAssinatura, dgstSHA512, outHexa, False));
    Result := lowerCase(Result);
  finally
    xAssinatura.Free;
  end;
end;

Quando chega aqui, para gerar a tag de integridade o resultado para gerar difere do código PHP.
Notei que o resultado para a variável $tag remove todas as tags do xml e concatena com a chave de acesso.
Mesmo fazendo isso e jogando direto nesse CalcHash não chego no resultado desejado:
 

Resultado em PHP

$tag = '7RPSL12022-04-1112022-04-11100.004.004.002108.011233526902358566280002597056038752679829AdrianadaSilvadosSantosRuaZairaOmettoS/NJardimNossaSenhoradoAmparo3526902SP13482275drisantos604@gmail.com22'
$token = 'CJSMFYBDZ1EESHEYROW'

$integridade = 'bb3989b878143f72212aeb17ed608ec1b90c52b98b89c9a84c2310bb5cf304b70d45f45e63e5bdaa2ae331e2bb3118be4f2a010eb55a48d72b7f24cc17765298'

Gostaria da ajuda de você de como resolver isso.

Desde já grato
Raphael
 

  • Consultores
Postado

Boa tarde Raphael,

Você esta com todos os fontes de todas as pastas atualizados?

Se sim, reinstalou o ACBr?

Se sim, qual é o erro que ocorre ao tentar emitir uma nova para Limeira usando o componente ACBrNFSeX ?

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

Boa tarde Italo, estou com todos os fontes atualizados.
Tanto que apaguei a pasta ACBR e baixei tudo novamente e reinstalei
O erro que acontece é na tag de integridade - Integridade Inválida

image.thumb.png.ea1ebae9c46360f1965c73821716fc29.png

 

Segundo o pessoal da prefeitura a única coisa errada é a tag de integridade conforme o E-mail que recebi
O token está correto, só o conteúdo da tag que ta errado.

image.thumb.png.030006576acfcc42ceaa7633969f331f.png

E estou com esse problema desde a semana passada.

Desde já grato pela ajuda...

Postado

italo, 
Tenho sim, a informação de fornecida no site da própria prefeitura de Limeira.

image.thumb.png.4a8536862ae329990fd1819b3e63fec5.png

Essa imagem foi retirada da área do desenvolvedor para NFSe.

Se quiser acessar o site diretamente para verificar :  https://limeira.iibr.com.br/login.php

image.png.4a7455d387b40ac460c08b92b5259e5e.png

 

ou ir diretamente em :  https://limeira.iibr.com.br/dev/dev_dashboard.php#dev_ws_notafiscal$$ZWEyNWMwYWE3N2U2NDhlYWJmODA0Y2YzMDhmMDIzMzZaV0V5TldNd1lXRTNOMlUyTkRobFlXSm1PREEwWTJZek1EaG1NREl6TXpZek5qRT0=$$li_361_3$$3

image.thumb.png.60b8ac904410c1799062ee9f727de0b4.png

  • Consultores
Postado

Raphael,

Eu não conheço PHP, você poderia me explicar o que faz as 3 linhas abaixo?

$tag	     = preg_replace('/[^\x20-\x7E]+/','',$tag);
$tag	     = preg_replace('/[ ]+/','',$tag);
$integridade = hash('sha512',$tag.$token);

Na terceira o $tag.$token, o ponto entre essas 2 variáveis significa uma concatenação?

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,
eu conheço pouco de php também, mas o que eu sei é que a função preg_replace() permite substituir sequências baseadas em expressões regulares.

$tag.$token isso é concatenação.

hash('sha512',$tag.$token) vai usar um hash em SHA512 nas 2 variáveis concatenadas.

'/[^\x20-\x7E]+/' é uma expressão regular que significa "qualquer coisa que não seja um código de caractere no intervalo hexadecimal 0x20 a 0x7E, ou seja, 32 a 126 em ascii(https://www.ime.usp.br/~pf/algoritmos/apend/ascii.html) "

 

^ not
\x20 hex código para o caracter de espaço
- to 
\x7e hex código para o caracter ~

Então, qualquer coisa que não esteja neste intervalo será substituído por ''(vazio). Lembrando que esse replace só acontece para o conteúdo das tags, todas as tags são removidas.
Você pode fazer um teste colocando o código disponibilizado no site da prefeitura, neste link(http://phptester.net/) para testar o funcionamento do código.
Substituindo as variáveis(
$tag e $token) pelo conteudo informado para se chegar ao valor da tag de integridade como mostra a imagem.
image.thumb.png.f62edc79eb06008108ea10f26f225b27.png

A tag de integridade foi gerada exatamente igual ao exemplo da prefeitura de Limeira.

Pode-se testar os valores de cada variavel em cada momento do processamento colocando o echo depois de cada código, como na imagem abaixo.

image.thumb.png.e27f1520d6356b43fb0680735988b40b.png

Eu estou perto de conseguir implementar, se conseguir, envio o código para vocês.
Meu problema está no hash que não ta batendo, estou usando a DLL WinCrypt mas não ta batendo
 

    SSL.SSLCryptLib := cryWinCrypt;
    SSL.SSLHttpLib := httpWinHttp;
    SSL.SSLXmlSignLib := xsLibXml2;

    Memo2.Text := lowerCase(SSL.CalcHash(XML + WSChaveAcesso, dgstSHA512, outHexa, False));

 

  • Consultores
Postado

Boa tarde Raphael,

Muito estranho pois no exemplo em PHP não tem nada que diz que as tags são removidas, pelo contrario.

veja:

$tag	     = '<RPS>[conteúdo]</RPS>';

Para mim essa linha esta apenas informando que devo pegar o conteúdo do XML referente ao RPS, ou seja, tudo o que esta compreendido entre as tags <RPS> e </RPS> inclusive elas e não pegar os conteúdos de todas as tags concatenar para depois fazer o resto.

Fiz uma alteração nos fontes, favor atualizar, reinstalar e 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

Boa tarde Italo

parece que o comando echo( para exibição) que remove as tags por conta do HTML
então pode descartar essa parte de ter que retirar as tags.

Postado

Italo,
infelizmente continua dando erro na integridade, o XML está chegando como manual pede conforme a imagem
image.thumb.png.d64197a6c650e520bd7aef225d54e75b.png

mas o retorno continua sendo o mesmo.


image.thumb.png.aeb878b1cfab30a0ca5fd72d0694ec3a.png

 

Eu estou tentando gerar direto em produção, alterando a chave de acesso no código.

image.png.fe6c35b700542a1d4169b671a41a8391.png

Postado

Italo, nada ainda... eu já tinha tentado esta modificação de passar as infos de XML e Chave de acesso direto na funcao CalcHash
Veja como está minha configuração do webservice, pode ser que tenha algo de errado


image.thumb.png.4a9995589aeb531afec585ad23cea590.png

 

A opção de SSLType já tentei todos os tipos....

  • Consultores
Postado

Raphael,

Não acredito que o problema seja o SSLType.

Agora o GerarIntegridade esta igual ao do componente antigo e pelo que me recordo teve um usuário que consegui emitir nota a muito tempo quando ainda não existia o componente novo.

Com essa modificação notei que o resultado final é diferente da implementação anterior.

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
Muito obrigado pela ajuda...
Com essa última modificação funcionou.
Não tinha funcionado antes porque eu nao tinha reinstalado, mas quando reinstalei funcionou em relação a integridade.
Esta dando a mensagem de NFSe não encontrada e não trouxe as infos no componente, mas foi gerada.

image.thumb.png.e9c718994b249589ae8f7ce7792f0f81.png

 

Olha o XML de retorno, Não sei porque não esta no componente esses dados, Isso eu resolvo

image.thumb.png.42358f36accc88d7523dbd15fc02683e.png

 

Postado

Italo,

O problema está aqui, vou trocar para 

Response.Sucesso := (Response.Erros.Count = 0);

 

image.png.8c95c9e5c2c6694dc94054f7a3890d5a.png

Com isso o problema está resolvido por completo
Muito obrigado por tudo Italo.

  • Curtir 1
Postado

Vou testar agora,
Mas antes de testar, o método de consulta por RPS tá funcionando corretamente mas não está salvando na classe ConsultaNFSeporRps
 

image.png.1b6d255bddaf291fa14d7a95aa88f8c5.png

 

image.png.c41ed276cd61a2e5ac4aa81afefe1a9d.png

 

 

 

Postado

Italo,
Em relação ao link deu certo conforme a imagem
image.png.ed913d1a11a8aca09c44a285a7f63f23.png

 

Os demais métodos desse provedor estão com o mesmo problema de estar preenchendo a classe como informado na resposta anterior.

  • Este tópico foi criado há 927 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
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.