NFSe - Belo Horizonte PHP

Boa tarde, há uma semana venho sofrendo com a emissão da NFSe de Belo Horizonte.
Estou usando esta lib para assinar o xml:

Ele está assinando, porém no documento de exemplo da prefeitura aparecem 2 assinturas enquanto a lib insere apenas uma.

Outra questão é como montar o XML e enviar por SOAP assiando essa requisição.
Existe alguma exemplo de implementação?

Essa biblioteca tem um problema na assinatura.
Ao fazer o C14N ela pega alguma coisa errada.
Ainda não descobri o motivo, nem a solução.

Dê uma olhada nesse meu código para entender o envio e assinatura.
Nela tem dois métodos de assinatura, que funcionam em 99% dos casos.
bhiss_v001.php (37,3,KB)

Os endpoints para envio são:

prod = "https://bhissdigital.pbh.gov.br/bhiss-ws/nfse";
homo = "https://bhisshomologa.pbh.gov.br/bhiss-ws/nfse";

Assine tanto a tag InfRps quanto a tag LoteRps.
No final converta tudo para texto trocando as entidades >, < para &gt; e &lt; e coloque nas tags nfseCabecMsg e nfseDadosMsg.

Bom dia Luiz, obrigado demais pela sua atenção. Vou testar agora de manhã com essa sua ajuda. Muito obrigado mesmo.

Luiz, fiz as alterações para testes, gerou o XML e assinou bonitinho, perfeito, porém ao validar a assinatura não possível, diz que o algoritmo de resumo criptográfico inválido.
Tentei fazer uploado do xml assinado mas ainda sou novo na comunidade e não posso anexar.

xml_assinado

assinado.xml (7,9,KB)
Como ficou o xml assinado.

Não adianta usar softwares de terceiros.
O próprio webservice tem métodos diferentes de validar a assinatura.

1 curtida

Luiz, aproveitando, talvez eu esteja fazendo algo errado, em seu código tem uma função toLiteral() que não veio no que você disponibilizou, o que essa função faz?

$envelope = str_replace(‘%CabMsg%’, $this->toLiteral($this->cabecalho), $envelope);

Converte as Tags XML para String:

    //Converte String em XML
    public function fromLiteral($docxml)
    {
        $docxml = str_replace('&lt;', '<', $docxml);
        $docxml = str_replace('&gt;', '>', $docxml);
        return $docxml;
    }

    //Converte XML em String
    public function toLiteral($docxml)
    {
        //$docxml = str_replace('&', '&amp;', $docxml);
        $docxml = str_replace('<', '&lt;', $docxml);
        $docxml = str_replace('>', '&gt;', $docxml);
        return $docxml;
    }

1 curtida

Luiz, desculpe a demora, estive em viagem, deu certo, eu quero agradecer demais sua ajuda, e gostaria de contribuir de alguma forma.
Existe alguma maneira de doar, ou então deixa seu PIX para a gente poder contribuir.

1 curtida

Opa, valeu!

Tem sim, pode scanear o QR Code abaixo.

Ou usar essa Chave PIX Aleatória: 08f1eb06-c886-4a89-90e3-1e8f2bd8a104
Está em meu nome e o Banco é MercadoPago

image

Luiz, muito obrigado, queria contribuir com um pouco mais, mas o o pouquinho que mandei foi com enorme gratidão! Muito obrigado.

1 curtida

Que isso! Eu que agradeço! :+1: :+1:

Este tópico foi fechado automaticamente 30 dias depois da última resposta. Novas respostas não são mais permitidas.