Ir para conteúdo
  • Cadastre-se

dev botao
  • Este tópico foi criado há 132 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

ao realizar a homologação com Sitef, esbarramos num teste.

rotina do teste
 - realizar venda
 - credito
 - inserir cartao
 - digitar senha
 - quando aprovar e receber mensagem de retirar cartao (matar o processo simulando desligamento)

ao iniciar novamente o componente nao valida as operacoes pendentes..

chegamos no detalhe q o arquivo que é analisado para validar as pendencias "Acbr_xxx" é salvo na chamada apos executar o FinalizarChamadaAPI 
porem esse somente é chamado no finally da fpTEFAPIClass.EfetuarPagamento(
e essa so é concluida apos remover o cartao.

percebemos tambem que existe uma funcao da sitef q retorna a quantidade de pendentes porem ainda nao implementada


nao conseguimos contornar esse "detalhe", alguem ja passou por isso? conseguiu homologar? passou nesse teste?
alguem com a implementacao de rotina de retornar e tratar pendentes da sitef??
 

  • 4 semanas depois ...
Postado

Pra mim também está ocorrendo esse problema. O correto seria implementar na AcbrTefApi três funções da dll clisitef (já existem na dll):

função que retorna todas as transações pendentes do pdv;
função que retorna as transações pendentes do pdv por documento;
função que cancela as transações pelo documento;

sem isso vai ser dificil resolver. 

  • Moderadores
Postado
33 minutos atrás, LUCAS CARDOSO DA SILVA disse:

Pra mim também está ocorrendo esse problema. O correto seria implementar na AcbrTefApi três funções da dll clisitef (já existem na dll):

função que retorna todas as transações pendentes do pdv;
função que retorna as transações pendentes do pdv por documento;
função que cancela as transações pelo documento;

sem isso vai ser dificil resolver. 

 

Pelo que eu entendi, toda e qualquer implementação para o SITEF deve partir da comunidade!

Se puder implementar as funções sugeridas e submeter os fontes!

Posso ajudar nos testes e validações se precisar.

 

 

Postado

acabei q pra poder passar na homologacao fiz um "arranjo tecnico", como é testado somente o ultimo documento emitido, ao iniciar o processo de pagamento, salvo em registro o nr do documento e ao inicializar a aplicacao consulto se o ultimo documento esta pendente, por falta de tempo nao consegui dar sequencia no ajusto do componente, alterei algumas partes de funcoes e procedures, vou postar aqui as minhas anotacoes se ajudar, inicio do ano acredito estar mais disponivel e posso ajudar tbm nos ajustes e testes..

 

unit ACBrTEFAPICliSiTef;

tirar de dentro e colocar fora do repeat

TituloMenu := '' ;

quando vinha titulo no comando 4 nao mostrava no comando 21, pois TituloMenu := '' ;
eliminava o titulo

=============================================================

nit ACBrTEFAPICliSiTef;
funcao ContinuarRequisicaoSiTef;

tratamento do comando 30, incluido ajuste para aceitar o VOLTAR no formulario perguntar campo

30:  // Deve ser lido um campo cujo tamanho está entre TamMinimo e TamMaximo
           begin
             DefinicaoCampo.TipoCampo := TipoCampo;
             DefinicaoCampo.TituloPergunta := ACBrStr(Mensagem);
             DefinicaoCampo.TipoDeEntrada := tedTodos;
             DefinicaoCampo.TamanhoMaximo := TamanhoMaximo;
             DefinicaoCampo.TamanhoMinimo := TamanhoMinimo;
             DefinicaoCampo.MascaraDeCaptura := EmptyStr;

             Validado := True;
             TefAPI.QuandoPerguntarCampo(DefinicaoCampo, Resposta, Validado, Interromper);

             //ajuste para aceitar voltar nos formulario de solicitar informacao
             if((Interromper = False)and(Validado)and(Resposta = 'RetornarMenuAnterior'))then
             begin
                  Resposta := '';
                              Voltar := True;
             end else
                  RespCliSiTef.GravaInformacao(TipoCampo, Resposta);
           end;

============================================================================

na procedure quando perguntar campo passa valores quando for voltar

procedure TTef.QuandoPerguntarCampo(DefinicaoCampo: TACBrTEFAPIDefinicaoCampo; var Resposta: string; var Validado, Cancelado: Boolean);

//se nao for ok ou voltar trata como cancelado
      if((MR <> mrOK)and(MR <> mrRetry))then
      begin
          Cancelado := True;
        Validado := False;  // Não fizemos as validações de "DefinicaoCampo.ValidacaoDado", vamos deixar o ACBrTEFAPI validar
          Resposta := FormObtemCampo.Resposta;
      end else
      begin
          if(MR = mrRetry)then
        begin
            Cancelado := False;
          Validado     := True;
          Resposta     := 'RetornarMenuAnterior';
        end else
        begin
             Cancelado := False;
          Validado     := False;
          Resposta     := FormObtemCampo.Resposta;
        end;
      end;

=============================================================================================

unit ACBrTEFAPICliSiTef;

TACBrTEFAPIClassCliSiTef.FinalizarTransacao(

// CliSiTEF não usa Rede, NSU e Finalizacao
  DocumentoVinculado := '';
  Confirma := (AStatus in [tefstsSucessoAutomatico, tefstsSucessoManual]);
  i := fpACBrTEFAPI.RespostasTEF.AcharTransacao(Rede, NSU, CodigoFinalizacao);
  if (i >= 0) then
    DocumentoVinculado := fpACBrTEFAPI.RespostasTEF[i].DocumentoVinculado;

    //caso nao localize e tenha vindo rede sem nsu é pq foi chamado avulso com o DOCUMENTOVINCULADO no Rede
  if((Rede <> '')and(DocumentoVinculado = '')and(NSU = ''))then
      DocumentoVinculado := Rede;

  FinalizarTransacaoSiTef(Confirma, DocumentoVinculado);

=========================================================

desculpa a forma como compartilhei sem formatacao, é que mantenho as alteracoes por escrito caso atualize o componente e tenha q 

ajustar os detalhes manualmente

 

 

qqr coisa estou a disposicao para ajudar e testes

 

em relacao a tratar o ultimo documento pendente, ao abrir a aplicacao faco essa validacao

 

var ultimo := BackupDocumentoSitef_Ler; //leio registro com ultimo documento q foi inicializado o pagamento
      var estapendente := (TACBrTEFAPIClassCliSiTef(ObjetoTef.Acbr.TEF).TEFCliSiTefAPI.ObtemQuantidadeTransacoesPendentes(Now, AnsiString(ultimo)) > 0);

    if(estapendente)then
    begin
      TACBrTEFAPIClassCliSiTef(ObjetoTef.Acbr.TEF).FinalizarTransacao(ultimo,
                                                                      '',
                                                                      '',
                                                                      tefstsSucessoManual);

  • 7 meses depois ...
Postado

Alguem me ajuda ? Estamos tentando homologar o TEF mas estamos esbarrando também no tratamento de transações pendentes.
Faço a transação, ok, pago, na hora de remover o cartão, não o removo, deixando a venda PENDENTE no sitdemo.
Ao entrar na aplicação novamente, eu chamo a ObtemQuantidadeTransacoesPendentes, que sempre me retorna -13 (Nao encontrado).

Tambem ha a opção de chamar a funcao 130 pela IniciaFuncaoSiTefInterativo e iterar pela ContinuaFuncaoSiTefInterativo pra obter os dados dos cupons pendentes, no entanto, ao chamar a ContinuaFuncaoSiTefInterativo,  ela já cancela a venda, deixando-a como CANC.PDV, ai nao está dando certo nem de um jeito nem de outro.

Preciso de ajuda. Por favor.

Postado
14 horas atrás, abreiter disse:

Alguem me ajuda ? Estamos tentando homologar o TEF mas estamos esbarrando também no tratamento de transações pendentes.
Faço a transação, ok, pago, na hora de remover o cartão, não o removo, deixando a venda PENDENTE no sitdemo.
Ao entrar na aplicação novamente, eu chamo a ObtemQuantidadeTransacoesPendentes, que sempre me retorna -13 (Nao encontrado).

Tambem ha a opção de chamar a funcao 130 pela IniciaFuncaoSiTefInterativo e iterar pela ContinuaFuncaoSiTefInterativo pra obter os dados dos cupons pendentes, no entanto, ao chamar a ContinuaFuncaoSiTefInterativo,  ela já cancela a venda, deixando-a como CANC.PDV, ai nao está dando certo nem de um jeito nem de outro.

Preciso de ajuda. Por favor.

se for uma transação com cartão "visa" e chamar a função 130 ela será cancelada automaticamente (não temos controle sobre isso "foi a informação que recebi durante a minha homologação") tente chamar a função 131.

eu fiz assim e a homologação foi aprovada:

      dtmTEF.ACBrTEFAPI1.EfetuarAdministrativa('131');
      If dtmTEF.ACBrTEFAPI1.UltimaRespostaTEF.LeInformacao(210, 0).AsInteger > 0 Then
      Begin
        TACBrTEFAPIClassCliSiTef(dtmTEF.ACBrTEFAPI1.TEF).TEFCliSiTefAPI.FinalizaFuncaoSiTefInterativo(
          1{1=true,0=false},
          pansichar(dtmTEF.ACBrTEFAPI1.UltimaRespostaTEF.LeInformacao(160, 0).AsString),//pCupomFiscal:
          pansichar(dtmTEF.ACBrTEFAPI1.UltimaRespostaTEF.LeInformacao(163, 0).AsString),//pDataFiscal:
          pansichar(dtmTEF.ACBrTEFAPI1.UltimaRespostaTEF.LeInformacao(164, 0).AsString),//pHoraFiscal:
          ''
          );
        TfrmAlert.Alert(
          'Última transação TEF foi efetuada' + sLineBreak +
          'Favor reimprimir o cupom.',
          tmAviso);
      End; 

 

Postado (editado)
1 hora atrás, datilas disse:

se for uma transação com cartão "visa" e chamar a função 130 ela será cancelada automaticamente (não temos controle sobre isso "foi a informação que recebi durante a minha homologação") tente chamar a função 131.

eu fiz assim e a homologação foi aprovada:

      dtmTEF.ACBrTEFAPI1.EfetuarAdministrativa('131');
      If dtmTEF.ACBrTEFAPI1.UltimaRespostaTEF.LeInformacao(210, 0).AsInteger > 0 Then
      Begin
        TACBrTEFAPIClassCliSiTef(dtmTEF.ACBrTEFAPI1.TEF).TEFCliSiTefAPI.FinalizaFuncaoSiTefInterativo(
          1{1=true,0=false},
          pansichar(dtmTEF.ACBrTEFAPI1.UltimaRespostaTEF.LeInformacao(160, 0).AsString),//pCupomFiscal:
          pansichar(dtmTEF.ACBrTEFAPI1.UltimaRespostaTEF.LeInformacao(163, 0).AsString),//pDataFiscal:
          pansichar(dtmTEF.ACBrTEFAPI1.UltimaRespostaTEF.LeInformacao(164, 0).AsString),//pHoraFiscal:
          ''
          );
        TfrmAlert.Alert(
          'Última transação TEF foi efetuada' + sLineBreak +
          'Favor reimprimir o cupom.',
          tmAviso);
      End; 

 

Mesmo com cartão NUBANK (Mastercard) ao consultar ali na 131, ele ja cancela a transação.
Vou tentar com outro autorizador.

Editado por abreiter
Postado
2 horas atrás, datilas disse:

se for uma transação com cartão "visa" e chamar a função 130 ela será cancelada automaticamente (não temos controle sobre isso "foi a informação que recebi durante a minha homologação") tente chamar a função 131.

eu fiz assim e a homologação foi aprovada:

      dtmTEF.ACBrTEFAPI1.EfetuarAdministrativa('131');
      If dtmTEF.ACBrTEFAPI1.UltimaRespostaTEF.LeInformacao(210, 0).AsInteger > 0 Then
      Begin
        TACBrTEFAPIClassCliSiTef(dtmTEF.ACBrTEFAPI1.TEF).TEFCliSiTefAPI.FinalizaFuncaoSiTefInterativo(
          1{1=true,0=false},
          pansichar(dtmTEF.ACBrTEFAPI1.UltimaRespostaTEF.LeInformacao(160, 0).AsString),//pCupomFiscal:
          pansichar(dtmTEF.ACBrTEFAPI1.UltimaRespostaTEF.LeInformacao(163, 0).AsString),//pDataFiscal:
          pansichar(dtmTEF.ACBrTEFAPI1.UltimaRespostaTEF.LeInformacao(164, 0).AsString),//pHoraFiscal:
          ''
          );
        TfrmAlert.Alert(
          'Última transação TEF foi efetuada' + sLineBreak +
          'Favor reimprimir o cupom.',
          tmAviso);
      End; 

 

Muito obrigado irmão, deu boa.
Troquei o autorizador de CIELO pra REDE e deu boa.
Agora é ver com eles pois eles requerem CIELO, mas ja tirei o meu da reta kkkk.

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