Assinatura em PHP para Ponta Grossa/PR

Boa tarde,

Estou encontrando imensa dificuldade em relação a assinatura do arquivo para envio da NFS-e padrão Elotech para município de Ponta Grossa. Trabalho com PHP.

Travei no processo de envio onde obtenho sempre o retorno de “A verificação da assinatura falhou”.

Acredito que seja no processo de assinatura que estou cometendo alguma falha ou assinando na hora indevida, enfim. Se alguém puder nos dar uma dica desde já agradeço.

Att,
Eduardo Maito

Realmente a implementação da Elotech em PHP bem como em .NET é a mais complicada que já vi.

É outro padrão e precisa sobrescrever os métodos do Cliente SOAP para dar certo.

Para testar a assinatura eu aconselho usar o método do webservice abaixo:

<ConsultarNfseRpsEnvio xmlns="http://shad.elotech.com.br/schemas/iss/nfse_v1_2.xsd">
<IdentificacaoRps>
    <Numero>1</Numero>
    <Serie>1</Serie>
    <Tipo>1</Tipo>
</IdentificacaoRps>
<IdentificacaoRequerente>
<CpfCnpj><Cnpj>81181083000164</Cnpj></CpfCnpj> 
<InscricaoMunicipal>00043296</InscricaoMunicipal>
<Senha>XBFS53C7</Senha>
<Homologa>true</Homologa>
</IdentificacaoRequerente>
</ConsultarNfseRpsEnvio>

Verifique se sua senha está ativa.
Informe os dados corretos para os outros campos.

Também tenha certeza de converter o seu certificado de .pfx para .p12.

Segue abaixo os arquivos:
elotech.xml (431 Bytes)
pmpg.php (2,2 KB)
SignedSoapClient.php (12,5 KB)

Muito obrigado pelas orientações Luiz, de acordo com o seu exemplo, conseguimos fazer validar a assinatura. Nosso erro era o momento da assinatura que estava sendo feito antes do esperado.

1 curtida

Fala Luiz,

Boa tarde cara, tudo certo ?

Cara excelente o código, estou rodando o projeto aqui em php para entender melhor como funciona a assinatura.
Fiz todo o processo para rodar o projeto e incluindo informações.

1 - Cpnj
2 - Inscrição estadual
3 - Converter o certificado para .p12
4 - Gerei uma nova senha de acesso no site.

Mesmo assim… ainda “A verificação da assinatura falhou”.

Existe mais alguma coisa que não fiz, ou alguma ideia para me ajudar…

Valeu Luiz…

Abraço!

Esqueci de dizer que precisa da ajuda do xmllint.
Se você estiver no windows, vai precisar do xmllint.exe para windows.

Está documentado no SignedSoapClient.php

This class uses external utility xmlling (usually found in libxml2-utils package)
It is required to canonicalize XML before signing it, as required by standard.

To use on windows, follow this instructions
xml - Installing xmllint - Stack Overflow

Bom dia Luiz…
Muito obrigado pelo retorno,

Maravilha, com o xmllint instalado na maquina.
Preciso fazer mas alguma coisa ?

Bom dia Luiz,

Erro ao validar xml com o xmllint…
elotech.xml:1: validity error : Validation failed: no DTD found !
nsultarNfseRpsEnvio xmlns=“http://shad.elotech.com.br/schemas/iss/nfse_v1_2.xsd

Ja viu esse erro ?

Fala Luiz,
Boa tarde tudo certo ?

Cara… maravilha, esta perfeito a rotina, consegui assinar aqui !!
Deu tudo certo, muito obrigado!
Abraço!

Opa, estou tentando fazer tbm essa nota, mas ate agora sem sucesso , alguém poderia me ajuda, passar um e-mail, para trocar umas ideias, e conforme vou conseguindo aqui podemos contribuir, e depois fazer um passo a passo para novos que terão essa duvida.

Já foi feito isso, basta seguir os detalhes do meu post acima.
É o mais simples possível que você vai encontrar.

Sempre sugiro que comece pela consulta de notas, ao invés de ir diretamente no envio.
É mais fácil de localizar o erro no XML.

Exemplo Elotech

Fala Luiz,

Boa tarde.

O que preciso fazer para compilar o seu projeto em c#?

Qual framework vc usou ?
Tem orientações?

Valeu
abraço!

Opa,

C# Puro, usei o VS 2017.

Bom dia Luiz,

Td certo?

Cara, gostaria de agradecer muito a forma que você deu ae para comunidade,
publicando o fonte dessa assinatura,
Eu consegui criar uma dll com seu código, e integrei o envio no delphi, ficou show.
Você monstro brother, assinatura muito tensa, ficou muito bom!! Esta de parabéns.
Meu irmão precisava de um ultimo favor seu…
Você teria um xml de exemplo de pedido de cancelamento, um xml valido,
O exemplo disponibilizado no site esta confuso.

Vlw Luiz

Abraço!

Consegui um exemplo aqui,
estou com problemas nesse campo: nfse:ChaveAcesso

Só funciona na versão 1.2.

No XML DE EXEMPLOS - v1.02, tem o resp4.xml. A chave de acesso está nessa resposta.

Está nesse link:
http://www.pontagrossa.pr.gov.br/iss

Show de bola

como vc lidou com o prefixo nfse:, para o evento de cancelamento ele esta reclamando desse prefixo, sem o prefixo ele nem processa.

Eu não implementei cancelamento.
Deixo sempre para o usuário fazer isso no portal.

Eu implementei o ConsultarNfseRpsEnvio.

Verifica o ENVELOPE SOAP que enviei:
RPS000025.soap.xml (5,4,KB)

Retorno:
RPS000025.ret.xml (3,0,KB)