Ir para conteúdo
  • Cadastre-se

NFse IPM Agrolândia-sc nfse tem rejeição mas se perde ao converter o xml de retorno.


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

Recommended Posts

Postado

XML de retorno: 

<retorno><mensagem><codigo>00209 - Já consta uma NFSe para o referido prestador de serviço com o mesmo IDENTIFICADOR de arquivo</codigo></mensagem><identificador>nfse</identificador><numero_nfse>5297</numero_nfse><serie_nfse>1</serie_nfse><data_nfse>06/11/2023</data_nfse><hora_nfse>16:53:41</hora_nfse><arquivo_gerador_nfse>452-ger-nfse.xml</arquivo_gerador_nfse><nome_arquivo_gerado_eletron>452-ger-nfse.xml</nome_arquivo_gerado_eletron><link_nfse>http://sync.nfs-e.net/datacenter/include/nfw/nfw_imp_notas.php?codauten=0180030001856541</link_nfse><cod_verificador_autenticidade>0180030001856541</cod_verificador_autenticidade></retorno>

 

porem em acbrlibxml2 

na funcão 

function xmlParseDoc(const cur: xmlCharPtr): xmlDocPtr;
begin
  if InitLibXml2Interface and Assigned(_xmlParseDoc) then
    Result := _xmlParseDoc(cur)     //Retorna nil!
  else
    Result := nil;
end;

e gera essa mesangem:

X999 - Erro de Conexão: Input is not proper UTF-8, indicate encoding !
Bytes: 0xE1 0x20 0x63 0x6F

Ja atualizei o repositório. 

Screenshot_1.png

  • Consultores
Postado

Boa tarde Alisson,

Verifica se a função TratarXmlRetornado esta desta forma:

function TACBrNFSeXWebserviceIPM.TratarXmlRetornado(const aXML: string): string;
var
  jDocument, JSonErro: TACBrJSONObject;
  Codigo, Mensagem: string;
begin
  if (Pos('{"', aXML) > 0) and (Pos('":"', aXML) > 0) then
  begin
    jDocument := TACBrJSONObject.Parse(aXML);
    JSonErro := jDocument.AsJSONObject['retorno'];

    if not Assigned(JSonErro) then Exit;

    Codigo := '00' + JSonErro.AsString['code'];
    Mensagem := ACBrStr(JSonErro.AsString['msg']);

    Result := '<a>' +
                '<mensagem>' +
                  '<codigo>' + Codigo + '</codigo>' +
                  '<Mensagem>' + Mensagem + '</Mensagem>' +
                  '<Correcao>' + '</Correcao>' +
                '</mensagem>' +
              '</a>';

    Result := ParseText(AnsiString(Result), True, {$IfDef FPC}True{$Else}False{$EndIf});
    Result := String(NativeStringToUTF8(Result));
  end
  else
  begin
    Result := inherited TratarXmlRetornado(aXML);

    Result := ACBrStr(Result);    <=== esta desta forma ou esta usando a função: NativeStringToUTF8 ?
                                        
    Result := ParseText(AnsiString(Result), True, {$IfDef FPC}True{$Else}False{$EndIf});
    Result := RemoverDeclaracaoXML(Result);
    Result := RemoverIdentacao(Result);
    Result := RemoverCaracteresDesnecessarios(Result);
    Result := AjustarRetorno(Result);
  end;
end;

Com certeza o XML retornado pelo webservice não esta no formato UFT-8.

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
1 hora atrás, Italo Giurizzato Junior disse:

Boa tarde Alisson,

Verifica se a função TratarXmlRetornado esta desta forma:

function TACBrNFSeXWebserviceIPM.TratarXmlRetornado(const aXML: string): string;
var
  jDocument, JSonErro: TACBrJSONObject;
  Codigo, Mensagem: string;
begin
  if (Pos('{"', aXML) > 0) and (Pos('":"', aXML) > 0) then
  begin
    jDocument := TACBrJSONObject.Parse(aXML);
    JSonErro := jDocument.AsJSONObject['retorno'];

    if not Assigned(JSonErro) then Exit;

    Codigo := '00' + JSonErro.AsString['code'];
    Mensagem := ACBrStr(JSonErro.AsString['msg']);

    Result := '<a>' +
                '<mensagem>' +
                  '<codigo>' + Codigo + '</codigo>' +
                  '<Mensagem>' + Mensagem + '</Mensagem>' +
                  '<Correcao>' + '</Correcao>' +
                '</mensagem>' +
              '</a>';

    Result := ParseText(AnsiString(Result), True, {$IfDef FPC}True{$Else}False{$EndIf});
    Result := String(NativeStringToUTF8(Result));
  end
  else
  begin
    Result := inherited TratarXmlRetornado(aXML);

    Result := ACBrStr(Result);    <=== esta desta forma ou esta usando a função: NativeStringToUTF8 ?
                                        
    Result := ParseText(AnsiString(Result), True, {$IfDef FPC}True{$Else}False{$EndIf});
    Result := RemoverDeclaracaoXML(Result);
    Result := RemoverIdentacao(Result);
    Result := RemoverCaracteresDesnecessarios(Result);
    Result := AjustarRetorno(Result);
  end;
end;

Com certeza o XML retornado pelo webservice não esta no formato UFT-8.

ESta exatamente dessa forma. utilizando :  

Result := ACBrStr(Result);

  • Solution
Postado (editado)
22 horas atrás, Italo Giurizzato Junior disse:

Boa tarde Alisson,

Verifica se a função TratarXmlRetornado esta desta forma:

function TACBrNFSeXWebserviceIPM.TratarXmlRetornado(const aXML: string): string;
var
  jDocument, JSonErro: TACBrJSONObject;
  Codigo, Mensagem: string;
begin
  if (Pos('{"', aXML) > 0) and (Pos('":"', aXML) > 0) then
  begin
    jDocument := TACBrJSONObject.Parse(aXML);
    JSonErro := jDocument.AsJSONObject['retorno'];

    if not Assigned(JSonErro) then Exit;

    Codigo := '00' + JSonErro.AsString['code'];
    Mensagem := ACBrStr(JSonErro.AsString['msg']);

    Result := '<a>' +
                '<mensagem>' +
                  '<codigo>' + Codigo + '</codigo>' +
                  '<Mensagem>' + Mensagem + '</Mensagem>' +
                  '<Correcao>' + '</Correcao>' +
                '</mensagem>' +
              '</a>';

    Result := ParseText(AnsiString(Result), True, {$IfDef FPC}True{$Else}False{$EndIf});
    Result := String(NativeStringToUTF8(Result));
  end
  else
  begin
    Result := inherited TratarXmlRetornado(aXML);

    Result := ACBrStr(Result);    <=== esta desta forma ou esta usando a função: NativeStringToUTF8 ?
                                        
    Result := ParseText(AnsiString(Result), True, {$IfDef FPC}True{$Else}False{$EndIf});
    Result := RemoverDeclaracaoXML(Result);
    Result := RemoverIdentacao(Result);
    Result := RemoverCaracteresDesnecessarios(Result);
    Result := AjustarRetorno(Result);
  end;
end;

Com certeza o XML retornado pelo webservice não esta no formato UFT-8.

Ele está caindo no else. Onde utiliza a função: Result:= AcbrStr(Result); Não utiliza o nativeStringToUTF8.

Se eu coloco Result:= String(NativeStringToUTF8(Result));   funciona normalmente.  provavelmente esta retornando do webservice sem formatar no UTF8.

Editado por Alisson07
  • Curtir 1
Postado

Se ajuda na análise situação ocorre apenas com IPM, até agora identifiquei a situação na cidade de Agrolândia-sc e de Rio das Antas-sc, As duas alteraram os links recentemente.

  • Curtir 1
  • Consultores
Postado

Obrigado por reportar.

Fechando. Para novas dúvidas, criar um novo tópico.

  • Curtir 1
image.png

Alexandre de Paula
Gerente de Projetos
Ajude o Projeto ACBr crescer - Assine o Clube PRO                    

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  ícone Discórdia Discord   

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

 

 

  • Este tópico foi criado há 951 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.

The popup will be closed in 10 segundos...
The popup will be closed in 10 segundos...