Ir para conteúdo
  • Cadastre-se

dev botao

Dúvida ao usar outra forma de pagamento


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

Recommended Posts

  • Membros Pro

Olá!

Estamos com o seguinte problema no fluxo normal de uma transação TEF:

- Realizamos uma venda de 100 reais (multicartões)
- Enviamos o primeiro CRT de 60 reais 
- A operadora aprovou (o Acbr mantém essa transação em memória "Respostas Pendentes")
- Enviamos o segundo CRT de 40 reais, por algum motivo não foi aprovado.
- O sistema pergunta se deseja continuar com outra forma de pagamento
- O operador responde que sim
- Nesse momento eu quero encerrar essa transação TEF, somente com os 60 reias aprovados.
- Estou fazendo da seguinte forma: "Imprimo Transações Pendentes" e "Depois Confirmo as Transações Pendentes".
- Quando faço isso o Evento "OnDepoisConfirmarTransacoes" não é disparado, é nele que eu programo toda minha
regra de negócio referente a gravação física no banco de dados.

Gostaria de saber se é assim mesmo, ou se estou fazendo alguma coisa errada?

 

Inf. Complementares:

- PayGo IP

Link para o comentário
Compartilhar em outros sites

  • Consultores
3 horas atrás, udenilson disse:

Mas ele não dispara o evento citado a cima

Boa tarde udenilson.

   Isso acontece porque a transação já foi confirmada quando você chamou o segundo CRT... Como o @Juliomar Marchetti mostrou no código, quando é múltiplos cartões, os pagamentos anteriores precisam ser confirmados. Como isso é feito automaticamente, o código não chama o evento onDepoisConfirmarTransações.

   Daí quando você chama o "Confirmar transações pendentes" não há mais transações pendentes e por isso o evento onDepoisConfirmarTransações não é chamado...

   Não sei se esse comportamento pode ser alterado (preciso verificar...).

   Para resolver seu problema atual, você poderia chamar o "Confirmar Transações Pendentes" logo após a aprovação do primeiro CRT.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Eu acredito que não consegui passar corretamente minha dúvida! Vamos dizer que no segundo cartão o cliente queira pagar em dinheiro, como eu faço para informar para o componente ACBr que ele deve finalizar o saldo restante em dinheiro e seguir o fluxo normal, pois só assim ele consegue disparar o evento "OnDepoisConfirmarTransacoes"

Link para o comentário
Compartilhar em outros sites

  • Fundadores

A confirmação da Primeira transação, é um pré-requisito, para o inicio da segunda transação...

Isso é feito pelo Método: "TACBrTEFDClass.ConfirmarTransacoesAnteriores", que realmente não chama o evento.. pois essa transação ainda não foi impressa, e poderia até mesmo ser cancelada...

O método "TACBrTEFD.ImprimirTransacoesPendentes", já chama por  "TACBrTEFD.ConfirmarTransacoesPendentes", no final dele...

O problema é que havia uma verificação em "ConfirmarTransacoesPendentes", para saber se houve alguma confirmação nesse momento de execução do método... (o que não é o caso descrito nesse tópico)

       if not CNFEnviado then
        begin
          CNF( Rede, NSU, Finalizacao, DocumentoVinculado );
          CNFEnviado       := True;
          HouveConfirmacao := True;     // <--- AQUI
        end;         
.....

    if HouveConfirmacao and Assigned( fOnDepoisConfirmarTransacoes ) then    // <--- AQUI
      fOnDepoisConfirmarTransacoes( RespostasPendentes );         

Não lembro bem o porque dessa verificação, mas realmente ela não me parece correta...

Por favor teste com a Unit em anexo...

ACBrTEFD.pas

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Fundadores
Agora, udenilson disse:

No exemplo do Demo Não Fiscal, eu consigo informar o restante em dinheiro e o fluxo segue de forma normal, eu quero fazer o mesmo.

Você poderia fazer isso na sua aplicação.. isso é algo que você controla na sua interface e não no componente...

mas mesmo assim, mesmo no Demo, o Evento não está sendo disparado, se na lista existirem apenas transações que já foram confirmadas anteriormente

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
13 minutos atrás, udenilson disse:

Nesse caso teria que criar um método para minhas regras de negócios, fora do evento  "OnDepoisConfirmarTransacoes"

 

21 minutos atrás, udenilson disse:

Posso debugar e ver

 

Daniel, de fato ele não chama!

No demo eu fiz duas situações:

1) Fiz uma venda de 10 reais

- o primeiro cartão de 6

- o segundo cartão não aprovou, recebi a pergunta, se desejava continuar com outra forma de pagamento

- fiz um terceiro pagamento em dinheiro de 4 reais

- o evento não foi disparou

2) Fiz uma venda de 10 reais

- o primeiro cartão de 6

- o segundo cartão não aprovou, recebi a pergunta, se desejava continuar com outra forma de pagamento

- fiz um terceiro pagamento em cartão de 4 reais

- o evento disparou

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
39 minutos atrás, Daniel Simoes disse:

A confirmação da Primeira transação, é um pré-requisito, para o inicio da segunda transação...

Isso é feito pelo Método: "TACBrTEFDClass.ConfirmarTransacoesAnteriores", que realmente não chama o evento.. pois essa transação ainda não foi impressa, e poderia até mesmo ser cancelada...

O método "TACBrTEFD.ImprimirTransacoesPendentes", já chama por  "TACBrTEFD.ConfirmarTransacoesPendentes", no final dele...

O problema é que havia uma verificação em "ConfirmarTransacoesPendentes", para saber se houve alguma confirmação nesse momento de execução do método... (o que não é o caso descrito nesse tópico)


       if not CNFEnviado then
        begin
          CNF( Rede, NSU, Finalizacao, DocumentoVinculado );
          CNFEnviado       := True;
          HouveConfirmacao := True;     // <--- AQUI
        end;         
.....

    if HouveConfirmacao and Assigned( fOnDepoisConfirmarTransacoes ) then    // <--- AQUI
      fOnDepoisConfirmarTransacoes( RespostasPendentes );         

Não lembro bem o porque dessa verificação, mas realmente ela não me parece correta...

Por favor teste com a Unit em anexo...

ACBrTEFD.pas 70 kB · 0 downloads

Nessa unit, no exemplo "Demo não fiscal" o evento foi disparado

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
10 minutos atrás, Daniel Simoes disse:

 

Fiz um teste dentro da minha aplicação e agora o evento dispara, no segundo cartão quando não aprovou eu encerro o fluxo do TEF:

  if not IsAprovado then
  begin
    if TefGerenciador.ClienteVaiUsarOutraFormaDePgto then
    begin
      if (TTefGerenciador.GetInstance.ChecarSeExisteTransacoesPendentes) then
      begin
        TTefGerenciador.GetInstance.ImprimirTransacoesPendentes();
        TTefGerenciador.GetInstance.ConfirmarTransacoesPendentes();
        ZerarSaldoReceber();
      end;
    end
    else
      Abort;
  end;
 

Link para o comentário
Compartilhar em outros sites

×
×
  • 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.