Ir para conteúdo
  • Cadastre-se

dev botao

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á 378 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
Consultor SAC ACBr

Alexandre de Paula
Ajude o Projeto ACBr crescer - Assine o SAC                    

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á 378 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...