Ir para conteúdo
  • Cadastre-se

dev botao

Problemas Ao Gerar E Enviar Lote E Nfse Rio De Janeiro


Ver Solução Respondido por Alexandre Trajano,
  • Este tópico foi criado há 4134 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Solution
Postado

Ítalo, boa tarde!

 

Segui as suas recomendações e baixei os fontes atualizados. Com os fontes atualizados, o arquivo env-lot.xml está com a mesma estrutura do arquivo da prefeitura do Rio de Janeiro enviada como exemplo(segue em anexo), porém o retorno é o mesmo, exibe a mensagem que diz que é uma assinatura inválida! Realmente já não sei o que fazer, estou desesperado pois o arquivo é gerado certinho comparando com o arquivo de exemplo da Prefeitura. O certificado que estou usando é o mesmo que utilizo para acessar a site da nota carioca e acessar o sistema!

 

Não seria de repente na hora de gera criptografar a assinatura possa está com algum problema? 

 

Uma outra coisa! Na alteração que você fez na unit ACBrNFSeUtil, função AssinarMSXML, você incluiu o proRJ na lista de provedor, mas ao gerar a assinatura para o lote é verificado se provedor é diferente de ProRecife, e como proRJ é diferente ele cai nesta linha xmldsig.signature := xmldoc.selectSingleNode('.//ds:Signature[@' + Identificador + '=AssLote_' + URI + ']'), só que para o ProRJ não há identificador AssLote_. Da forma que está ele me retorna mldsig.signature = nil e exibe a mensagemÉ preciso carregar o template antes de assinar." 

 

Então fiz a seguinte alteração:

if ALote

  then begin
    if (URI <> '') and ((AProvedor <> proRecife) and (AProvedor <> proRJ))
    then xmldsig.signature := xmldoc.selectSingleNode('.//ds:Signature[@' + Identificador + '=AssLote_' + URI + ']')
    else begin
     xmldsig.signature := xmldoc.selectSingleNode('.//ds1:' + EnviarLoteRps + '/ds:Signature');
    end;
  end
  else xmldsig.signature := xmldoc.selectSingleNode('.//ds:Signature');

 

Desta forma a  mldsig.signature não retorna nill.

 

OBS: Estou querendo fazer alguns tutoriais para as pessoas que estão começando a lidar com a geração de NFSe. Se não houver problemas como posso para contribuir com o Projeto ACBR!!

 

Ítalo, desculpe mais uma vez, mas realmente não estou encontrando solução, estou debugando todo o código para poder encontrar o motivo do provedor invalidar a assinatura! Se poder me ajudar novamente fico eternamente agradecido!!

 

 

Att.

Ítalo,

 

Consegui resolver a questão da assinatura! 

 

O problema estava no Schema nfse.xsd Versão 1.0. No manual da prefeitura do Rio de Janeiro informa que não é obrigatório assina o RPS ou Lote, porém no Schema diz que sim. O provedor só aceita a assinatura no Lote. Então fiz o seguinte:

 

<xsd:complexType name="tcRps">

        <xsd:sequence>

            <xsd:element name="InfRps" type="tcInfRps" minOccurs="1" maxOccurs="1"/>

            <xsd:element ref="dsig:Signature" minOccurs="0" maxOccurs="0" />

        </xsd:sequence>

    </xsd:complexType>

 

Na Unit ACBRProvedorRJ uma outra alteração:

 

function TProvedorRJ.GetConfigCidade(ACodCidade,
  AAmbiente: Integer): TConfigCidade;
var
 ConfigCidade: TConfigCidade;
begin
 ConfigCidade.VersaoSoap    := '1.1';
 ConfigCidade.Prefixo2      := '';
 ConfigCidade.Prefixo3      := '';
 ConfigCidade.Prefixo4      := '';
 ConfigCidade.Identificador := 'Id';
 
// if AAmbiente = 1
//  then ConfigCidade.NameSpaceEnvelope := 'http://notacarioca.rio.gov.br'
//  else ConfigCidade.NameSpaceEnvelope := 'http://homologacao.notacarioca.rio.gov.br';
 
 ConfigCidade.NameSpaceEnvelope := 'http://notacarioca.rio.gov.br';
 
 ConfigCidade.AssinaRPS  := False;
 ConfigCidade.AssinaLote := True; // Alterado por Italo em 10/05/2013
 
 Result := ConfigCidade;
end;
 
e a ultima alteração foi na unit ACBrNFSeUtil, função AssinarMSXML:
if ALote
  then begin
    if (URI <> '') and ((AProvedor <> proRecife) and (AProvedor <> proRJ))
    then xmldsig.signature := xmldoc.selectSingleNode('.//ds:Signature[@' + Identificador + '=AssLote_' + URI + ']')
    else begin
     xmldsig.signature := xmldoc.selectSingleNode('.//ds1:' + EnviarLoteRps + '/ds:Signature');
    end;
  end
  else xmldsig.signature := xmldoc.selectSingleNode('.//ds:Signature');
 
Feito isso, a emissão e o retorno ocorreu sucesso! Funcionou 100%!!
A prefeitura do Rio ainda trabalha com a versão 1.0 da NFSe mas este arquivo nfse.xsd deve ser atualizado e lembrando que a assinatura é somente no Lote!
Fica aqui me agradecimento pela sua ajuda! Valeu pela força!!!
  • 2 meses depois ...
  • Este tópico foi criado há 4134 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.