Ir para conteúdo
  • Cadastre-se

dev botao

Como utilizar voucher no TEF Dedicado (PayGoWeb) em Produção


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

Recommended Posts

  • Consultores

Olá pessoal, estou criando este tópico para orientar como utilizar as Bandeiras Vouchers no TEF Dedicado (PayGo Web). 

Cartão do tipo benefícios (alimentação, refeição, pass), são conhecidos como Vouchers.

Antes de qualquer tentativa de transacionar um voucher no estabelecimento, precisamos validar algumas informações:


1 - Estabelecimento precisa ter contrato com a empresa de voucher que deseja utilizar, isso é uma exigência do próprio fornecedor de voucher, para que o estabelecimento possa aceitar a bandeira em sua região.

Note que existem modalidades até em casos de Voucher, ramos de negócios são separados por tipos, ALIMENTAÇÃO, REFEIÇÃO, PASS, PRESENTE, CAR, SALÁRIO, NATAL, CULTURA, etc. Seu cliente escolhe a modalidade que encaixa no negócio que ele atua:

image.png

2 - A partir disso, o estabelecimento precisa habilitar a compatibilidade com a(s) adquirente (s). Lembrando a Regra de negócio: a adquirente decide se a bandeira tem compatibilidade no TEF, a negociação parte dela, não pela Integradora PayGo. Quando o estabelecimento habilitar a compatibilidade do voucher tem que informar que vai transacionar pelo TEF Dedicado PayGoWeb.

Exemplo: Adquirente CIELO aceita o voucher Alelo Alimentação pelo TEF Dedicado PayGoWeb. 

Observação: Isso é um contrato entre Voucher e Adquirente, então pode ocorrer mudanças , como por exemplo, VR Refeição não passa mais na REDE pois houve encerramento de contrato entre elas , mas pode ser aceito por outra(s) adquirente(s), como a CIELO.

3 - Se o estabelecimento estiver com o cadastro correto no voucher e habilitado na adquirente, precisamos informar a forma de pagamento correta, no TEF Dedicado (PayGoWeb) para pagamentos com voucher informar PWINFO_CARDTYPE = 04.

Veja exemplo no componente ACBrTEFAPI:

procedure TFormPrincipal.AdicionarPagamento(const Indice: String; AValor: Double
  );
var
  Ok, TemTEF: Boolean;
  Modalidade: TACBrTEFModalidadePagamento;
  CartoesAceitos: TACBrTEFTiposCartao;
  ReajusteValor: Double;
  IndicePagto: LongInt;
begin
  Ok := False;
  TemTEF := False;

  IndicePagto := StrToIntDef(Indice, 0);

  try
    // ** NOTA **
    // Usa '01' como Indice de Forma de Pagamento de ECF, para todas as operações TEF,
    // para evitar que o ACBrTEFD tente separar os Comprovantes por Forma de Pagamento

    Modalidade := tefmpNaoDefinido;
    CartoesAceitos := [];

    TemTEF := (IndicePagto >= 2) and (IndicePagto <= 5);
    case IndicePagto of
      2:
        Modalidade := tefmpCheque;
      3:
        begin
          Modalidade := tefmpCartao;
          CartoesAceitos := [teftcCredito]
        end;
      4:
        begin
          Modalidade := tefmpCartao;
          CartoesAceitos := [teftcDebito]
        end;
      5:
        Modalidade := tefmpCarteiraVirtual;
      6:
        begin
          Modalidade := tefmpCartao;
          CartoesAceitos := [teftcVoucher] <--------------------- AQUI
        end;
    end;

    if TemTEF then
    begin
      // -- Exemplo, usando TypeCast, para inserir Propriedades direto na Classe de TEF -- //

      if ACBrTEFAPI1.TEF is TACBrTEFAPIClassPayGoWeb then
      begin
        with TACBrTEFAPIClassPayGoWeb(ACBrTEFAPI1.TEF) do
        begin
          //TEFPayGoAPI.ParametrosAdicionais.ValueInfo[PWINFO_AUTHSYST] := 'DEMO';   // Autorizador
          //TEFPayGoAPI.ParametrosAdicionais.ValueInfo[PWINFO_FINTYPE] := '2';       // 01: à vista, 2: parcelado
          //TEFPayGoAPI.ParametrosAdicionais.ValueInfo[PWINFO_INSTALLMENTS] := '3';  // Parcelas
        end;
      end;


      Ok := ACBrTEFAPI1.EfetuarPagamento( IntToStr(Venda.NumOperacao),
                                          AValor, Modalidade, CartoesAceitos,
                                          tefmfAVista );
      Ok := Ok and
            ACBrTEFAPI1.UltimaRespostaTEF.Sucesso and
            ACBrTEFAPI1.UltimaRespostaTEF.TransacaoAprovada;
    end
    else
      Ok := True;
  finally
    StatusVenda := stsEmPagamento;
  end;

  // -- Exemplo de como capturar os Erros retornados pela API do TEF PayGoWeb -- //
  (*
  if not OK then
  begin
    if (ACBrTEFAPI1.TEF is TACBrTEFAPIClassPayGoWeb) then
    begin
      CodErro := ACBrTEFAPI1.UltimaRespostaTEF.LeInformacao(PWINFO_RET).AsInteger;
      MsgErro := ACBrTEFAPI1.UltimaRespostaTEF.LeInformacao(PWINFO_RESULTMSG).AsBinary;
      ShowMessage('Erro: '+IntToStr(CodErro)+' - '+Trim(MsgErro));
    end;
  end;
  *)

  if Ok then
  begin
    with Venda.Pagamentos.New do
    begin
      TipoPagamento := Indice;
      ValorPago := AValor;

      if TemTEF then
      begin
        NSU := ACBrTEFAPI1.UltimaRespostaTEF.NSU;
        Rede := ACBrTEFAPI1.UltimaRespostaTEF.Rede;
        RedeCNPJ := ACBrTEFAPI1.UltimaRespostaTEF.NFCeSAT.CNPJCredenciadora;

        // Calcula a Diferença do Valor Retornado pela Operação TEF do Valor que
        //   Informamos no CRT/CHQ
        ReajusteValor := RoundTo(Double(ACBrTEFAPI1.UltimaRespostaTEF.ValorTotal - ValorPago), -2);

        Saque := ACBrTEFAPI1.UltimaRespostaTEF.Saque;
        if (Saque > 0) then
        begin
          // Se houve Saque na operação TEF, devemos adicionar no ValorPago,
          //   para que o Saque conste como Troco
          ValorPago := ValorPago + Saque
        end

        else if (ReajusteValor > 0) then
        begin
          // Se não é Saque, mas houve acréscimo no valor Retornado, devemos lançar
          //   o Reajuste como Acréscimo na venda
          Venda.TotalAcrescimo := Venda.TotalAcrescimo + ReajusteValor;
        end;

        Desconto := ACBrTEFAPI1.UltimaRespostaTEF.Desconto;
        if (Desconto > 0) then
        begin
          // Se houve Desconto na Operação TEF, devemos subtrair do ValorPago
          //   e lançar um Desconto no Total da Transacao
          ValorPago := ValorPago - Desconto;
          Venda.TotalDesconto := Venda.TotalDesconto + Desconto;
        end

        else if (ReajusteValor < 0) then
        begin
          // Se não é Desconto, mas houve redução no Valor Retornado, devemos
          //   considerar a redução no ValorPago, pois a Adquirente limitou o
          //   valor da Operação, a um máximo permitido... Deverá fechar o cupom,
          //   com outra forma de Pagamento
          ValorPago := ValorPago + ReajusteValor;
        end;
      end
      else
        Confirmada := True;
    end;

    AtualizarPagamentosVendaNaInterface;

    if (Venda.TotalPago >= Venda.TotalVenda) then
      FinalizarVenda;
  end;
end;


Veja exemplo no componente ACBrTEFD:

procedure TFormPrincipal.AdicionarPagamento(const Indice: String; AValor: Double
  );
var
  Ok, TemTEF: Boolean;
  ReajusteValor: Double;
  UltResp: TACBrTEFResp;

  procedure InformarParametrosVoucher;              
   begin
    if (ACBrTEFD1.GPAtual = gpPayGoWeb) then
    begin
      ACBrTEFD1.TEFPayGoWeb.ParametrosAdicionais.ValueInfo[PWINFO_PAYMNTTYPE]:='1';
      ACBrTEFD1.TEFPayGoWeb.ParametrosAdicionais.ValueInfo[PWINFO_CARDTYPE]:='04'; <----------------------- AQUI
    end;
  end;

begin
  Ok := False;
  TemTEF := False;

  FIndicePagto := Indice;
  if (ACBrTEFD1.GPAtual = gpPayGoWeb) then
    ACBrTEFD1.TEFPayGoWeb.ParametrosAdicionais.Clear
  else if (ACBrTEFD1.GPAtual = gpCliSiTef) then
    ACBrTEFD1.TEFCliSiTef.OperacaoCRT := 0;

  try
    // ** NOTA **
    // Usa '01' como Indice de Forma de Pagamento de ECF, para todas as operações TEF,
    // para evitar que o ACBrTEFD tente separar os Comprovantes por Forma de Pagamento

    else if (Indice = '06') then    // 05-VALE REFEICAO    
    begin
      InformarParametrosVoucher;    <--------------------------- AQUI
      Ok := ACBrTEFD1.CRT(AValor, '01');
      TemTEF := True;
    end
    else
      Ok := True;                  // Pagamentos não TEF

  finally
    StatusVenda := stsEmPagamento;
  end;

  if Ok then
  begin
    with Venda.Pagamentos.New do
    begin
      TipoPagamento := Indice;
      ValorPago := AValor;

      if TemTEF then
      begin
        UltResp := ACBrTEFD1.RespostasPendentes[ACBrTEFD1.RespostasPendentes.Count-1];

        NSU := UltResp.NSU;
        Rede := UltResp.Rede;
        RedeCNPJ := UltResp.NFCeSAT.CNPJCredenciadora;

        // Calcula a Diferença do Valor Retornado pela Operação TEF do Valor que
        //   Informamos no CRT/CHQ
        ReajusteValor := RoundTo(Double(UltResp.ValorTotal - ValorPago), -2);

        Saque := UltResp.Saque;
        if (Saque > 0) then
        begin
          // Se houve Saque na operação TEF, devemos adicionar no ValorPago,
          //   para que o Saque conste como Troco
          ValorPago := ValorPago + Saque
        end
        else if ReajusteValor > 0 then
        begin
          // Se não é Saque, mas houve acréscimo no valor Retornado, devemos lançar
          //   o Reajuste como Acréscimo na venda
          Venda.TotalAcrescimo := Venda.TotalAcrescimo + ReajusteValor;
        end;

        Desconto := UltResp.Desconto;
        if Desconto > 0 then
        begin
          // Se houve Desconto na Operação TEF, devemos subtrair do ValorPago
          //   e lançar um Desconto no Total da Transacao
          ValorPago := ValorPago - Desconto;
          Venda.TotalDesconto := Venda.TotalDesconto + Desconto;
        end
        else if (ReajusteValor < 0) then
        begin
          // Se não é Desconto, mas houve redução no Valor Retornado, devemos
          //   considerar a redução no ValorPago, pois a Adquirente limitou o
          //   valor da Operação, a um máximo permitido... Deverá fechar o cupom,
          //   com outra forma de Pagamento
          ValorPago := ValorPago + ReajusteValor;
        end;
      end
      else
        Confirmada := True;
    end;

    AtualizarPagamentosVendaNaInterface;

    if (Venda.TotalPago >= Venda.TotalVenda) then
      FinalizarVenda;
  end;
end;

4 - Se continuar recusando ou dando erros durante a venda... Faça uma carga de tabelas no Muxx manualmente na PayGo, contate a Central de suporte do TEF PayGo, podem receber atendimento gratuito e funciona 24 horas por dia e 7 dias por semana! 

Contato PayGo Ligação: 3003-9968 (não é necessário DDD). 
Ou via WhatsApp: (11) 3003-6615

Importante sempre informar o *CNPJ do estabelecimento*, sem pontos ou traços. Ex: 12345678000100 , e o tipo do TEF ativado na automação: TEF Dedicado PayGo Web . 

Se você já parceiro TEF do Projeto ACBr pode esclarecer suas dúvidas nos canais exclusivos ACBR TEF #tefproducao em nosso Discord. https://www.projetoacbr.com.br/discord

E se ainda não é,  O Projeto ACBr é Distribuidor do TEF PayGo.. Seja nosso parceiro, preencha este formulário, https://projetoacbr.com.br/tef/ por favor, com algumas perguntas rapidinhas, que nosso Consultor comercial entrara em contato explicar a parceria.

  • Curtir 4
Link para o comentário
Compartilhar em outros sites

  • antonio.carlos changed the title to Como utilizar voucher no TEF Dedicado (PayGoWeb) em Produção
  • 1 ano depois...
  • Fundadores

Atualização do tópico...

Na Adquirente VERO, o cartão Alelo Alimentação é tratado como uma transação de DÉBITO

Isso é uma característica dessa adquirente, e se você tentar transacionar cartões da Alelo Alimentação, como Voucher, receberá um erro:

-2436  NAO EXISTEM PRODUTOS COMPATIVEIS

 

Sendo assim, para usar Alelo na VERO, informe ou escolha a opção Debito na transação

No ACBr, uma chamada de comandos para sempre usar Débito seria algo como:
      ACBrTEFAPI1.EfetuarPagamento( NumDocVenda, AValor, [], [teftcDebito]); 

 

ou ainda, sem especificar parâmetros, e escolher a opção 2-Débito, quando for solicitada pelo TEF
      ACBrTEFAPI1.EfetuarPagamento( NumDocVenda, AValor );

 

  • Curtir 2
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

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