Jump to content

jackson Lima

Membros
  • Content Count

    128
  • Joined

  • Last visited

Community Reputation

17 Good

1 Follower

About jackson Lima

  • Rank
    Membro
  • Birthday 08/13/1992

Profile Information

  • Sexo
    Masculino
  • Localização
    Juazeiro do Norte

Recent Profile Visitors

837 profile views
  1. Descobri o problema, o erro não estava no xml, mas no parâmetro CancelarUltimaVenda eu estava passando a chave do cfe sem o prefixo cfe junto na chave. O Bruno da elgin que identificou isso. (suporte da elgin é top) O exemplo do acbr chama a função sem parâmetros, o que não funciona também. Obrigado.
  2. Me dê uma luz @André Ferreira de Moraes ?
  3. Ao tentar cancelar um cupom pelo mfe recebo: Resposta:842815|07002|0000|Cupom inválido|| o que há de errado nesse xml? <CFeCanc> <infCFe chCanc="CFe23190414200166000166599000083970010946737721"> <ide> <CNPJ>10615281000140</CNPJ> <signAC>CODIGO DE VINCULACAO AC DO MFE-CFE</signAC> <numeroCaixa>002</numeroCaixa> </ide> <emit/> <dest/> <total/> </infCFe> </CFeCanc>
  4. Ouvi falar que o mfe agora pode ser usado sem o integrador, porém somente a operação de venda pode ser feita diretamente usando dll Os pagamentos e cancelamento continuam pelo integrador. Consegui fazer o envio da venda, porém o cancelamento retorna o seguinte erro: <Integrador> <Identificador> <Valor>36564</Valor> </Identificador> <IntegradorResposta> <Codigo>AP</Codigo> <Valor>Arquivo processado</Valor> </IntegradorResposta> <Resposta> <retorno>MFE não encontrado Verifique se está com a versão 01.04.03 ou superior do Driver MFE, e tente novamente!</retorno> </Resposta> </Integrador> já baixei as dlls do novo integrador no site da sefaz e nada. Alguém conseguiu fazer o cancelamento pelo integrador usando a versão nova?
  5. Pessoal, atualmente eu pego os valor de saque e desconto no evento: DepoisConfirmarTransacoes Porém quando é múltiplos cartões esse evento só é chamado no final de passar todos os cartões, ai se o primeiro cartão retornar reajuste minha tela de pagamentos fica desatualizada. Como eu posso pegar esses valor sem confirmar as transações?
  6. Pessoal, encontrei o problema, o erro era pq um programador alterou o timeout dentro de uma função aqui no nosso sitema.
  7. Pessoal, ao enviar qualquer comando com o integrador fechada o acbr respeita o tempo de timeout Porém ao enviar os dados venda, e fechar o integrador, é como se bugasse esse timeout e fica em um loop infinito dentro do while da função: function TComandoIntegrador.EnviaComando(numeroSessao: Integer; Nome, Comando: String; TimeOutComando : Integer = 0): String; var LocTimeOut, ActualTime, TimeToRetry : TDateTime; NomeArquivoXml, RespostaIntegrador : String; ATimeout: Integer; function CriarXml( NomeArquivo, Comando: String): String; var NomeArquivoTmp, NomeArquivoXml: String; begin NomeArquivoTmp := ChangeFileExt(NomeArquivo, '.tmp'); FOwner.DoLog('Criando arquivo: '+NomeArquivoTmp); WriteToFile(NomeArquivoTmp, Comando); if not FileExists(NomeArquivoTmp) then DoException('Erro ao criar o arquivo: '+NomeArquivoTmp); NomeArquivoXml := ChangeFileExt(NomeArquivoTmp,'.xml'); FOwner.DoLog('Renomeando arquivo: '+NomeArquivoTmp+' para: '+NomeArquivoXml); if not RenameFile(NomeArquivoTmp, NomeArquivoXml) then DoException('Erro ao renomear o arquivo: '+ NomeArquivoTmp+' para: '+NomeArquivoXml); Result := NomeArquivoXml; end; begin Result := ''; Clear; NomeArquivoXml := CriarXml( FPastaInput + LowerCase(Nome) + '-' + IntToStr(numeroSessao), Comando); ActualTime := Now; TimeToRetry := IncSecond(ActualTime,5); if (TimeOutComando > 0) then ATimeout := TimeOutComando else ATimeout := FTimeout; if (ATimeout <= 25) then ATimeout := 25; LocTimeOut := IncSecond(ActualTime, ATimeout); RespostaIntegrador := AguardaArqResposta(numeroSessao); while EstaVazio(RespostaIntegrador) and (ActualTime < LocTimeOut) do // Fica em loop aqui ao fechar integrador no enviardadosvenda begin Sleep(100); RespostaIntegrador := AguardaArqResposta(numeroSessao); ActualTime := Now; if ActualTime > TimeToRetry then //Caso arquivo ainda não tenha sido consumido após 5 segundos, recria o arquivo begin TimeToRetry := IncSecond(ActualTime,5); if FilesExists(NomeArquivoXml) then begin try FOwner.DoLog('Apagando arquivo não processado: '+NomeArquivoXml); DeleteFile(NomeArquivoXml); except end; NomeArquivoXml := CriarXml( FPastaInput + LowerCase(Nome) +'-'+ IntToStr(numeroSessao) + '-' + FormatDateTime('HHNNSS', ActualTime), Comando); end; end; end; if FilesExists(NomeArquivoXml) then // Apaga arquivo não tratado pelo Integrador begin FOwner.DoLog('Apagando arquivo: '+NomeArquivoXml); DeleteFile(NomeArquivoXml); end; if EstaVazio(RespostaIntegrador) then begin FErroTimeout := True; DoException('Sem Resposta do Integrador'); end; FOwner.DoLog('RespostaIntegrador: '+RespostaIntegrador); FResposta:= RespostaIntegrador; FIntegradorResposta.LerResposta(RespostaIntegrador); if (FIntegradorResposta.Codigo <> 'EE') then Result := PegaResposta(FResposta) else Result := FResposta; end; É bem fácil de reproduzir o erro, é só no momento de enviar a função: enviardadosvenda fechar o integrador (isso fara com que ele não retorne nenhuma resposta e fique em loop sem obedecer ao timeout)
  8. Mas não posso alterar se tem uma verificação que as vezes vem ponto e outras vem virgula Queria saber o motivo de ter aquele código. @André Ferreira de Moraes tu lembra por que tu colocou essa verificação?
  9. Ele sempre entra nesse ponto e adiciona o valor com a virgula. Xml: <Integrador> <Identificador> <Valor>795880</Valor> </Identificador> <Componente Nome="VFP-e"> <Metodo Nome="EnviarPagamento"> <Construtor> <Parametros> <Parametro> <Nome>chaveAcessoValidador</Nome> <Valor>25CFE38D-3B92-46C0-91CA-CFF751A82D3D</Valor> </Parametro> </Parametros> </Construtor> <Parametros> <Parametro> <Nome>ChaveRequisicao</Nome> <Valor>26359854-5698-1365-9856-965478231456</Valor> </Parametro> <Parametro> <Nome>Estabelecimento</Nome> <Valor/> </Parametro> <Parametro> <Nome>SerialPos</Nome> <Valor>TEF</Valor> </Parametro> <Parametro> <Nome>Cnpj</Nome> <Valor>14200166000166</Valor> </Parametro> <Parametro> <Nome>IcmsBase</Nome> <Valor>99.99</Valor> </Parametro> <Parametro> <Nome>ValorTotalVenda</Nome> <Valor>99,99</Valor> </Parametro> <Parametro> <Nome>HabilitarMultiplosPagamentos</Nome> <Valor>true</Valor> </Parametro> <Parametro> <Nome>HabilitarControleAntiFraude</Nome> <Valor>false</Valor> </Parametro> <Parametro> <Nome>CodigoMoeda</Nome> <Valor>BRL</Valor> </Parametro> <Parametro> <Nome>EmitirCupomNFCE</Nome> <Valor>false</Valor> </Parametro> <Parametro> <Nome>OrigemPagamento</Nome> <Valor>0000933 Venda para consumidor final.</Valor> </Parametro> </Parametros> </Metodo> </Componente> </Integrador>
  10. Estão atualizados. O estranho que tem a verificação no código de enviar com vírgula ou não, de acordo com a chave acesso validador
  11. Pessoal, analisando o xml de pagamento percebi que o acbr está enviando o valor da venda com vírgula, sendo que os outros valores são com ponto. Parametro.GerarParametro('IcmsBase' , EnviarPagamento.IcmsBase, tcDe2); if EnviarPagamento.ChaveAcessoValidador = cChaveAcessoIntegrador then Parametro.GerarParametro('ValorTotalVenda' ,FloatToString( EnviarPagamento.ValorTotalVenda, ',' ), tcStr) else Parametro.GerarParametro('ValorTotalVenda' , EnviarPagamento.ValorTotalVenda, tcDe2); Esse código colocar a virgula no valor total, função: function TEnviarPagamentoW.GerarXml(): boolean; na unit: pcnVFPeW Qual a razão desse código? Obrigado
  12. Pessoal sei que o integrador não tem nada haver com o acbr, eles apenas trocam informações, porém estou passando por um erro (estou tentando entrar em contato com o pessoal da sefaz, mas até agora nada) e se alguém puder me dar uma força seque o arquivo de log em anexo. O erro é que algumas vezes o integrador não responde, ou retorna erros esquisitos como: estado atual do objeto inválido, erro desconhecido etc, isso principalmente quando é venda no TEF 20181121ACBrSAT.log
  13. Bom dia pessoal. Visualmente, como vocês tem apresentado para o cliente as informações de acréscimo, desconto e troco que podem ser retornado pelo TEF? Caso o TEF retorne saque ou desconto/acréscimo a aplicação de vocês altera os saques ou descontos/acréscimos que foram definidos no fechamento da venda pelo usuário? Nunca ví na tela de pagamento dos sistemas essas informações na tela, geralmente o saque (troco) e reajuste de valores (acréscimo ou desconto) são definidos no fechamento da venda e não nas formas de pagamento.
  14. Você não passa o valor do saque, quem retorna ele é o TEF. dependendo da credenciadora e como foi selecionado no pinpad Passos: Você manda apenas o valor de 10,00 que é o valor original. O TEF vai retornar 14,00 (você não controla isso, pode vir saque ou não). O acbrtefd vai retornar o saque, então, você vai no evento DepoisConfirmarTransacoes ver teve saque: if RespostasPendentes[resp].saque > 0 Se tiver saque retornado pelo tef ai você envia como valor de pagamento no ecf que ela mesma gera troco automaticamente.
×
×
  • Create New...