Cf-e SAT emulador v2.9.3

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
rodlimaoc
Usuário Nível 1
Usuário Nível 1
Mensagens: 5
Registrado em: 12 Set 2016 11:16
Localização: Sorocaba/SP

Cf-e SAT emulador v2.9.3

Mensagem por rodlimaoc »

Pessoal, bom dia. Estou com problemas para fazer o teste do emulador do Cf-e SAT v2.9.3,

Eu consigo realizar a consulta sem problemas, retornando "CF-e SAT em operação". Porém quando tento enviar uma venda retorna o seguinte erro:
"022515|06010|1999|null||"
Analisando o log de erro do emulador aparece o seguinte:
[Fatal Error] :1:1: Content is not allowed in prolog.
org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
at br.com.satcfe.satbl.modelos.cfe.CFe.<init>(CFe.java:91)
at br.com.satcfe.satbl.controles.ControladorEmissao.trataMensagem(ControladorEmissao.java:52)
at br.com.satcfe.satbl.controles.ControladorComandosSAT.tratarComandoEnviarDadosVenda(ControladorComandosSAT.java:57)
at br.com.satcfe.satbl.MainSATBL.tratarComandos(MainSATBL.java:352)
at br.com.satcfe.satbl.MainSATBL.notifyIncomingData(MainSATBL.java:315)
at br.com.satcfe.satbl.conexao.MonitorComandosSAT$NotificadorComandoSAT.run(MonitorComandosSAT.java:75)
at java.util.TimerThread.mainLoop(Unknown Source)
at java.util.TimerThread.run(Unknown Source)
Abaixo segue um print da tela do emulador:
Print do emulados CF-e SAT v2.9.3
Print do emulados CF-e SAT v2.9.3
Segue também o XML enviado para verificação:
teste.xml
XML de teste de venda para emulador CF-e SAT v2.9.3
(1.62 KiB) Baixado 50 vezes
Segundo minhas pesquisas em fóruns de JAVA o erro "Content is not allowed in prolog" é referente ao início do arquivo XML, mas não consegui encontrar onde pode estar o erro. Já coloquei espaço antes de fechar a tag xml e retorna o mesmo erro.

Também já alterei a assinatura do XML para "SGR-SAT SISTEMA DE GESTAO E RETAGUARDA DO SAT", mas como isso não tem haver com a estrutura do arquivo, voltei a assinatura de teste. Essa assinatura tem 344 caracteres.

Eu não encontrei ninguém com esse problema de estrutura aqui no fórum nos teste do emulador. Estou usando Harbour no meu software AC, vou deixar abaixo uma parte da rotina que envia o comando de venda para o emulador.

Fico no aguardo de uma orientação.

Código: Selecionar todos

/*=================================================================================================================
 Cfe:transmite
-------------------------------------------------------------------------------------------------------------------
 Envia uma venda para o SAT emitir um cupom. Retorna se obteve sucesso.
=================================================================================================================*/
method Cfe:transmite(;
  cArq,; // 1 Nome do arquivo XML
  oRet ) // 2 Objeto de retorno do SAT [@]

  begin sequence
    if !::testa()                  ; break; endif
    if !::envia("EnviarVenda",cArq); break; endif
  recover
    return .f.
  always
    oRet:= ::oRet
    fErase(cArq)
  endsequence
return .t.


/*=================================================================================================================
 Cfe:testa
-------------------------------------------------------------------------------------------------------------------
 Testar a comunicação do SAT
=================================================================================================================*/
method Cfe:testa()
  begin sequence
    if !::getSat()             ; break; endif
    if !::envia("ConsultarSat"); break; endif
  recover
    return .f.
  endsequence
return .t.


/*=================================================================================================================
 Cfe:getSat
-------------------------------------------------------------------------------------------------------------------
 Seleciona o SAT (se necessário)
=================================================================================================================*/
method Cfe:getSat()
  if ::lEmu; ::xEmpr:= "E"; endif

  begin sequence
    if !::oSat:vrfSat(::xEmpr); break; endif // Não existe SAT cadastrado
  recover
    return .f.
  endsequence

  if Empty(::cDirSis); ::cDskSis:= hb_CurDrive(); ::cDirSis:= ::cDskSis +":\\" +CurDir()   ; endif
  if Empty(::cDirSat);                          ; ::cDirSat:= Trim(::oSat:getDir(::xEmpr)); endif
return .t.


/*=================================================================================================================
 Cfe:emula
-------------------------------------------------------------------------------------------------------------------
 Emula o envio e retorno do SAT
=================================================================================================================*/
method Cfe:emula(;
  cCmd,; // 1 String com o nome da função para a DLL executar
  cArq,; // 2 Arquivo de envio
  cChv,; // 3 Chave para cancelamento
  nRnd,; // 4 Nº randômico
  cCod ) // 5 Código de ativação

  local cRet

  DirChange(::cDirSat)

  begin sequence
    switch cCmd
      case "ConsultarSat"; cRet:= EmuConsulta(nRnd); exit
    otherwise
      cArq:= ::cDirSis +"\\" +cArq

      switch cCmd
        case "EnviarVenda"  ; cRet:= EmuVenda(nRnd,cCod,cArq)       ; exit
        case "CancelarVenda"; cRet:= EmuCancela(nRnd,cCod,cChv,cArq); exit
      endswitch
    endswitch

    DiskChange(::cDskSis)
    DirChange(::cDirSis)

    if Empty(cRet); break; endif
  recover
    return .f.
  endsequence

  ::aRet:= Str2Vet(Utf2Ans(cRet),"|")
return ::getRet()


*******************************************************************************************************************


/*=================================================================================================================
 Funções em C
-------------------------------------------------------------------------------------------------------------------
 Funções em C para comunicação com a DLL
=================================================================================================================*/
#pragma BEGINDUMP

#include "hbapi.h"
#include "windows.h"

#define SATAPI WINAPIV
#define EMUDLL "sat.dll"

typedef char *(SATAPI *_EMUCONSULTA) (int nRandom);
typedef char *(SATAPI *_EMUVENDA)    (int nRandom,char* cCodAtiv,char* cArqXml);
typedef char *(SATAPI *_EMUCANCELA)  (int nRandom,char* cCodAtiv,char* cChave,char* cArqXml);

/*=================================================================================================================
 EmuConsulta
-------------------------------------------------------------------------------------------------------------------
 Consulta de o SAt está em operação
=================================================================================================================*/
HB_FUNC(EMUCONSULTA) {
  int nRandom = hb_parnl(1);

  HINSTANCE nHdl = LoadLibrary(EMUDLL);

  if (nHdl) {
    _EMUCONSULTA pFunc = (_EMUCONSULTA) GetProcAddress(nHdl,"ConsultarSAT");
    hb_retc(pFunc(nRandom));
    FreeLibrary(nHdl);
  } // if
} // func


/*=================================================================================================================
 EmuVenda
-------------------------------------------------------------------------------------------------------------------
 Envia o arquivo XML (Cfe) para o SAT
=================================================================================================================*/
HB_FUNC(EMUVENDA) {
  int  nRandom       = hb_parnl(1);
  char cCodAtiv[150] = {0};
  char cArqXml[150]  = {0};

  HINSTANCE nHdl = LoadLibrary(EMUDLL);

  strcpy(cCodAtiv,hb_parcx(2));
  strcpy(cArqXml ,hb_parcx(3));

  if (nHdl) {
    _EMUVENDA pFunc = (_EMUVENDA) GetProcAddress(nHdl,"EnviarDadosVenda");
    hb_retc(pFunc(nRandom,cCodAtiv,cArqXml));
    FreeLibrary(nHdl);
  } // if
} // func

#pragma ENDDUMP

OBS: As "\\" adicionadas no nome do aquivo são apenas para manter as cores do código, estou usando apenas 1 (uma) barra: "\"
Rod Limão
--
<empresa> Interface </empresa>
<linguagem> Harbour32/Delphi7/Python36 </linguagem>
<especialidade> Fiscal/Desenvolvimento/Suporte </especialidade>
Avatar do usuário
HASA
Colaborador
Colaborador
Mensagens: 1088
Registrado em: 01 Set 2003 19:50
Localização: São Paulo
Contato:

Cf-e SAT emulador v2.9.3

Mensagem por HASA »

:-O
Acertar cst do Pis e Cofins par empresa optante pelo simples é SEMPRE 49:
<PIS>
<PISSN>
<CST>49</CST>
</PISSN>
</PIS>
<COFINS>
<COFINSSN>
<CST>49</CST>
</COFINSSN>
</COFINS>

Envie e vamos ver o próximo erro ok.

:)Pos
HASA
Avatar do usuário
rodlimaoc
Usuário Nível 1
Usuário Nível 1
Mensagens: 5
Registrado em: 12 Set 2016 11:16
Localização: Sorocaba/SP

Cf-e SAT emulador v2.9.3

Mensagem por rodlimaoc »

Obrigado pela dica.. mas o problema é na estrutura e não no conteúdo. O erro é o mesmo.

Os primeiros teste foram com o PISST e COFINSST, mesmo assim obrigado por me lembrar, vou alterar o anexo para não criar mais confusão.

Abs
Rod Limão
--
<empresa> Interface </empresa>
<linguagem> Harbour32/Delphi7/Python36 </linguagem>
<especialidade> Fiscal/Desenvolvimento/Suporte </especialidade>
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Cf-e SAT emulador v2.9.3

Mensagem por Jairo Maia »

Olá rodlimaoc,

Seja bem vindo ao fórum.

Seu XML não tem nada a ver com um XML de SAT. Veja o XML de um SAT que foi validado pelo Emulador:
Anexos
AD35160911111111111111591234567890000044342901.xml
(4.34 KiB) Baixado 92 vezes
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
HASA
Colaborador
Colaborador
Mensagens: 1088
Registrado em: 01 Set 2003 19:50
Localização: São Paulo
Contato:

Cf-e SAT emulador v2.9.3

Mensagem por HASA »

:-O
HASA
Avatar do usuário
rodlimaoc
Usuário Nível 1
Usuário Nível 1
Mensagens: 5
Registrado em: 12 Set 2016 11:16
Localização: Sorocaba/SP

Cf-e SAT emulador v2.9.3

Mensagem por rodlimaoc »

Jairo.. estou analisando seu XML, porém não entendi o que quis dizer.

Meu XML é de envio, não de retorno. Você tem um exemplo de XML de envio?

Segue um novo XML de envio baseado no seu de retorno:
teste2.xml
Cf-e SAT XML de envio para emulador
(2.04 KiB) Baixado 64 vezes
Abs
Rod Limão
--
<empresa> Interface </empresa>
<linguagem> Harbour32/Delphi7/Python36 </linguagem>
<especialidade> Fiscal/Desenvolvimento/Suporte </especialidade>
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Cf-e SAT emulador v2.9.3

Mensagem por Jairo Maia »

Olá Rod Limão,

Usando esse último XML e apenas trocando a assinatura do AC, acabei de gerar o cupom. Porém, usei a versão 2.9.2 do emulador.

Como você está usando a versão 2.9.3, será que o problema é a quebra de linha? Veja que seu XML está com quebra de linha.
CupomSatTeste2.jpg
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
rodlimaoc
Usuário Nível 1
Usuário Nível 1
Mensagens: 5
Registrado em: 12 Set 2016 11:16
Localização: Sorocaba/SP

Cf-e SAT emulador v2.9.3

Mensagem por rodlimaoc »

Jairo.. a quebra de linha do arquivo é apenas para facilitar a visualização pelo pessoal aqui do fórum. Eu estou enviando o arquivo sem nenhuma quebra.

Você usou uma assinatura válida? Eu tenho uma versão 2.8.8 e 2.9.3 do emulador,.. mas não encontrei para baixar a versão 2.9.2. Você consegue disponibilizar aqui no fórum?

Abs
Rod Limão
--
<empresa> Interface </empresa>
<linguagem> Harbour32/Delphi7/Python36 </linguagem>
<especialidade> Fiscal/Desenvolvimento/Suporte </especialidade>
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Cf-e SAT emulador v2.9.3

Mensagem por Jairo Maia »

Olá Rod Limão,

Em anexo a versão 2.9.2. Quanto a assinatura usei fictícia conforme orientação do leiaute. Não creio que seja ela, já que a mensagem seria outra, mas de qualquer forma está em anexo a que uso.
Anexos
AssinaturaAC.txt
(344 Bytes) Baixado 52 vezes
emulador_off_line_v2_9_2.zip
(6.43 MiB) Baixado 61 vezes
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Cf-e SAT emulador v2.9.3

Mensagem por rochinha »

Amiguinhos,

Analisando o trecho abaixo pude perceber que a signAC não tem concatenação dos CNPJs do cliente e da software-house. Ela não precisa ter 344, pode chegar até 344 mas não precisa e nem pode ultrapassar.

Exemplo:

1111111111111122222222222222

Mas o fato de colocar a signAC com somente este trecho é necessário ao fazer o processo de configuração do SAT que este mesmo conjunto seja usado para assinatura, etc.

Código: Selecionar todos

<?xml version="1.0" encoding="utf-8" ?> 
- <CFe>
- <infCFe versaoDadosEnt="0.07">
- <ide>
  <CNPJ>22222222222222</CNPJ> 
 <signAC>11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111</signAC> 
  <numeroCaixa>123</numeroCaixa> 
  </ide>
- <emit>
  <CNPJ>11111111111111</CNPJ> 
  <IE>111111111111</IE> 
  <IM>123123</IM> 
  <indRatISSQN>N</indRatISSQN> 
  </emit>
Usando o emulador 2.9.2 o erro foi este:

Código: Selecionar todos

[2016-10-04 00:20:16.605]:INICIO CONSULTA
[2016-10-04 00:20:16.616]:FIM CONSULTA
[2016-10-04 00:20:16.855]:INICIO EMISSAO
[2016-10-04 00:20:16.867]:Carregando CFe.
[2016-10-04 00:20:16.888]:Validando Campos do CFe.
[2016-10-04 00:20:16.894]:Erro no campo 'CNPJ' : Campo invalido.
[2016-10-04 00:20:16.904]:Erro no campo 'ide': 1224
[2016-10-04 00:20:16.923]:ERRO NA EMISSAO: 1224: null
Verifique na configurações do SAT se você colocou 22222222222222 como CNPJ do cliente.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Responder