none
NFS-e Belo Horizonte falha na assinatura da nota. RRS feed

  • Pergunta

  • Boa tarde!

    Desculpem se não estou postando na categoria certa para a dúvida, estou desenvolvendo a integração de um sistema para emissão de Nfse para Belo Horizonte.

    Estão acontecendo 2 situações que apenas com essa prefeitura que desenvolvi estão acontecendo, já temos integrados várias prefeituras e essa é a que está dando mais trabalho.(Pelo menos até agora)

    1) Pelo manual do ABRASF a tag Signature da RPS não é obrigatório, pelo menos é o que eu entendi no manual aonde indica:

    TcRPS|  Signature| Tipo | dsig:Signature | Ocorrência 0- 1.

    página 27 do manual de integração de BH - Link do Manual de BH , se eu não assinar a RPS, a seguinte mensagem é retornada pelo web service de teste de BH:

    <?xml version="1.0" encoding="UTF-8"?>
    
    -<GerarNfseResposta xmlns="http://www.abrasf.org.br/nfse.xsd">
    
    <NumeroLote>427931</NumeroLote>
    
    <DataRecebimento>2014-11-07T13:43:28</DataRecebimento>
    
    <Protocolo>SS1291489u140311EKNRWiRD</Protocolo>
    
    -<ListaMensagemRetornoLote>
    
    -<MensagemRetorno>
    
    -<IdentificacaoRps>
    
    <Numero>427931</Numero>
    
    <Serie>01</Serie>
    
    <Tipo>1</Tipo>
    
    </IdentificacaoRps>
    
    <Codigo>E176</Codigo>
    
    <Mensagem>Rps sem assinatura.</Mensagem>
    
    </MensagemRetorno>
    
    </ListaMensagemRetornoLote>
    
    </GerarNfseResposta>

    Agora se eu assinar a RPS e tentar a emissão, ele de cara me retorna "XML com erro na assinatura", mas não entendo  o porque, da mesma forma que assinei o Lote, estou assinando a RPS, e da mesma forma assinamos as outras prefeituras que temos homologado.

    Retorno de quando a tag InfRPS é assinada:

    <?xml version='1.0' encoding='UTF-8'?><GerarNfseResposta xmlns="http://www.abrasf.org.br/nfse.xsd"><ListaMensagemRetorno>
    <MensagemRetorno><Codigo>E174</Codigo>
    <Mensagem>Arquivo enviado com erro na assinatura.</Mensagem></MensagemRetorno></ListaMensagemRetorno></GerarNfseResposta>

    Segue o código dos dois XMLs, um com assinatura na tag InfRps e o outro sem a assinatura nesta tag.

    <?xml version="1.0" encoding="UTF-8"?>
    
    -<GerarNfseEnvio xmlns="http://www.abrasf.org.br/nfse.xsd">
    
    
    -<LoteRps versao="1.00" Id="Lote-427931">
    
    <NumeroLote>427931</NumeroLote>
    
    <Cnpj>000000000</Cnpj>
    
    <InscricaoMunicipal>000000000</InscricaoMunicipal>
    
    <QuantidadeRps>1</QuantidadeRps>
    
    -<ListaRps>
    
    -<Rps>
    
    -<InfRps Id="Rps-427931">
    
    -<IdentificacaoRps>
    
    <Numero>427931</Numero>
    
    <Serie>01</Serie>
    
    <Tipo>1</Tipo>
    
    </IdentificacaoRps>
    
    <DataEmissao>2014-11-7T00:00:00</DataEmissao>
    
    <NaturezaOperacao>1</NaturezaOperacao>
    
    <OptanteSimplesNacional>2</OptanteSimplesNacional>
    
    <IncentivadorCultural>2</IncentivadorCultural>
    
    <Status>1</Status>
    
    -<Servico>
    
    -<Valores>
    
    <ValorServicos>100.00</ValorServicos>
    
    <ValorDeducoes>0.00</ValorDeducoes>
    
    <ValorPis>0.00</ValorPis>
    
    <ValorCofins>0.00</ValorCofins>
    
    <ValorInss>0.00</ValorInss>
    
    <ValorCsll>0.00</ValorCsll>
    
    <IssRetido>2</IssRetido>
    
    <ValorIss>5.00</ValorIss>
    
    <OutrasRetencoes>0</OutrasRetencoes>
    
    <BaseCalculo>100.00</BaseCalculo>
    
    <Aliquota>0.05</Aliquota>
    
    <ValorLiquidoNfse>99.95</ValorLiquidoNfse>
    
    </Valores>
    
    <ItemListaServico>17.01</ItemListaServico>
    
    <CodigoTributacaoMunicipio>170100288</CodigoTributacaoMunicipio>
    
    <Discriminacao>Discriminacao do serviço</Discriminacao>
    
    <CodigoMunicipio>3106200</CodigoMunicipio>
    
    </Servico>
    
    -<Prestador>
    
    <Cnpj>0000000000</Cnpj>
    
    <InscricaoMunicipal>0000000</InscricaoMunicipal>
    
    </Prestador>
    
    -<Tomador>
    
    -<IdentificacaoTomador>
    
    -<CpfCnpj>
    
    <Cnpj>999999999</Cnpj>
    
    </CpfCnpj>
    
    </IdentificacaoTomador>
    
    <RazaoSocial>Porto Edificacoes Ltda</RazaoSocial>
    
    -<Endereco>
    
    <Endereco>Rua Conselheiro Lafaiete, 2099 sl 401</Endereco>
    
    <Numero>0</Numero>
    
    <Bairro>Centro</Bairro>
    
    <CodigoMunicipio>3106200</CodigoMunicipio>
    
    <Uf>MG</Uf>
    
    <Cep>31035560</Cep>
    
    </Endereco>
    
    </Tomador>
    
    </InfRps>
    
    -<Signature xmlns="http://www.w3.org/2000/09/xmldsig#" Id="Ass_Rps-427931">
    
    -<SignedInfo>
    
    <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
    
    <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
    
    
    -<Reference URI="#Rps-427931">
    
    
    -<Transforms>
    
    <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
    
    <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
    
    </Transforms>
    
    <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
    
    <DigestValue>oxxhyrzA/6/2S/hwq2b3pFE00K8=</DigestValue>
    
    </Reference>
    
    </SignedInfo>
    
    <SignatureValue>HkdXIu/1b6l1xc84dNzNJoIl2ASNXOmIS3KmPFhGmUCsMrOLF2/Kogkt2TqgVM6ZeQde4o7WX5/hFUXcfZYA2D4nZpkU9m1UYmpBRQhD7J1KEYcgAaOFvykMCDvq9rZoxJH6S5u3Dsi1Dur5p7JGCpZB/y6rWu/t/4f0MnW+yCYsgLSlX/hPR4193/mLQmyAGGoQSouedTccuYt3eLZ4K1asylPgWOyk43S1/TEY3wpPj1KagEHbZre6knqLF95/ZG0on19JtZq7My1pEC8KKDmxGcX04AAbQo7NRKBnadocMxwFgizhIMIhbMrLGEBqIXfL7HXigr5YMPEYGIrR/Q==</SignatureValue>
    
    
    -<KeyInfo>
    
    
    -<X509Data>
    
    <X509Certificate>MIIIZjCCBk6gAwIBAgIQbzqZf1byuxtSZju4dLTaDDANBgkqhkiG9w0BAQsFADB4MQswCQYDVQQGEwJCUjETMBEGA1UEChMKSUNQLUJyYXNpbDE2MDQGA1UECxMtU2VjcmV0YXJpYSBkYSBSZWNlaXRhIEZlZGVyYWwgZG8gQnJhc2lsIC0gUkZCMRwwGgYDVQQDExNBQyBDZXJ0aXNpZ24gUkZCIEc0MB4XDTE0MDYxODAwMDAwMFoXDTE1MDYxNzIzNTk1OVowggEAMQswCQYDVQQGEwJCUjETMBEGA1UEChQKSUNQLUJyYXNpbDELMAkGA1UECBMCUkoxFzAVBgNVBAcUDlJJTyBERSBKQU5FSVJPMTYwNAYDVQQLFC1TZWNyZXRhcmlhIGRhIFJlY2VpdGEgRmVkZXJhbCBkbyBCcmFzaWwgLSBSRkIxFjAUBgNVBAsUDVJGQiBlLUNOUEogQTExITAfBgNVBAsUGEF1dGVudGljYWRvIHBvciBBUiBJU0lHTjFDMEEGA1UEAxM6QlZRSSBETyBCUkFTSUwgU09DSUVEQURFIENFUlRJRklDQURPUkEgTFREQTo3MjM2ODAxMjAwMDE4NDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAIahGfGT7Nkl5//whit4lJa45VPXOHsBvwi2fC8eCVNvyAJBUPpqznYVOIQ/0rYjlMGQ3mFZ3MYDT6MDg7qVgar5F7ocYKRjD93FO/HNztYjqPlQg1AGizkRtSq26YX9C/ahGJa0qS7AEBVFOiSJK6knpEK0TCKlxYenwrq3Q1FK3RdRyCpkcXksnCMkXLgVdHQ7qNGhNhpUzyfxwY1zM4h6IwR8RAsSEPjsQUZ1YhdLUchab+i+3DszG5hoyU6xuTDIe370RExIBRW9pYyEjzW+rFAnLbFnjcPVkcdidTyvPhfSdGAoSnC2K5Enhu7cwG5hbuXa9zpeg1ae6+mRlCUCAwEAAaOCA2AwggNcMIHFBgNVHREEgb0wgbqgPQYFYEwBAwSgNAQyMTMwNDE5NzgwNzg5MjUxODc2MjAwMDAwMDAwMDAwMDAwMDAwMDc3NjE1ODk2SUZQUkqgHwYFYEwBAwKgFgQUU0FORFJPIERFIExVQ0EgSk9SR0WgGQYFYEwBAwOgEAQONzIzNjgwMTIwMDAxODSgFwYFYEwBAwegDgQMMDAwMDAwMDAwMDAwgSRtZXJjaW8uc29icmluaG9AYnIuYnVyZWF1dmVyaXRhcy5jb20wCQYDVR0TBAIwADAfBgNVHSMEGDAWgBQukerWbeWyWYLcOIUpdjQWVjzQPjAOBgNVHQ8BAf8EBAMCBeAwfwYDVR0gBHgwdjB0BgZgTAECAQwwajBoBggrBgEFBQcCARZcaHR0cDovL2ljcC1icmFzaWwuY2VydGlzaWduLmNvbS5ici9yZXBvc2l0b3Jpby9kcGMvQUNfQ2VydGlzaWduX1JGQi9EUENfQUNfQ2VydGlzaWduX1JGQi5wZGYwggEWBgNVHR8EggENMIIBCTBXoFWgU4ZRaHR0cDovL2ljcC1icmFzaWwuY2VydGlzaWduLmNvbS5ici9yZXBvc2l0b3Jpby9sY3IvQUNDZXJ0aXNpZ25SRkJHNC9MYXRlc3RDUkwuY3JsMFagVKBShlBodHRwOi8vaWNwLWJyYXNpbC5vdXRyYWxjci5jb20uYnIvcmVwb3NpdG9yaW8vbGNyL0FDQ2VydGlzaWduUkZCRzQvTGF0ZXN0Q1JMLmNybDBWoFSgUoZQaHR0cDovL3JlcG9zaXRvcmlvLmljcGJyYXNpbC5nb3YuYnIvbGNyL0NlcnRpc2lnbi9BQ0NlcnRpc2lnblJGQkc0L0xhdGVzdENSTC5jcmwwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMEMIGbBggrBgEFBQcBAQSBjjCBizBfBggrBgEFBQcwAoZTaHR0cDovL2ljcC1icmFzaWwuY2VydGlzaWduLmNvbS5ici9yZXBvc2l0b3Jpby9jZXJ0aWZpY2Fkb3MvQUNfQ2VydGlzaWduX1JGQl9HNC5wN2MwKAYIKwYBBQUHMAGGHGh0dHA6Ly9vY3NwLmNlcnRpc2lnbi5jb20uYnIwDQYJKoZIhvcNAQELBQADggIBAGGnFLeKxB33tj4ItxopszXPpklyYpdehL9GKgLtWQU98JJCcKD4ygJ8x8k27JN6Jo1yB4WhwjwI92qXckn0NPqnWrw4eHizlDeTuilocV8n+1eFtjwbrB0wr+6dTFUNznAxY+nMVBkhHfSVUenYrf4INT2dcC3yZ5SXL7KLPfykdsmtpRsjI0ogxDZDcTxA0s7fX/IwqZ4JiP/LkFC3LKC20dy3cIBKG6qCs8SKMnGkORNDk+FvCjcG7ICjLKRjk85qh5nYXKrQI4EmMRqYY0xbnpwAe7u9bWyMP5Cht/vL0NewQtA59u5Yec17zQw50eBgMc65nOoHAa+cUk0JvW54TaqWlYlUm9pftITwKhUAAvpIVsb1rkfIg6un1S69LvkZeUyc2p+0c+4dI7aaBcnc45M2/vRvBqV5HZejlA4rgTcr5i819j06H7cb83EIwVpKG++7oEo+PaNJntVs2URaus7PxHnU6C4aSNmjCt6f39CQ+RPauaggMDTX8b6XPyhPbEYCxbznH0ma427tiPxflT4Q2yh+Aosn5dmkkQmdA10Vqtnz6EhrHGz4OggQ8J7JYJn4PyDTxSjuSKEQGL8fq7s4oVk288+UqX5Hq/NIizNs04HwzLmQqZVkRlSjt+01jkJhWGvhtFaRFdDGXzWwql7jEZ/vw7uL0r17j9fy</X509Certificate>
    
    </X509Data>
    
    </KeyInfo>
    
    </Signature>
    
    </Rps>
    
    </ListaRps>
    
    </LoteRps>
    
    
    -<Signature xmlns="http://www.w3.org/2000/09/xmldsig#" Id="Ass_Lote-427931">
    
    
    -<SignedInfo>
    
    <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
    
    <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
    
    
    -<Reference URI="#Lote-427931">
    
    
    -<Transforms>
    
    <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
    
    <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
    
    </Transforms>
    
    <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
    
    <DigestValue>xCNOq4IR3isv+F7RdtRvEpI8KNY=</DigestValue>
    
    </Reference>
    
    </SignedInfo>
    
    <SignatureValue>Q040cSXjSb/MDmEWVx0QeHMZVXgu5DqC6crxTZsKcSqLEpyxItoRCPnNcdiT0IZ8e54QPVtNaT604gtPXmnXbPpm5Z5goSFpVZUpeDi2tbLffuJ3rXBRdACuOLtL7wu7u6oTbWkY+cVtgKnVmA5DEA7E3twfGc3B4HQqu5JXyPqvxKswJkcQ7KjVetW1IOWUcFqeJQESzCJvueDFf8AfEVz0HoLp3SsYyRcNkVbGoy6XRO1GO+O8zrt5AjMgVBK++NGPgZUqdcuM9mBsAbJIWHvTNjSVX3upXdPCmDh2AJIcYodpnX7qFhxLlJzYy3CxJvQ48B15aDFuPN6vJZfJmw==</SignatureValue>
    
    
    -<KeyInfo>
    
    
    -<X509Data>
    
    <X509Certificate>MIIIZjCCBk6gAwIBAgIQbzqZf1byuxtSZju4dLTaDDANBgkqhkiG9w0BAQsFADB4MQswCQYDVQQGEwJCUjETMBEGA1UEChMKSUNQLUJyYXNpbDE2MDQGA1UECxMtU2VjcmV0YXJpYSBkYSBSZWNlaXRhIEZlZGVyYWwgZG8gQnJhc2lsIC0gUkZCMRwwGgYDVQQDExNBQyBDZXJ0aXNpZ24gUkZCIEc0MB4XDTE0MDYxODAwMDAwMFoXDTE1MDYxNzIzNTk1OVowggEAMQswCQYDVQQGEwJCUjETMBEGA1UEChQKSUNQLUJyYXNpbDELMAkGA1UECBMCUkoxFzAVBgNVBAcUDlJJTyBERSBKQU5FSVJPMTYwNAYDVQQLFC1TZWNyZXRhcmlhIGRhIFJlY2VpdGEgRmVkZXJhbCBkbyBCcmFzaWwgLSBSRkIxFjAUBgNVBAsUDVJGQiBlLUNOUEogQTExITAfBgNVBAsUGEF1dGVudGljYWRvIHBvciBBUiBJU0lHTjFDMEEGA1UEAxM6QlZRSSBETyBCUkFTSUwgU09DSUVEQURFIENFUlRJRklDQURPUkEgTFREQTo3MjM2ODAxMjAwMDE4NDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAIahGfGT7Nkl5//whit4lJa45VPXOHsBvwi2fC8eCVNvyAJBUPpqznYVOIQ/0rYjlMGQ3mFZ3MYDT6MDg7qVgar5F7ocYKRjD93FO/HNztYjqPlQg1AGizkRtSq26YX9C/ahGJa0qS7AEBVFOiSJK6knpEK0TCKlxYenwrq3Q1FK3RdRyCpkcXksnCMkXLgVdHQ7qNGhNhpUzyfxwY1zM4h6IwR8RAsSEPjsQUZ1YhdLUchab+i+3DszG5hoyU6xuTDIe370RExIBRW9pYyEjzW+rFAnLbFnjcPVkcdidTyvPhfSdGAoSnC2K5Enhu7cwG5hbuXa9zpeg1ae6+mRlCUCAwEAAaOCA2AwggNcMIHFBgNVHREEgb0wgbqgPQYFYEwBAwSgNAQyMTMwNDE5NzgwNzg5MjUxODc2MjAwMDAwMDAwMDAwMDAwMDAwMDc3NjE1ODk2SUZQUkqgHwYFYEwBAwKgFgQUU0FORFJPIERFIExVQ0EgSk9SR0WgGQYFYEwBAwOgEAQONzIzNjgwMTIwMDAxODSgFwYFYEwBAwegDgQMMDAwMDAwMDAwMDAwgSRtZXJjaW8uc29icmluaG9AYnIuYnVyZWF1dmVyaXRhcy5jb20wCQYDVR0TBAIwADAfBgNVHSMEGDAWgBQukerWbeWyWYLcOIUpdjQWVjzQPjAOBgNVHQ8BAf8EBAMCBeAwfwYDVR0gBHgwdjB0BgZgTAECAQwwajBoBggrBgEFBQcCARZcaHR0cDovL2ljcC1icmFzaWwuY2VydGlzaWduLmNvbS5ici9yZXBvc2l0b3Jpby9kcGMvQUNfQ2VydGlzaWduX1JGQi9EUENfQUNfQ2VydGlzaWduX1JGQi5wZGYwggEWBgNVHR8EggENMIIBCTBXoFWgU4ZRaHR0cDovL2ljcC1icmFzaWwuY2VydGlzaWduLmNvbS5ici9yZXBvc2l0b3Jpby9sY3IvQUNDZXJ0aXNpZ25SRkJHNC9MYXRlc3RDUkwuY3JsMFagVKBShlBodHRwOi8vaWNwLWJyYXNpbC5vdXRyYWxjci5jb20uYnIvcmVwb3NpdG9yaW8vbGNyL0FDQ2VydGlzaWduUkZCRzQvTGF0ZXN0Q1JMLmNybDBWoFSgUoZQaHR0cDovL3JlcG9zaXRvcmlvLmljcGJyYXNpbC5nb3YuYnIvbGNyL0NlcnRpc2lnbi9BQ0NlcnRpc2lnblJGQkc0L0xhdGVzdENSTC5jcmwwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMEMIGbBggrBgEFBQcBAQSBjjCBizBfBggrBgEFBQcwAoZTaHR0cDovL2ljcC1icmFzaWwuY2VydGlzaWduLmNvbS5ici9yZXBvc2l0b3Jpby9jZXJ0aWZpY2Fkb3MvQUNfQ2VydGlzaWduX1JGQl9HNC5wN2MwKAYIKwYBBQUHMAGGHGh0dHA6Ly9vY3NwLmNlcnRpc2lnbi5jb20uYnIwDQYJKoZIhvcNAQELBQADggIBAGGnFLeKxB33tj4ItxopszXPpklyYpdehL9GKgLtWQU98JJCcKD4ygJ8x8k27JN6Jo1yB4WhwjwI92qXckn0NPqnWrw4eHizlDeTuilocV8n+1eFtjwbrB0wr+6dTFUNznAxY+nMVBkhHfSVUenYrf4INT2dcC3yZ5SXL7KLPfykdsmtpRsjI0ogxDZDcTxA0s7fX/IwqZ4JiP/LkFC3LKC20dy3cIBKG6qCs8SKMnGkORNDk+FvCjcG7ICjLKRjk85qh5nYXKrQI4EmMRqYY0xbnpwAe7u9bWyMP5Cht/vL0NewQtA59u5Yec17zQw50eBgMc65nOoHAa+cUk0JvW54TaqWlYlUm9pftITwKhUAAvpIVsb1rkfIg6un1S69LvkZeUyc2p+0c+4dI7aaBcnc45M2/vRvBqV5HZejlA4rgTcr5i819j06H7cb83EIwVpKG++7oEo+PaNJntVs2URaus7PxHnU6C4aSNmjCt6f39CQ+RPauaggMDTX8b6XPyhPbEYCxbznH0ma427tiPxflT4Q2yh+Aosn5dmkkQmdA10Vqtnz6EhrHGz4OggQ8J7JYJn4PyDTxSjuSKEQGL8fq7s4oVk288+UqX5Hq/NIizNs04HwzLmQqZVkRlSjt+01jkJhWGvhtFaRFdDGXzWwql7jEZ/vw7uL0r17j9fy</X509Certificate>
    
    </X509Data>
    
    </KeyInfo>
    
    </Signature>
    
    </GerarNfseEnvio>

    XML Sem Assinatura na InfRPS:

    <?xml version="1.0" encoding="UTF-8"?>
    
    -<GerarNfseEnvio xmlns="http://www.abrasf.org.br/nfse.xsd">
    
    -<LoteRps versao="1.00" Id="Lote-427931">
    
    <NumeroLote>427931</NumeroLote>
    
    <Cnpj>00000000000</Cnpj>
    
    <InscricaoMunicipal>000000000</InscricaoMunicipal>
    
    <QuantidadeRps>1</QuantidadeRps>
    
    -<ListaRps>
    
    -<Rps>
    
    -<InfRps Id="Rps-427931">
    
    -<IdentificacaoRps>
    
    <Numero>427931</Numero>
    
    <Serie>01</Serie>
    
    <Tipo>1</Tipo>
    
    </IdentificacaoRps>
    
    <DataEmissao>2014-11-7T00:00:00</DataEmissao>
    
    <NaturezaOperacao>1</NaturezaOperacao>
    
    <OptanteSimplesNacional>2</OptanteSimplesNacional>
    
    <IncentivadorCultural>2</IncentivadorCultural>
    
    <Status>1</Status>
    
    -<Servico>
    
    -<Valores>
    
    <ValorServicos>100.00</ValorServicos>
    
    <ValorDeducoes>0.00</ValorDeducoes>
    
    <ValorPis>0.00</ValorPis>
    
    <ValorCofins>0.00</ValorCofins>
    
    <ValorInss>0.00</ValorInss>
    
    <ValorCsll>0.00</ValorCsll>
    
    <IssRetido>2</IssRetido>
    
    <ValorIss>5.00</ValorIss>
    
    <OutrasRetencoes>0</OutrasRetencoes>
    
    <BaseCalculo>100.00</BaseCalculo>
    
    <Aliquota>0.05</Aliquota>
    
    <ValorLiquidoNfse>99.95</ValorLiquidoNfse>
    
    </Valores>
    
    <ItemListaServico>17.01</ItemListaServico>
    
    <CodigoTributacaoMunicipio>170100288</CodigoTributacaoMunicipio>
    
    <Discriminacao>Discriminacao do serviço</Discriminacao>
    
    <CodigoMunicipio>3106200</CodigoMunicipio>
    
    </Servico>
    
    -<Prestador>
    
    <Cnpj>0000000000</Cnpj>
    
    <InscricaoMunicipal>0000000</InscricaoMunicipal>
    
    </Prestador>
    
    -<Tomador>
    
    -<IdentificacaoTomador>
    
    -<CpfCnpj>
    
    <Cnpj>99999999</Cnpj>
    
    </CpfCnpj>
    
    </IdentificacaoTomador>
    
    <RazaoSocial>Porto Edificacoes Ltda</RazaoSocial>
    
    
    -<Endereco>
    
    <Endereco>Rua Conselheiro Lafaiete, 2099 sl 401</Endereco>
    
    <Numero>0</Numero>
    
    <Bairro>Centro</Bairro>
    
    <CodigoMunicipio>3106200</CodigoMunicipio>
    
    <Uf>MG</Uf>
    
    <Cep>31035560</Cep>
    
    </Endereco>
    
    </Tomador>
    
    </InfRps>
    
    </Rps>
    
    </ListaRps>
    
    </LoteRps>
    
    -<Signature xmlns="http://www.w3.org/2000/09/xmldsig#" Id="Ass_Lote-427931">
    
    -<SignedInfo>
    
    <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
    
    <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
    
    -<Reference URI="#Lote-427931">
    
    -<Transforms>
    
    <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
    
    <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
    
    </Transforms>
    
    <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
    
    <DigestValue>HHgC0wz0KYW34hk8tauh2exzmdI=</DigestValue>
    
    </Reference>
    
    </SignedInfo>
    
    <SignatureValue>BjcabOQ1OF9d7P2RsVhM+0bu+nHAvDNC4hErb498BFOc7c9rJxQg5KoZw1+X+clNWYhlUy8CKq2nlyZ/eUGcBYKOzHLHUm23z9UkvgKI0y5fPWnWq0Cz9ktJaEPJP3BAP/GnQQq0GXshZgOwgPw35SEAP1jsou/GYfJJPMrWSzn/pgl1GvGafsPJxSvrAXc2sggGev94bRfyn6xrmNBRe1aenXzEpaCVQygH+6uR5nRE9xXezKKtjxI+xaRdcCnjyii98YNfm926AWpD+t/wRhlPk6Zh9AddizwhAFLpyDtOcNgLJCgfpPKP27qg4FKZf8WZ961aKRuEOeo2o0ShtQ==</SignatureValue>
    
    
    -<KeyInfo>
    
    
    -<X509Data>
    
    <X509Certificate>MIIIZjCCBk6gAwIBAgIQbzqZf1byuxtSZju4dLTaDDANBgkqhkiG9w0BAQsFADB4MQswCQYDVQQGEwJCUjETMBEGA1UEChMKSUNQLUJyYXNpbDE2MDQGA1UECxMtU2VjcmV0YXJpYSBkYSBSZWNlaXRhIEZlZGVyYWwgZG8gQnJhc2lsIC0gUkZCMRwwGgYDVQQDExNBQyBDZXJ0aXNpZ24gUkZCIEc0MB4XDTE0MDYxODAwMDAwMFoXDTE1MDYxNzIzNTk1OVowggEAMQswCQYDVQQGEwJCUjETMBEGA1UEChQKSUNQLUJyYXNpbDELMAkGA1UECBMCUkoxFzAVBgNVBAcUDlJJTyBERSBKQU5FSVJPMTYwNAYDVQQLFC1TZWNyZXRhcmlhIGRhIFJlY2VpdGEgRmVkZXJhbCBkbyBCcmFzaWwgLSBSRkIxFjAUBgNVBAsUDVJGQiBlLUNOUEogQTExITAfBgNVBAsUGEF1dGVudGljYWRvIHBvciBBUiBJU0lHTjFDMEEGA1UEAxM6QlZRSSBETyBCUkFTSUwgU09DSUVEQURFIENFUlRJRklDQURPUkEgTFREQTo3MjM2ODAxMjAwMDE4NDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAIahGfGT7Nkl5//whit4lJa45VPXOHsBvwi2fC8eCVNvyAJBUPpqznYVOIQ/0rYjlMGQ3mFZ3MYDT6MDg7qVgar5F7ocYKRjD93FO/HNztYjqPlQg1AGizkRtSq26YX9C/ahGJa0qS7AEBVFOiSJK6knpEK0TCKlxYenwrq3Q1FK3RdRyCpkcXksnCMkXLgVdHQ7qNGhNhpUzyfxwY1zM4h6IwR8RAsSEPjsQUZ1YhdLUchab+i+3DszG5hoyU6xuTDIe370RExIBRW9pYyEjzW+rFAnLbFnjcPVkcdidTyvPhfSdGAoSnC2K5Enhu7cwG5hbuXa9zpeg1ae6+mRlCUCAwEAAaOCA2AwggNcMIHFBgNVHREEgb0wgbqgPQYFYEwBAwSgNAQyMTMwNDE5NzgwNzg5MjUxODc2MjAwMDAwMDAwMDAwMDAwMDAwMDc3NjE1ODk2SUZQUkqgHwYFYEwBAwKgFgQUU0FORFJPIERFIExVQ0EgSk9SR0WgGQYFYEwBAwOgEAQONzIzNjgwMTIwMDAxODSgFwYFYEwBAwegDgQMMDAwMDAwMDAwMDAwgSRtZXJjaW8uc29icmluaG9AYnIuYnVyZWF1dmVyaXRhcy5jb20wCQYDVR0TBAIwADAfBgNVHSMEGDAWgBQukerWbeWyWYLcOIUpdjQWVjzQPjAOBgNVHQ8BAf8EBAMCBeAwfwYDVR0gBHgwdjB0BgZgTAECAQwwajBoBggrBgEFBQcCARZcaHR0cDovL2ljcC1icmFzaWwuY2VydGlzaWduLmNvbS5ici9yZXBvc2l0b3Jpby9kcGMvQUNfQ2VydGlzaWduX1JGQi9EUENfQUNfQ2VydGlzaWduX1JGQi5wZGYwggEWBgNVHR8EggENMIIBCTBXoFWgU4ZRaHR0cDovL2ljcC1icmFzaWwuY2VydGlzaWduLmNvbS5ici9yZXBvc2l0b3Jpby9sY3IvQUNDZXJ0aXNpZ25SRkJHNC9MYXRlc3RDUkwuY3JsMFagVKBShlBodHRwOi8vaWNwLWJyYXNpbC5vdXRyYWxjci5jb20uYnIvcmVwb3NpdG9yaW8vbGNyL0FDQ2VydGlzaWduUkZCRzQvTGF0ZXN0Q1JMLmNybDBWoFSgUoZQaHR0cDovL3JlcG9zaXRvcmlvLmljcGJyYXNpbC5nb3YuYnIvbGNyL0NlcnRpc2lnbi9BQ0NlcnRpc2lnblJGQkc0L0xhdGVzdENSTC5jcmwwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMEMIGbBggrBgEFBQcBAQSBjjCBizBfBggrBgEFBQcwAoZTaHR0cDovL2ljcC1icmFzaWwuY2VydGlzaWduLmNvbS5ici9yZXBvc2l0b3Jpby9jZXJ0aWZpY2Fkb3MvQUNfQ2VydGlzaWduX1JGQl9HNC5wN2MwKAYIKwYBBQUHMAGGHGh0dHA6Ly9vY3NwLmNlcnRpc2lnbi5jb20uYnIwDQYJKoZIhvcNAQELBQADggIBAGGnFLeKxB33tj4ItxopszXPpklyYpdehL9GKgLtWQU98JJCcKD4ygJ8x8k27JN6Jo1yB4WhwjwI92qXckn0NPqnWrw4eHizlDeTuilocV8n+1eFtjwbrB0wr+6dTFUNznAxY+nMVBkhHfSVUenYrf4INT2dcC3yZ5SXL7KLPfykdsmtpRsjI0ogxDZDcTxA0s7fX/IwqZ4JiP/LkFC3LKC20dy3cIBKG6qCs8SKMnGkORNDk+FvCjcG7ICjLKRjk85qh5nYXKrQI4EmMRqYY0xbnpwAe7u9bWyMP5Cht/vL0NewQtA59u5Yec17zQw50eBgMc65nOoHAa+cUk0JvW54TaqWlYlUm9pftITwKhUAAvpIVsb1rkfIg6un1S69LvkZeUyc2p+0c+4dI7aaBcnc45M2/vRvBqV5HZejlA4rgTcr5i819j06H7cb83EIwVpKG++7oEo+PaNJntVs2URaus7PxHnU6C4aSNmjCt6f39CQ+RPauaggMDTX8b6XPyhPbEYCxbznH0ma427tiPxflT4Q2yh+Aosn5dmkkQmdA10Vqtnz6EhrHGz4OggQ8J7JYJn4PyDTxSjuSKEQGL8fq7s4oVk288+UqX5Hq/NIizNs04HwzLmQqZVkRlSjt+01jkJhWGvhtFaRFdDGXzWwql7jEZ/vw7uL0r17j9fy</X509Certificate>
    
    </X509Data>
    
    </KeyInfo>
    
    </Signature>
    
    </GerarNfseEnvio>

    A outra situação que está acontecendo é, eu tenho duas RPSs na fila, faço o envio de uma ok me retorna algum desses erros ou se a RPS foi convertida em Nfse, quando vou fazer o segundo envio da outra RPS, acontece uma exception: Could not create SSL/TLS secure channel, mas o estranho é que se parar a depuração e reiniciar após algum tempo, eu consigo me fazer a chamada para o ws novamente.

    Por favor se alguém tiver mais experiência com a nfse de BH e puder compartilhar, seria de grande ajuda!

    Grato desde já

    Alex Vargas.


    sexta-feira, 7 de novembro de 2014 16:43

Respostas

  • Bom dia pessoal!

    Infelizmente a solução que o José Geraldo passou, para mim não funcionou, vi em outros lugares que a solução seria essa mesma que ele passou, permitir todos os certificados (TrustAllCert), mas não consegui implementar.

    Para resolver o problema fiz o seguinte:

    -Primeiro verifiquei se havia algo de errado com o webservice de BH, utilizando uma ferramenta chamada SoapUi que faz conexão e testes com webservices, como estava tudo ok parti para outra forma de comunicação com o webservice.

    -Utilizei a classe HttpWebRequest para consumir o webservice, assim é necessário montar o envelope na mão.

    Agora funcionou perfeitamente faço várias requisições e não ocorre mais a falha de "could not establish trust relationship for the ssl/tls secure channel with authority". 

    Obrigado!

    Até mais.

    • Marcado como Resposta Alex Vargas terça-feira, 2 de dezembro de 2014 12:02
    • Não Marcado como Resposta Alex Vargas terça-feira, 2 de dezembro de 2014 12:02
    • Marcado como Resposta Alex Vargas terça-feira, 2 de dezembro de 2014 12:02
    terça-feira, 2 de dezembro de 2014 12:02

Todas as Respostas

  • Olá.

    Quanto ao primeiro erro, não posso te ajudar, pois eu não envio por RPS, somente por LOTE.

    Quanto ao segundo, ocorria muito comigo no início do projeto. Não sei como voce envia as informações à PBH. Eu utilizo os web services e eles funcionam normalmente. Eu optei por wcf. Utilizando WCF, eu implementei, após varias pesquisas, da seguinte forma. Crio a instancia da classe e depois fecho e seto para NULL.  Exemplo:

     WSNFSe = new WSEPBH.NFSe.PBHSvc.nfseClient();
    WSNFSe.ClientCredentials.ClientCertificate.Certificate = meucertX509;
    WSNFSe.Open();

    ...

    TrustAllCert ValCallback = new TrustAllCert();
    System.Net.ServicePointManager.ServerCertificateValidationCallback =
    new System.Net.Security.RemoteCertificateValidationCallback(ValCallback.OnValidationCallback);

    retorno = WSNFSe.RecepcionarLoteRps(_stringXmlCabec, _stringXml);

     if ((WSNFSe != null) && WSNFSe.State == System.ServiceModel.CommunicationState.Opened)
                        WSNFSe.Close();
                    WSNFSe = null;

    //Outra coisa foi utilizar as linhas acima (em negrito) para eliminar o erro Could not create SSL/TLS secure channel, 

    Veja abaixo como ficou o metodo completo, com try caty e finally

    private void ProcessaDados(string[] args)
    {
    ...
    System.Net.ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CertificateValidation);
    ...
    Executa_Envio_XML_NSE(...)
    ...
    }

            private void Executa_Envio_XML_NSE(ref string retorno, string _stringXmlCabec, string _stringXml, string codigoServico, bool chkValor)
            {
                try
                {
                    WSNFSe = new WSEPBH.NFSe.PBHSvc.nfseClient();

                    WSNFSe.ClientCredentials.ClientCertificate.Certificate = certX509;
                    WSNFSe.Open();

                    TrustAllCert ValCallback = new TrustAllCert();
                    System.Net.ServicePointManager.ServerCertificateValidationCallback =
                        new System.Net.Security.RemoteCertificateValidationCallback(ValCallback.OnValidationCallback);

                    switch (int.Parse(codigoServico))
                    {
                        case 1: //
                            retorno = WSNFSe.RecepcionarLoteRps(_stringXmlCabec, _stringXml);
                            break;
                        case 2:
                            retorno = WSNFSe.GerarNfse(_stringXmlCabec, _stringXml);
                            break;
                        case 3:
                            retorno = WSNFSe.ConsultarSituacaoLoteRps(_stringXmlCabec, _stringXml);
                            break;
                        case 4:
                            retorno = WSNFSe.ConsultarNfsePorRps(_stringXmlCabec, _stringXml);
                            break;
                        case 5:
                            retorno = WSNFSe.ConsultarNfse(_stringXmlCabec, _stringXml);
                            break;
                        case 6:
                            retorno = WSNFSe.ConsultarLoteRps(_stringXmlCabec, _stringXml);
                            break;
                        case 7:
                            retorno = WSNFSe.CancelarNfse(_stringXmlCabec, _stringXml);
                            break;
                    }
                    // grava o retorno em arquivo
    .... meus procedimento...
    ...
                }
                catch (Exception ex)
                {
                    if (ex.Message.ToLower().IndexOf("ssl/tls") != -1)
                    {
                        // Erro de conexão.
                        throw new EntryPointNotFoundException(ex.Message);
                    }
                    else
                    {
                        throw ex;
                    }
                }
                finally
                {
                    if ((WSNFSe != null) && WSNFSe.State == System.ServiceModel.CommunicationState.Opened)
                        WSNFSe.Close();
                    WSNFSe = null;
                }
            }

    #region CertificateValidation
            /// <summary>
            /// Responsável por retornar uma confirmação verdadeira para a proriedade ServerCertificateValidationCallback 
            /// da classe ServicePointManager para confirmar a solicitação SSL automaticamente.
            /// </summary>
            /// <returns>Retornará sempre true</returns>
            public bool CertificateValidation(object sender,
                X509Certificate certificate,
                X509Chain chain,
                SslPolicyErrors sslPolicyErros)
            {
                return true;
            }
            #endregion


    A forma de assinatura está ai abaixo:

            public XmlDocument Assinar(string mensagemXML, string _uri, string _Node, System.Security.Cryptography.X509Certificates.X509Certificate2 certificado)
            {
                msgResultado = "Assinatura realizada com sucesso";

                System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument();
                System.Security.Cryptography.RSACryptoServiceProvider Key = new System.Security.Cryptography.RSACryptoServiceProvider();
                System.Security.Cryptography.Xml.SignedXml SignedDocument = default(System.Security.Cryptography.Xml.SignedXml);
                System.Security.Cryptography.Xml.KeyInfo keyInfo = new System.Security.Cryptography.Xml.KeyInfo();
                xmlDoc.LoadXml(mensagemXML);
                //Retira chave privada ligada ao certificado
                Key = (System.Security.Cryptography.RSACryptoServiceProvider)certificado.PrivateKey;
                //Adiciona Certificado ao Key Info
                keyInfo.AddClause(new System.Security.Cryptography.Xml.KeyInfoX509Data(certificado));
                SignedDocument = new System.Security.Cryptography.Xml.SignedXml(xmlDoc);
                //Seta chaves
                SignedDocument.SigningKey = Key;
                SignedDocument.KeyInfo = keyInfo;
                // Cria referencia
                System.Security.Cryptography.Xml.Reference reference = new System.Security.Cryptography.Xml.Reference();
                reference.Uri = "#" + _uri;//string.Empty;
                // Adiciona transformacao a referencia
                reference.AddTransform(new System.Security.Cryptography.Xml.XmlDsigEnvelopedSignatureTransform());
                reference.AddTransform(new System.Security.Cryptography.Xml.XmlDsigC14NTransform(false));
                // Adiciona referencia ao xml
                SignedDocument.AddReference(reference);
                // Calcula Assinatura
                SignedDocument.ComputeSignature();
                // Pega representação da assinatura
                System.Xml.XmlElement xmlDigitalSignature = SignedDocument.GetXml();
                // Adiciona ao doc XML

                XmlElement xmlElement = xmlDoc.GetElementsByTagName(_Node)[0] as XmlElement;
                xmlElement.ParentNode.AppendChild(xmlDoc.ImportNode(xmlDigitalSignature, true)); 

                //xmlDoc.DocumentElement.AppendChild(xmlDoc.ImportNode(xmlDigitalSignature, true));
                return xmlDoc;
            }

    using System.Security.Cryptography.Xml;
    using System.Security.Cryptography.X509Certificates;
    using System.Net.Security;
    
     public class TrustAllCert
        {
            public TrustAllCert()
            {
            }
    
            public bool OnValidationCallback(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors errors)
            {
                return true;
            }
        }

    Espero que te auxilie.




    • Sugerido como Resposta Ricardo Barbosa Cortes segunda-feira, 10 de novembro de 2014 11:16
    • Editado Jose Geraldo quarta-feira, 19 de novembro de 2014 11:10 add classe TrustAllCert
    sábado, 8 de novembro de 2014 18:36
  • Bom dia Jose! 

    Obrigado pela ajuda vou testar a solução que me passou e ja dou um retorno!

    Mas sobre a primeira dúvida eu também envio como lote, mas como estava dando o problema de não conseguir realizar duas chamadas seguidas para o webservice, acabei utilizando o método de enviar a RPS individualmente, assim eu já tinha o retorno se ela foi convertida em nota ou não.

    E mesmo mandando como lote o webservice acusa erro na assinatura da RPS, a assinatura na tag Lote passa sem problemas.

    Como você assina as RPSs do Lote?

    No procedimento do sistema eu primeiro gero o trecho da ListaRPS e assino cada InfRPS que estará no Lote, depois no final assino o Lote, assim o XML fica igual ao do exemplo do site de BH, mas sempre acusa erro na Assinatura sempre que assino as RPSs.

    Encontrei na internet esse endereço Receita fazenda validar assinatura. , que serve para validar assinatura digital, e mando um lote com uma RPS apenas, nessa aplicação quando tento validar a assinatura do documento que estou gerando, a assinatura da RPS consta como inválida, e a assinatura do Lote consta como válida, o que eu acho estranho é como uma assinatura é válida e a outra inválida, se eu uso o mesmo método para realizar a assinatura, inclusive bem parecido com o que você postou aqui para nós.

    Se puder por favor dar mais detalhes de como você gera o xml para envio de BH, e assina cada RPS do Lote seria de grande ajuda!

    Obrigado!

    Método utilizado por nós para assinatura da RPS.

    public string Assinar(string XMLString, string RefUri, X509Certificate2 _X509Cert, object id, bool assinarTagSignature = false)
            {
                string xmlResultado = string.Empty;
                try
                {
                    string x;
                    x = _X509Cert.GetKeyAlgorithm().ToString();
                    //Create a new XML document.
                    XmlDocument doc = new XmlDocument();
                    //Format the document to ignore white spaces.
                    doc.PreserveWhitespace = false;
                    //Load the passed XML file using it's name.
                    try
                    {
                        try
                        {
                            doc.LoadXml(XMLString);
                        }
                        catch
                        {
                            sResultado = XMLString;
                            throw new Exception("erro ao ler");
                        }
    
                        //Verifica se a tag a ser assinada existe é única
                        int qtdeRefUri = doc.GetElementsByTagName(RefUri).Count;
                        if (qtdeRefUri == 0)
                        {
                            //a URI indicada não existe
                            iResultado = 4;
                            sResultado = "A tag de assinatura " + RefUri.Trim() + " inexiste";
    
                        }
                        //Exsiste mais de uma tag a ser assinada
                        else
                        {
                            if (qtdeRefUri > 1)
                            {
                                //Existe mais de uma URI indicada
                                iResultado = 5;
                                sResultado = "A tag de assinatura " + RefUri.Trim() + " não é unica";
                            }
                            else
                            {
                                try
                                {
                                    //Create a SignedXml object.
                                    SignedXml signedXml = new SignedXml(doc);
    
    
                                    //Add the key to the SignedXml document 
                                    signedXml.SigningKey = _X509Cert.PrivateKey;
                                    //Create a reference to be signed
                                    Reference reference = new Reference();
                                    //pega o uri que deve ser assinada
                                    XmlAttributeCollection tagUri = doc.GetElementsByTagName(RefUri).Item(0).Attributes;
                                    
                                    if (id.ToString() != "0")
                                        foreach (XmlAttribute _atributo in tagUri)
                                        {
                                            if (_atributo.Name == "Id")
                                            {
                                                reference.Uri = "#" + _atributo.InnerText;
                                            }
                                        }
                                    else
                                    reference.Uri = ""; 
    
                                    /*
                                    foreach (XmlAttribute _atributo in tagUri)
                                    {
                                        
                                        if (_atributo.Name == "Id")
                                        {
                                            reference.Uri = "#" + _atributo.InnerText;
                                        }
                                    }
                                    */
    
                                    //Add an enveloped transformation to the reference.
                                    XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform();
                                    reference.AddTransform(env);
                                    XmlDsigC14NTransform c14 = new XmlDsigC14NTransform();
                                    reference.AddTransform(c14);
                                    //Add the reference to the SignedXml object.
                                    signedXml.AddReference(reference);
                                    //Create a new KeyInfo object
                                    KeyInfo keyInfo = new KeyInfo();
                                    //Load the certificate into a KeyInfoX509Data object
                                    //and add it to the KeyInfo object.
                                    keyInfo.AddClause(new KeyInfoX509Data(_X509Cert));
                                    //Add the KeyInfo object to the SignedXml object.
                                    signedXml.KeyInfo = keyInfo;
                                    
    
    
                                    signedXml.ComputeSignature();
                                    //Get the XML representation of the signature and save
                                    //it to an XmlElement object.
                                    XmlElement xmlDigitalSignature = signedXml.GetXml();
    
                                    
                                    if (assinarTagSignature)
                                    xmlDigitalSignature.SetAttribute("Id", "Ass_" + id.ToString());
    
                                    //Append the element to the XML document.
                                    doc.DocumentElement.AppendChild(doc.ImportNode(xmlDigitalSignature, true));
                                    XmlDocument XMLDoc = new XmlDocument();
                                    XMLDoc.PreserveWhitespace = false;
                                    XMLDoc = doc;
    
                                    xmlResultado = XMLDoc.InnerXml;
    
                                }
    
                                catch (Exception caught)
                                {
    
                                    iResultado = 7;
    
                                    sResultado = "Erro: Ao assinar o documento - " + caught.Message;
    
                                }
    
                            }
    
                        }
    
                    }
    
                    catch (Exception caught)
                    {
    
                        iResultado = 3;
    
                        sResultado = "XML mal formado - " + caught.Message + " " + XMLString;
    
                    }
    
                }
    
                catch (Exception caught)
                {
    
                    iResultado = 1;
    
                    sResultado = sResultado = "Problemas na seleção do certificado digital: " + caught.Message;
    
                }
    
                sResultado = "Arquivo Assinado Com Sucesso";
    
                return xmlResultado;
    
            }

    segunda-feira, 10 de novembro de 2014 12:35
  • Olá.

    a forma de assinatura é:  assinar o "infrps"  e  depois "loterps".

    Verificando os xmls:

    Meu xml: <LoteRps Id="000000000000549" versao="1.00">

    seu xml: <LoteRps versao="1.00" Id="Lote-427931">

    Meu xml: <InfRps Id="00000000549">

    seu xml: <InfRps Id="Rps-427931">

    Eu verifiquei os dois arquivos e vi somente uma diferença na a assinatura do lote:

    Minha assinatura:  <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">   

    sua assinatura: <Signature xmlns="http://www.w3.org/2000/09/xmldsig#" Id="Ass_Lote-427931">

    att

    segunda-feira, 10 de novembro de 2014 17:32
  • Boa tarde Alex, também estou envolvido com NFS-e, e não consigo de jeito nehum consumir o web service de Belo Horizonte, sempre me retorna um erro de cabeçalho invalido, gostaria de saber como você está enviando esse cabeçalho ?

    http://luisgustavo12.wordpress.com/

    segunda-feira, 10 de novembro de 2014 17:57
  • Boa tarde Alex, também estou envolvido com NFS-e, e não consigo de jeito nehum consumir o web service de Belo Horizonte, sempre me retorna um erro de cabeçalho invalido, gostaria de saber como você está enviando esse cabeçalho ?

    http://luisgustavo12.wordpress.com/

    Bom dia Luis, eu uso essa function para retornar o cabeçalho quando estou fazendo o envio.

    public string Cabecalho()
            {
                StringBuilder cabecalho = new StringBuilder();
                cabecalho.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
                cabecalho.Append("<cabecalho xmlns=\"http://www.abrasf.org.br/nfse.xsd\" ");
                cabecalho.Append("versao=\"1.0\">");
                cabecalho.Append("<versaoDados>1.0</versaoDados>");
                cabecalho.Append("</cabecalho>");
                return cabecalho.ToString();
            }


    E na hora de consumir algum método que peça como parâmetro o cabeçalho apenas chamo a function dentro do método: 

    <ObjetoInstanciaWS>.RecepcionarLoteRps(Cabecalho(), xmlEnvio);

    Espero ter ajudado.

    Att.


    terça-feira, 11 de novembro de 2014 11:57
  • Boa tarde José! Estou tentando utilizar aquele método que você utiliza para a assinatura, porém ocorre uma exception na linha  SignedDocument.ComputeSignature();

    Me retorna "MalFormed document".

    Quais parâmetros você informa?

    Estou informando: o Xml abaixo primeiro; depois em _uri informo "InfRps", _Node informo "Rps", e por último o certificado.

    public XmlDocument AssinarNovaBH(string mensagemXML, string _uri, string _Node, System.Security.Cryptography.X509Certificates.X509Certificate2 certificado)

    Obrigado pela ajuda!

    -<Rps>
    
    -<InfRps Id="Rps-427931">
    
    -<IdentificacaoRps>
    
    <Numero>427931</Numero>
    
    <Serie>01</Serie>
    
    <Tipo>1</Tipo>
    
    </IdentificacaoRps>
    
    <DataEmissao>2014-11-7T00:00:00</DataEmissao>
    
    <NaturezaOperacao>1</NaturezaOperacao>
    
    <OptanteSimplesNacional>2</OptanteSimplesNacional>
    
    <IncentivadorCultural>2</IncentivadorCultural>
    
    <Status>1</Status>
    
    -<Servico>
    
    -<Valores>
    
    <ValorServicos>100.00</ValorServicos>
    
    <ValorDeducoes>0.00</ValorDeducoes>
    
    <ValorPis>0.00</ValorPis>
    
    <ValorCofins>0.00</ValorCofins>
    
    <ValorInss>0.00</ValorInss>
    
    <ValorCsll>0.00</ValorCsll>
    
    <IssRetido>2</IssRetido>
    
    <ValorIss>5.00</ValorIss>
    
    <OutrasRetencoes>0</OutrasRetencoes>
    
    <BaseCalculo>100.00</BaseCalculo>
    
    <Aliquota>0.05</Aliquota>
    
    <ValorLiquidoNfse>99.95</ValorLiquidoNfse>
    
    </Valores>
    
    <ItemListaServico>17.01</ItemListaServico>
    
    <CodigoTributacaoMunicipio>170100288</CodigoTributacaoMunicipio>
    
    <Discriminacao>Desc Serv</Discriminacao>
    
    <CodigoMunicipio>3106200</CodigoMunicipio>
    
    </Servico>
    
    -<Prestador>
    
    <Cnpj>00000000000</Cnpj>
    
    <InscricaoMunicipal>00000000</InscricaoMunicipal>
    
    </Prestador>
    
    -<Tomador>
    
    -<IdentificacaoTomador>
    
    -<CpfCnpj>
    
    <Cnpj>07310874000194</Cnpj>
    
    </CpfCnpj>
    
    </IdentificacaoTomador>
    
    <RazaoSocial>Porto Edificacoes Ltda</RazaoSocial>
    
    -<Endereco>
    
    <Endereco>Rua Conselheiro Lafaiete, 2099 sl 401</Endereco>
    
    <Numero>0</Numero>
    
    <Bairro>Centro</Bairro>
    
    <CodigoMunicipio>3106200</CodigoMunicipio>
    
    <Uf>MG</Uf>
    
    <Cep>31035560</Cep>
    
    </Endereco>
    
    </Tomador>
    
    </InfRps>
    
    </Rps>

    terça-feira, 11 de novembro de 2014 16:55
  • Olá.

    os parametros passados são:

    O xml formado para envio do lote de RPS,  O numero da RPS, o node a ser assinado, o certificado.

    Obs: voce tem de assinar o infrps e depois tem de assinar o LoteRps.

    // assina o infrps
                _stringXml = this.AssinaXml(_stringXml, vDNumeroRps, "InfRps", certX509);

                // Assina o loterps
                _stringXml = this.AssinaXml(_stringXml, _tcLoteRps.Id, "LoteRps", certX509);

    Quanto ao xml formado, nesta thread, um pouco acima, já tem um exemplo do xml. o seu está diferente.

    att.

    domingo, 16 de novembro de 2014 18:58
  • Boa tarde José!

    Então, o xml estava correto e a forma da assinatura também, faltava apenas adicionar um atributo nas tags <LoteRps>, <InfRps> e <Rps>, deve ser informado o atributo xmlns="http://www.abrasf.org.br/nfse.xsd", dessa forma consegui fazer a emissão da Rps e ela foi convertida em Nfse com sucesso!

    Só aquele outro problema que você também enfrentou do erro Could not create SSL/TLS secure channel,  eu ainda não consegui resolver, para consumir o webservice, eu apenas adicionei o WebReference com o endereço do webservice, vou testar por meio do Wcf e dou um retorno. Mais uma coisa ali da solução que apresentou sobre esse problema, poderia disponibilizar essa classe TrustAllCert, ou a referencia dela, porque não consegui adicionar esse trecho do código, indica que falta alguma referencia.

    Muito obrigado pela ajuda!

    segunda-feira, 17 de novembro de 2014 16:21
  • Segue:
     using System.Security.Cryptography.Xml;
    using System.Security.Cryptography.X509Certificates;
    using System.Net.Security;

    public class TrustAllCert { public TrustAllCert() { } public bool OnValidationCallback(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors errors) { return true; } }

    att.
    • Editado Jose Geraldo quarta-feira, 19 de novembro de 2014 11:08 correção dos usings
    quarta-feira, 19 de novembro de 2014 11:07
  • Bom dia pessoal!

    Infelizmente a solução que o José Geraldo passou, para mim não funcionou, vi em outros lugares que a solução seria essa mesma que ele passou, permitir todos os certificados (TrustAllCert), mas não consegui implementar.

    Para resolver o problema fiz o seguinte:

    -Primeiro verifiquei se havia algo de errado com o webservice de BH, utilizando uma ferramenta chamada SoapUi que faz conexão e testes com webservices, como estava tudo ok parti para outra forma de comunicação com o webservice.

    -Utilizei a classe HttpWebRequest para consumir o webservice, assim é necessário montar o envelope na mão.

    Agora funcionou perfeitamente faço várias requisições e não ocorre mais a falha de "could not establish trust relationship for the ssl/tls secure channel with authority". 

    Obrigado!

    Até mais.

    • Marcado como Resposta Alex Vargas terça-feira, 2 de dezembro de 2014 12:02
    • Não Marcado como Resposta Alex Vargas terça-feira, 2 de dezembro de 2014 12:02
    • Marcado como Resposta Alex Vargas terça-feira, 2 de dezembro de 2014 12:02
    terça-feira, 2 de dezembro de 2014 12:02
  • Alex Vargas

        Você teria para me enviar a rotina da Consulta de Status do Web Service, e até mesmo o layout do seu cabeçario de envio para que possa comparar com o meu aqui, pois estou recebendo a seguinte mensagem de erro ?

    Erro principal
    
    "1SP_NFE_PL_006q242Rejeição: Cabeçalho - Falha no Schema XML352014-12-03T03:02:04"
    
    <?xml version="1.0" encoding="UTF-8"?>
    <nfeCabecMsg versao="2.00" xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2">
    <versaoDados>2.00</versaoDados>
    <cUF>SP</cUF>
    </nfeCabecMsg>
    

    quarta-feira, 3 de dezembro de 2014 11:22
  • neibala,

    não fiz essa estrutura de consultar o status do serviço, mas criei o status da nfe,

    <?xml version="1.0" encoding="UTF-8"?>
    <consSitNFe versao="2.01" xmlns "http://www.portalfiscal.inf.br/nf">
    <tpAmb>1</tpAmb>
    <xServ>CONSULTAR</xServ>
    <chNFe>N° da chave nfe</chNFe>
    </consSitNFe>

    o exemplo acima é a forma que consulto o status da nota,

    creio que algumas informações do seu xml estão incorretas,

    tente trocar a versão do cabeçalho para 2.01,na tag <cUF> utilize o codigo do estado ao inves da sigla, para SP o cod. é 35,não tenho certeza mas acho que o xmlns é sempre

    "http://www.portalfiscal.inf.br/nf"

    e o serviço solicitado é descrito na tag <xServ>.

    tente dessa forma, criei a estrutura de  manifesto, statussNfe, e downloadNFe e em todas situações utilizei desse procedimento.

    vale lembrar que desconheço essa estrutura que você está tentando criar, então fica ai minha dica, Boa sorte, e espero que ajude.

    quinta-feira, 4 de dezembro de 2014 11:07
  • Luis Gustavo

         Para tornar mais fácil, como você fez seu add reference serviço, pois até o momento não consegui, quando mando pelo web service framework 2.0, ele chega a pedir o certificado, seleciono o certificado, aparece o serviço, mostra o dados do serviço mais não habilitar, o add reference, como você fez no seu ?

    segunda-feira, 8 de dezembro de 2014 02:36
  • Boa tarde, você tem este sistema de envio de nfe para prefeitura de bh ?

    Poderia entrar em contato comigo: domicianoribeiro@hotmail.com

    quarta-feira, 18 de abril de 2018 14:04