Suggest Edits

Manual de Integração com o CapptaGpPlus

 

Preparativos para integração

Neste documento iremos detalhar todos os passos necessários para realizar a integração com o CapptaGpPlus por intermédio da API CapptAPI que será utilizada para realizar toda a parte complexa e demorada da integração e facilitar a sua vida.

Possuimos duas maneiras de integração, sendo elas o modo Background e o Foreground. Ambas são bem simples de serem implementadas.

Na integração Foreground cuidamos de toda a interação com o usuário para você, sendo assim basta nos enviar os dados do pagamento que iremos informar ao usuário todos os passos que precisam ser executados, desde a leitura do cartão até a sua autorização e ao final de tudo só lhe devolvemos os dados de autorização e cupons.

Por outro lado a integração Background é completamente transparente, ou seja, o CapptaGpPlus irá devolver todos os passos que devem ser executados entre eles, exibição de mensagens ou a solicitação de alguns dados básicos para dar continuidade aos pagamentos.

Antes de qualquer coisa será necessário instalar a versão de homologação do CapptaGpPlus em seu ambiente de desenvolvimento, você pode adquiri-lo entrando em contato com a nosso time de homologação

Após a instalação solicite que ativem o modo de integração CapptAPI, pronto agora seu TEF já está preparado para receber a conexão pela sua aplicação.

Contato equipe Homologa

Telefone: (11) 4302-6179

e-mail: homologa@cappta.com.br

Seja bem vindo a referência completa da Cappta API, qualquer dúvida, sugestão ou critica fale conosco:

Telefone: (11) 4302-6179
Skype: homologa.cappta1
e-mail: homologa@cappta.com.br

É muito importante termos registros de nossas atividades, afim de melhor atende-lo, por isso não esqueça de preencher este pequeno formulário Homologa Cappta
Conheça também:
Android
Web
Conciliação

O que deseja aprender?

Deixe sua dúvida e alguém em breve ira responde-lo : Ir para o Fórum

Suggest Edits

Ambiente de testes

 

Versão do CapptaGpPlus

O time de tecnologia da Cappta vela pela retrocompatibilidade de nossa aplicação. Sendo assim se a versão para homologação for uma diferente da instalada em produção não haverá problemas de integração.

Para ter acesso ao nosso software e iniciar os testes de integração, entre em contato com o time. A instalação é super pratica e fácil. Se preferir podemos instalar via acesso remoto.

Para instalar siga os passos

Como instalar o CapptaGpPlus

Obs:

Atenção os dados de instalação só podem ser utilizados em uma máquina, se precisar instalar em outro computador por favor desinstalar

Utilize a senha, PDV e CNPJ fornecidos

Confirme os dados

Escolha o Pinpad

Configurar o GP

Na sua área de trabalho execute o GP clicando sobre o ícone, aguarde a conclusão até aparecer uma mensagem "Estamos prontos para capturar seus pagamentos".

Para ter acesso as configurações do GP, utilize a senha do dia. Entre em contato com nosso time

Configurações

No taskbar  clique com botão direito e procure a opção configurações.

No taskbar clique com botão direito e procure a opção configurações.

Solicite  a senha do dia para nosso time.

Solicite a senha do dia para nosso time.

Com as configurações abertas clique na opção TEF

Marque a opção Visível ou Invisível

Grave a alteração

Grave a alteração

Suggest Edits

Máquinas Virtuais

 

Para instalação de nossa solução em ambiente virtual siga exatamente o exemplo anterior apenas fique atento com a configuração do Pinpad. Basta habilita-lo.

Botão direito sobre o ícone e habilite o Pinpad

Botão direito sobre o ícone e habilite o Pinpad

Suggest Edits

Utilizando o Código de exemplo

 

Em conjunto com este manual você deve ter recebido um pacote com projetos de teste e aplicações de diversas linguagens, para simular a integração e facilitar o desenvolvimento em seu próprio software. Para utiliza-lo é necessário configura-lo de acordo com o sample da linguagem escolhida.

Os valores a serem inseridos são estes abaixo:

  • ChaveAutenticacao - Chave de autenticação recebida na abertura do processo de integração com a Cappta.
  • Cnpj - CNPJ da loja que está utilizando o TEF da Cappta, precisa ser equivalente ao que está configurado no CapptaGpPlus
  • Pdv - Número de pdv do CNPJ que está utilizando o TEF da Cappta, precisa ser equivalente ao que está configurado no CapptaGpPlus.

Para csharp, abra o arquivo app.config e altere as chaves do nó appSettings.
Já para delphi, abra o arquivo autenticacao.xml, o nó autenticacao, e altere os valores dos nós internos.

<?xml version="1.0"?>
<autenticacao>
    <chaveAutenticacao>2C1CE88C6A0C4FA6BF2D519B1DB31DF4</chaveAutenticacao>
    <cnpj>00000000000000</cnpj>
    <pdv>8</pdv>
</autenticacao>
Suggest Edits

Fluxo de comunicação com a CapptAPI

 

Durante a integração com a CapptAPI será necessária a execução e validação de alguns procedimentos. A imagem ao lado demonstra este fluxo:
1.Após realizar a autenticação será necessário iniciar uma operação de pagamento, reimpressão ou cancelamento.

2.Ao iniciar uma operação TEF, seja pagamento ou administrativa, a CapptAPI iniciará o modo de iteração.

3.Neste momento será necessário executar a função IterarOperacaoTef, ela irá retornar uma instância da interface IIteracaoTef.

4.Essa interface possui várias implementações dentre elas IRespostaOperacaoAprovada, IRespostaOperacaoNegada, IMensagem e IRequisicaoParametro (para mais detalhes sobre as propriedades e significado de cada uma destas implementações consulte Implementações da interface IIteracaoTef).

5.O procedimento de iteração deve ocorrer enquanto o retorno não for uma instância de IRespostaOperacaoAprovada ou IRespostaOperacaoNegada.

6.Caso receba uma IRespostaOperacaoNegada significa que a operação foi negada, o motivo da recusa está descrito na propriedade Motivo contida no objeto recebido.

7.Do contrário caso receba uma IRespostaOperacaoAprovada a operação foi aprovada e o objeto recebido possui todos os detalhes incluindo o cupom TEF relativo a operação executada.

8.Caso a operação aprovada seja de pagamento será necessário confirma-la ou desfaze-la.
Mais adiante iremos descrever como implementar cada um dos passos descritos acima no seu código.

Suggest Edits

Importando CapptAPI

 

A CapptAPI é um componente COM implementado em .NET. Existem as seguintes maneiras de importa-lo para o seu projeto:

1. Net

Cappta.Gp.Api.Com.dll.

Caso seu software também seja escrito em alguma da plataforma .NET a importação pode ser realizada diretamente pelo arquivo Cappta.Gp.Api.Com.dll
Depois de importar a API basta criar uma nova instância da classe ClienteCappta e realizar a autenticação para começar a integrar outros serviços.

using Cappta.Gp.Api.Com;

namespace CappAPIIntegration
{
    class Program
    {
        static void Main(string[] args)
        {
            ClienteCappta cappta = new ClienteCappta();
        }
    }
}
program cappapiintegration;

uses Cappta_Gp_Api_Com_1_0_TLB;

var cappta : IClienteCappta;

begin
  cappta := CoClienteCappta.Create;
end.
Imports Cappta.Gp.Api.Com

Module CapptaGpPlus

    Sub Main() 
        Dim clienteCappta As New ClienteCappta()
    End Sub

End Module

Abaixo são demonstrados os passos necessários para efetuar a importação da API em seu projeto Delphi. A IDE usada é a RAD Studio 10.2

No menu do topo, vá em Componente > Importar Componente

Marque a opção Import Type Library

Na caixa de pesquisa, digite Cappta e selecione nossa TLB/DLL

Next para a próxima etapa

Agora selecione a opção Create

Pronto, você esta apto a começar a desenvolver a integração

 

Abaixo são demonstrados os passos necessários para efetuar a importação da API em seu projeto Lazarus. A IDE usada é a Lazarus 1.4.2.

Buscando o plugin necessário

No menu do topo, vá em Pacote > Instalar/desinstalar pacotes.

No campo disponível para instalação, digite LazActiveX 0.1. Selecione o plugin e depois clique em Instalar Seleção.
Após isso, clique em Salvar e Reconstruir IDE. Terminado o processo, o Lazarus será reinicializado.

Importando o componente

No menu do topo, vá em Ferramentas > Import Type Library.
Clique na aba ActiveX References, selecionando o componente Cappta_Gp_Api_Com

OBS.: Este item irá aparecer apenas se o CapptaGpPlus, versão 3.1 ou posterior, estiver instalado na máquina.

Após clicar em OK, será mostrada a janela do editor de código, com um novo unit. Grave este novo arquivo.
Com isso, basta criar uma nova instância da classe IClienteCappta e realizar a autenticação para começar a integrar outros serviços.

Suggest Edits

Realizando a autenticação

 

Antes de realizar seus pagamentos será necessário autenticar o seu PDV, para isso a classe ClienteCappta disponibiliza o método AutenticarPdv

Parâmetro
Tipo
Descrição

cnpj

string

É o CNPJ da loja que está utilizando o TEF da Cappta, precisa ser equivalente ao que está configurado no CapptaGpPlus

pdv

int

Número de pdv do CNPJ que está utilizando o TEF da Cappta, precisa ser equivalente ao que está configurado no CapptaGpPlus

chaveAutenticacao

string

Chave de autenticação do integrador disponibilizada pela turma de homologação

Para detalhamento dos códigos de retorno consulte a tabela Possíveis códigos de retorno

Para recuperar o CNPJ e PDV do TEF basta clicar com o botão direito do mouse no ícone do CapptaGpPlus no taskbar do windows e selecionar a opção Sobre o Cappta Cartões a tela que será exibida contém as informações necessárias.
A chave de autenticação será fornecida pelo time de homologação assim que o processo de integração for solicitado. Ela deverá ser sempre utilizada para identificar o seu software.

Obs: Caso a chave utilizada seja inválida, o CapptaGpPlus não irá autenticar a integração.

Importante

Não há necessidade de criar um objeto capptaGpPlus, toda vez que for fazer uma operação, por favor utilize a IteracaoTef

using System;
using Cappta.Gp.Api.Com;

namespace CappAPIIntegration
{
    class Program
    {
        static void Main(string[] args)
        {
            ClienteCappta cappta = new ClienteCappta();

            string cnpj = "00000000000000";
            int pdv = 8;
            string chaveAutenticacao = "2C1CE88C6A0C4FA6BF2D519B1DB31DF4";

            int resultadoAutenticacao = cappta.AutenticarPdv(cnpj, pdv, chaveAutenticacao);
            if (resultadoAutenticacao != 0)
            {
                Console.WriteLine("Não foi possível autenticar com o CapptaGpPlus");
                return;
            }
        }
    }
}
program cappapiintegration;

uses Cappta_Gp_Api_Com_1_0_TLB;

var
  cappta : IClienteCappta;
  cnpj : string = '00000000000000';
  pdv : integer = 8;
  chaveAutenticacao : string = '2C1CE88C6A0C4FA6BF2D519B1DB31DF4';
  resultadoAutenticacao : integer;

begin
  cappta := CoClienteCappta.Create;

  resultadoAutenticacao := cappta.AutenticarPdv(cnpj, pdv, chaveAutenticacao);
  if resultadoAutenticacao <> 0 then
  begin
       WriteLn('Não foi possível autenticar com o CapptaGpPlus');
       exit;
  end
Imports Cappta.Gp.Api.Com.Model
Module Module1
    Sub Main()

        Dim cappta As New ClienteCappta()

        Dim cnpj As String = "00000000000000"
        Dim pdv As Integer = 8
        Dim chaveAutenticacao As String = "2C1CE88C6A0C4FA6BF2D519B1DB31DF4"

        Dim resultadoAutenticacao = cappta.AutenticarPdv(cnpj, pdv, chaveAutenticacao)

        If resultadoAutenticacao <> 0 Then

            Console.WriteLine("Não foi possível autenticar com o CapptaGpPlus")

        End If

    End Sub
End Module
private void AutenticarPDV() {
        int resultadoAltenticacao;
        resultadoAltenticacao = cappta.autenticarPdv(cnpj, pdv, chaveAutenticacao);

        switch (resultadoAltenticacao) {
            case 1:
                CriarMensagemErroJanela("Não autorizado. Por favor, realize a autenticação para utilizar o CapptaGpPlus");
                break;
            case 2:
                CriarMensagemErroJanela("O CapptaGpPlus esta sendo inicializado, tente novamente em alguns instantes.");
                break;
            case 3:
                CriarMensagemErroJanela("O formato da requisição recebida pelo CapptaGpPlus é inválido.");
                break;
            case 4:
                CriarMensagemErroJanela("Operação cancelada pelo operador.");
                break;
            case 7:
                CriarMensagemErroJanela("Ocorreu um erro interno no CapptaGpPlus.");
                break;
            case 8:
                CriarMensagemErroJanela("Ocorreu um erro na comunicação entre a CappAPI e o CapptaGpPlus.");
                break;
            case 0:
                TextBoxResultado.setText("Autenticado com sucesso");
                break;
        }
    }
Public Sub AutenticarPDV()
    
  Dim resultadoAutenticacao As Long
    
    resultadoAutenticacao = cappta.AutenticarPDV(CNPJ, NumeroPDV, ChavePDV)
   
    If resultadoAutenticacao = 0 Then
            
        Exit Sub
    End If
    
    MsgBox (MensagensPainel.mensagem(resultadoAutenticacao))
   
End Sub
Suggest Edits

Configurando sua integração

 

Após realizar a autenticação, é possível configurar sua integração com a CapptAPI e definir algumas regras específicas (confira detalhes nas tabelas abaixo), para isso a classe ClienteCappta disponibiliza o método Configurar

Parâmetro
Tipo
Descrição

configs

IConfiguracoes

Objeto contendo as opções disponiveis para configurar o CapptaGpPlus

Para detalhamento dos códigos de retorno consulte a tabela Possíveis códigos de retorno

Esta é a interface da Cappta no modo integração Visível

Esta é a interface da Cappta no modo integração Visível

Propriedade
Obrigatório?
Tipo
Descrição

ExibirInterface

Não. Por padrão sempre é false

bool

Determina a maneira de integração com a CappAPI, caso seja enviado true, cuidamos de toda a interação com o usuário para você (integração Foreground). Caso seja enviado false, a integração será completamente transparente (Background), ou seja, o CapptaGpPlus irá devolver todos os passos que devem ser executados, entre eles a exibição de mensagens ou a solicitação de alguns dados básicos para dar continuidade aos pagamentos.

using System;
using Cappta.Gp.Api.Com;

namespace CappAPIIntegration
{
    class Program
    {
        static void Main(string[] args)
        {
            //Não esqueça de realizar a autenticação aqui \o/
            IConfiguracoes configs = new Configuracoes
            {
                ExibirInterface = true
            };

            int resultado = cappta.Configurar(configs);
            if (resultado != 0)
            {
                Console.WriteLine("Não foi possível realizar a configuração");
                return;
            }
        }
    }
}
program cappapiintegration;

uses Cappta_Gp_Api_Com_1_0_TLB;

var
  cappta : IClienteCappta;
  resultado : integer;
  configs : IConfiguracoes;

begin
  // -- Não esqueça de realizar a autenticação aqui \o/ --

  configs := CoConfiguracoes.Create;  
  configs.Set_ExibirInterface(true);

  resultado := cappta.Configurar(configs);
  if resultado <> 0 then
  begin
       WriteLn('Não foi possível realizar a configuração');
       exit;
  end;
end.

Imports Cappta.Gp.Api.Com.Model

Module Module1
    Sub Main()

        Dim cappta As New ClienteCappta()

        Dim configs As IConfiguracoes = New Configuracoes
        configs.ExibirInterface = True

        Dim resultado = cappta.Configurar(configs)

        If resultado <> 0 Then
            Console.WriteLine("Não foi possível realizar a configuração")
            Return
        End If

    End Sub
End Module
private void ConfigurarModoIntegracao(boolean exibir) {
        IConfiguracoes configs = ClassFactory.createConfiguracoes();
        configs.exibirInterface(exibir);
        cappta.configurar(configs);
    }
Private Sub ConfigurarModoIntegracao(exibirGp As Boolean)
    
    Dim configs As New Configuracoes
    configs.ExibirInterface = exibirGp
    
    Dim result As Long
    result = cappta.Configurar(configs)
    
    If result <> 0 Then
        CriarMensagem (MensagensPainel.mensagem(result))
    End If
    
End Sub
Suggest Edits

Iterando sobre uma operação de pagamento ou administrativa

 

Após a execução de qualquer uma das operações de pagamento ou administrativa será necessário iniciar o fluxo iteração tef para recuperar os estados do CapptaGpPlus.

É necessário atentar-se ao seguinte detalhe, ao receber uma resposta de Operação Aprovada caso seja um pagamento não será possível executar nenhuma outra operação até que se tenha confirmado ou desfeito a atual.

Para mais detalhes sobre as implementações da interface IIteracaoTef que é retornada consultar a sessão Implementações da interface IIteracaoTef .

using System;
using Cappta.Gp.Api.Com;

namespace CappAPIIntegration
{
    class Program
    {
        static void Main(string[] args)
        {
            //Não esqueça de realizar a autenticação e iniciar uma operação tef aqui \o/

            do
            {
                if (iteracaoTef is IMensagem)
                {
                    IMensagem mensagem = iteracaoTef as IMensagem;
                    Console.WriteLine(mensagem.Descricao);
                }

                else if(iteracaoTef is IRespostaTransacaoPendente)
                {
                    IRespostaTransacaoPendente transacoesPendentes = iteracaoTef as IRespostaTransacaoPendente;
                    Console.WriteLine(transacoesPendentes.Mensagem);

                    foreach (var transacao in transacoesPendentes.ListaTransacoesPendentes)
                    {
                        Console.WriteLine(transacoesPendentes.NumeroControle);
                        Console.WriteLine(transacoesPendentes.NomeBandeiraCartao);
                        Console.WriteLine(transacoesPendentes.NomeAdquirente);
                        Console.WriteLine(transacoesPendentes.Valor);
                        Console.WriteLine(transacoesPendentes.DataHoraAutorizacao);
                    }

                    // Enviamos o parametro com valor de "1" para confirmar a transação pendente e o parametro acao como 1 para avançar a operação.
                    cappta.EnviarParametro(parametro: "1", acao: 1);
                }

                else if(iteracaoTef is IRequisicaoParametro)
                {
                    IRequisicaoParametro reqParametro = iteracaoTef as IRequisicaoParametro;
                    Console.WriteLine(reqParametro.Mensagem);
                    string parametro = Console.ReadLine();

                    //Continue lendo que daqui a pouco já explicamos esta função ;)
                    cappta.EnviarParametro(parametro, String.IsNullOrWhiteSpace(parametro) ? 1 : 2);
                }

                iteracaoTef = cappta.IterarOperacaoTef();

            } while (PagamentoFinalizado(iteracaoTef) == false);

            //Agora basta tratar o resultado da iteração =D

            //Eiii o/, caso a operação seja um pagamento não esqueça de confirma-lo ou desfaze-lo aqui
        }

        public static bool PagamentoFinalizado(IIteracaoTef iteracaoTef)
        {
            return iteracaoTef is IRespostaOperacaoAprovada
                || iteracaoTef is IRespostaOperacaoRecusada;
        }
    }
}
program cappapiintegration;

uses Cappta_Gp_Api_Com_1_0_TLB, SysUtils;

var
  cappta : IClienteCappta;
  iteracaoTef : IIteracaoTef;
  tipoIteracao : integer;
  mensagem : IMensagem;
  reqParametro : IRequisicaoParametro;
  transacoesPendentes : IRespostaTransacaoPendente;
  parametro: string;
  acaoRequisicao: integer;
  transacoesPendentesSafeArray: PSafeArray;
  lBound, uBound, contadorTransacoesPendentes: LongInt;
  transacaoPendente: ITransacaoPendente;

begin
  // -- Não esqueça de realizar a autenticação e iniciar uma operação tef aqui \o/ --

  Repeat

    iteracaoTef := cappta.IterarOperacaoTef();
    tipoIteracao := iteracaoTef.Get_TipoIteracao;

    if tipoIteracao is IMensagem then
    begin
       mensagem := (iteracaoTef as IMensagem);
       WriteLn(mensagem.Get_Descricao);
    end;


    if tipoIteracao is IRespostaTransacaoPendente then
    begin
       transacoesPendentes := (iteracaoTef as IRespostaTransacaoPendente);
       WriteLn(transacoesPendentes.Get_Mensagem);

       transacoesPendentesSafeArray := transacoesPendentes.Get_ListaTransacoesPendentes;

       SafeArrayGetLBound(transacoesPendentesSafeArray, 1, lBound);
       SafeArrayGetUBound(transacoesPendentesSafeArray, 1, uBound);

       for Contador := lBound to uBound do
         begin
              SafeArrayGetElement(transacoesPendentesSafeArray, @contador, transacaoPendente);

              WriteLn(transacaoPendente.Get_numeroControle);
              WriteLn(transacaoPendente.Get_NomeBandeiraCartao);
              WriteLn(transacaoPendente.Get_NomeAdquirente);
              WriteLn(transacaoPendente.Get_valor);
              WriteLn(transacaoPendente.Get_DataHoraAutorizacao);
          end;

       // Enviamos o primeiro parametro com valor de "1" para confirmar a transação pendente e o segundo parametro com valor de 1 para avançar a operação.
       cappta.EnviarParametro('1', 1);
    end;



    if tipoIteracao is IRequisicaoParametro then
    begin
       reqParametro := (iteracaoTef as IRequisicaoParametro);
       WriteLn(reqParametro.Get_Mensagem);
       ReadLn(Input, parametro);

       if Length(parametro) = 0 then
       begin
         acaoRequisicao := 2;
         parametro := ' ';
       end
       else begin acaoRequisicao := 1; end;

       // -- Continue lendo que daqui a pouco já explicamos esta função ;) --

       cappta.EnviarParametro(parametro, acaoRequisicao);
    end;

  Until (iteracaoTef.Get_TipoIteracao <> 1) and (iteracaoTef.Get_TipoIteracao <> 2);

  // -- Agora basta tratar o resultado da iteração =D --

  // -- Eiii o/, caso a operação seja um pagamento não esqueça de confirma-lo ou desfaze-lo aqui --
end.
Imports Cappta.Gp.Api.Com
Imports Cappta.Gp.Api.Com.Model

Module Module1
    Sub Main()

        Dim cappta As New ClienteCappta()

        Dim iteracaoTef As IIteracaoTef

        Do
            iteracaoTef = cappta.IterarOperacaoTef()

            If TypeOf iteracaoTef Is IMensagem Then
                Dim mensagem As IMensagem = iteracaoTef
                Console.WriteLine(mensagem.Descricao)
            End If

            If TypeOf iteracaoTef Is IRequisicaoParametro Then

                Dim reqParametro As IRequisicaoParametro = iteracaoTef
                Console.WriteLine(reqParametro.Mensagem)

                Dim input = Console.ReadLine()
                Dim parametro As Integer

                If (String.IsNullOrWhiteSpace(input)) Then
                    parametro = 2
                Else
                    parametro = 1
                End If
                cappta.EnviarParametro(input, parametro)
            End If

            If TypeOf iteracaoTef Is IRespostaTransacaoPendente Then

                Dim transacoesPendentes As IRespostaTransacaoPendente = iteracaoTef

                For Each transacao In transacoesPendentes.ListaTransacoesPendentes
                    Console.WriteLine(transacao.NumeroControle)
                    Console.WriteLine(transacao.NomeBandeiraCartao)
                    Console.WriteLine(transacao.NomeAdquirente)
                    Console.WriteLine(transacao.Valor)
                    Console.WriteLine(transacao.DataHoraAutorizacao)

                Next
                'Enviamos o parametro com valor de "1" para confirmar a transação pendente e o parametro acao como 1 para avançar a operação.
                cappta.EnviarParametro("1", 1)

            End If

        Loop While PagamentoFinalizado(iteracaoTef) = False
    End Sub

    Function PagamentoFinalizado(iteracaoTef As IIteracaoTef)

        Return TypeOf iteracaoTef Is IRespostaOperacaoAprovada Or TypeOf iteracaoTef Is IRespostaOperacaoRecusada

    End Function


End Module
Public Sub IterarOperacaoTef(objCappta As ClienteCappta)
 
 If OptionUsarMultiTef.Value Then
    DesabilitarControlesMultiTef
 End If
 DesabilitarBotoes

 Dim iteracaoTef As Cappta_Gp_Api_Com.IIteracaoTef

 Do
 
    Set iteracaoTef = objCappta.IterarOperacaoTef()

    If TypeOf iteracaoTef Is IMensagem Then
        Call ExibirMensagem(iteracaoTef)
        Sleep INTERVALO_MILISEGUNDOS
    End If

    If TypeOf iteracaoTef Is IRequisicaoParametro Then
        Call RequisitarParametros(iteracaoTef, objCappta)
    End If

    If TypeOf iteracaoTef Is IRespostaTransacaoPendente Then
        Call ResolverTransacaoPendente(iteracaoTef, objCappta)
    End If

    If TypeOf iteracaoTef Is IRespostaOperacaoRecusada Then
        Call ExibirDadosOperacaoRecusada(iteracaoTef)
    End If

    If TypeOf iteracaoTef Is IRespostaOperacaoAprovada Then
        Call ExibirDadosOperacaoAprovada(iteracaoTef)
        Call FinalizarPagamento(objCappta)
    End If

  Loop While OperacaoNaoFinalizada(iteracaoTef)
  
  If sessaoMultiTefEmAndamento = False Then
    HabilitarControlesMultiTef
  End If
  HabilitarBotoes
  

End Sub
 private void IterarOperacaoTef() {
        if (this.RadioButtonUsarMultiTef.isSelected()) {
            this.DesabilitarControlesMultiTef();
        }
        this.DesabilitarBotoes();
        IIteracaoTef iteracaoTef = null;

        do {
            iteracaoTef = cappta.iterarOperacaoTef();
            if (iteracaoTef.is(IMensagem.class)) {
                IMensagem iMensagem = iteracaoTef.queryInterface(IMensagem.class);
                ExibirMensagem(iMensagem);
            }

            if (iteracaoTef.is(IRequisicaoParametro.class)) {
                IRequisicaoParametro iRequisicaoParametro = iteracaoTef.queryInterface(IRequisicaoParametro.class);
                RequisitarParametros(iRequisicaoParametro);
            }

            if (iteracaoTef.is(IRespostaTransacaoPendente.class)) {
                IRespostaTransacaoPendente resposta = iteracaoTef.queryInterface(IRespostaTransacaoPendente.class);
                ResolverTransacaoPendente(resposta);
            }
            if (iteracaoTef.is(IRespostaOperacaoRecusada.class)) {
                IRespostaOperacaoRecusada resposta = iteracaoTef.queryInterface(IRespostaOperacaoRecusada.class);
                ExibirDadosOperacaoRecusada(resposta);
            }
            if (iteracaoTef.is(IRespostaOperacaoAprovada.class)) {
                IRespostaOperacaoAprovada resposta = iteracaoTef.queryInterface(IRespostaOperacaoAprovada.class);
                ExibirDadosOperacaoAprovada(resposta);
                FinalizarPagamento();
            }

        } while (OperacaoNaoFinalizada(iteracaoTef));

        if (this.sessaoMultiTefEmAndamento == false) {
            this.HabilitarControlesMultiTef();
        }//true
        HabilitarBotoes();
    }
Suggest Edits

Implementações da interface IIteracaoTef

 

Uma implementação da interface IIteracaoTef será retornada pelo método IterarOperacaoTef, as possibilidades de objetos retornados são:

  • IRespostaOperacaoAprovada
  • IRespostaOperacaoRecusada
  • IRespostaTransacaoPendente
  • IMensagem
  • IRequisicaoParametro
public interface IIteracaoTef
{
    int TipoIteracao { get; }
}
// -- Esse código é apenas ilustrativo: a interface será implementada com a importação da API. --

IIteracaoTef = interface(IDispatch)
    function Get_TipoIteracao : Integer; safecall;
    function Clone:IIteracaoTef;safecall;
    property TipoIteracao:Integer read Get_TipoIteracao;
end;  

    Public Interface IIteracaoTef
        ReadOnly Property TipoIteracao
    End Interface
Suggest Edits

Operação aprovada

 

Atenção

A Adquirente Cielo não retorna nas respostas de transação aprovada o Nsu, sendo assim criamos o NsuTef que tem a mesma função do NSU.

Obs: Apenas para a Cielo, nas demais por favor utilizar o NsuAdquirente

Possui dados da operação aprovada como cupons, controle, adquirente responsável pela autorização, bandeira do cartão, data de autorização, etc.

Propriedade
Tipo
Descrição

TipoIteracao

int

Representa o tipo de iteração de mensagem e possui o valor fixo 1

NsuTef

ulong

Número sequencial único do canal de pagamento

NsuAdquirente

string

Número sequencial único da adquirente

CodigoAutorizacaoAdquirente

string

Código de autorização retornado pela adquirente

CupomCliente

string

Comprovante de pagamento ou estorno do cliente

CupomLojista

string

Comprovante de pagamento ou estorno do estabelecimento

CupomReduzido

string

Comprovante de pagamento ou estorno com tamanho reduzido

NomeAdquirente

string

Nome da adquirente responsável pela aprovação do pagamento ou cancelamento

NomeBandeiraCartao

string

Nome da bandeira do cartão do cliente

NumeroControle

string

Identificador único para pagamentos, é devolvido quando a transação é autorizada mas também pode ser consultado no portal de transações Cappta

DataHoraAutorizacao

DateTime

Contém a data + hora completa da autorização do pagamento ou cancelamento

CodigoBandeiraCartao

int

Código da bandeira do cartão, consulte aqui a Tabela de bandeira de cartões

NumeroCartaoCliente

string

Número do cartão (PAN) utilizado no pagamento, cifrado no seguinte formato: 999999**9999

NumeroAfiliacao

string

Número de afiliação do estabelecimento na rede adquirente. Obs.: Também conhecido como “Número Lógico” ou “Código do Estabelecimento”

QuantidadeParcelas

int

Quantidade de parcelas do pagamento. Para pagamentos na modalidade Débito ou Crédito à vista, terá como valor padrão 1

public interface IRespostaOperacaoAprovada : IIteracaoTef
{
    ulong NsuTef { get; }

    string CodigoAutorizacaoAdquirente { get; }

    string CupomCliente { get; }

    string CupomLojista { get; }

    string CupomReduzido { get; }

    string NomeAdquirente { get; }

    string NomeBandeiraCartao { get; }

    string NsuAdquirente { get; }

    string NumeroControle { get; }

    DateTime DataHoraAutorizacao { get; }

    int CodigoBandeiraCartao { get; }

    string NumeroCartaoCliente { get; }

    string NumeroAfiliacao { get; }

    int QuantidadeParcelas { get; }
}
// -- Esse código é apenas ilustrativo: a interface será implementada com a importação da API. --

IRespostaOperacaoAprovada = interface(IDispatch)
    function Get_CodigoAutorizacaoAdquirente : WideString; safecall;
    function Get_CupomCliente : WideString; safecall;
    function Get_CupomLojista : WideString; safecall;
    function Get_CupomReduzido : WideString; safecall;
    function Get_DataHoraAutorizacao : TDateTime; safecall;
    function Get_NomeAdquirente : WideString; safecall;
    function Get_NomeBandeiraCartao : WideString; safecall;
    function Get_NsuAdquirente : WideString; safecall;
    function Get_NsuTef : QWord; safecall;
    function Get_numeroControle : WideString; safecall;
    function Get_CodigoBandeiraCartao : Integer; safecall;
    function Get_NumeroCartaoCliente : WideString; safecall;
    function Get_NumeroAfiliacao : WideString; safecall;
    function Get_QuantidadeParcelas : Integer; safecall;
    property CodigoAutorizacaoAdquirente:WideString read Get_CodigoAutorizacaoAdquirente;
    property CupomCliente:WideString read Get_CupomCliente;
    property CupomLojista:WideString read Get_CupomLojista;
    property CupomReduzido:WideString read Get_CupomReduzido;
    property DataHoraAutorizacao:TDateTime read Get_DataHoraAutorizacao;
    property NomeAdquirente:WideString read Get_NomeAdquirente;
    property NomeBandeiraCartao:WideString read Get_NomeBandeiraCartao;
    property NsuAdquirente:WideString read Get_NsuAdquirente;
    property NsuTef:QWord read Get_NsuTef;
    property numeroControle:WideString read Get_numeroControle;
    property CodigoBandeiraCartao:Integer read Get_CodigoBandeiraCartao;
    property NumeroCartaoCliente:WideString read Get_NumeroCartaoCliente;
    property NumeroAfiliacao:WideString read Get_NumeroAfiliacao;
    property QuantidadeParcelas:Integer read Get_QuantidadeParcelas;
end;
Private ReadOnly Property NsuTef() As ULong
        Get
            Return NsuTef
        End Get
End Property
  
Private ReadOnly Property CodigoAutorizacaoAdquirente() As String
        Get
            Return CodigoAutorizacaoAdquirente
        End Get
End Property
  
Private ReadOnly Property CupomCliente() As String
        Get
            Return CupomCliente
        End Get
End Property
  
 Private ReadOnly Property CupomLojista() As String
        Get
            Return CupomLojista
        End Get
 End Property
 
 Private ReadOnly Property CupomReduzido() As String
        Get
            Return CupomReduzid
        End Get
 End Property
  
Private ReadOnly Property NomeAdquirente() As String
        Get
            Return NomeAdquirente
        End Get
 End Property  
 
   Private ReadOnly Property NomeBandeiraCartao() As String
        Get
            Return NomeBandeiraCartao
        End Get
   End Property
  
  Private ReadOnly Property NsuAdquirente() As String
        Get
            Return NsuAdquirente
        End Get
    End Property
  
  Private ReadOnly Property NsuAdquirente() As String
        Get
            Return NsuAdquirente
        End Get
    End Property
  
Private ReadOnly Property DataHoraAutorizacao() As  DateTime
        Get
            Return DataHoraAutorizacao
        End Get
    End Property
  
Private ReadOnly Property CodigoBandeiraCartao() As Integer
        Get
            Return CodigoBandeiraCartao
        End Get
    End Property

  Private ReadOnly Property NumeroCartaoCliente() As String
        Get
            Return NumeroCartaoCliente
        End Get
    End Property
  
   Private ReadOnly Property NumeroAfiliacao() As String
        Get
            Return NumeroAfiliacao
        End Get
    End Property
  
  Private ReadOnly Property QuantidadeParcelas() As String
        Get
            Return QuantidadeParcelas
        End Get
    End Property
		
//Apenas ilustrativo

public String getNsuTef() {
        return NsuTef;
    }

    public void setNsuTef(String NsuTef) {
        this.NsuTef = NsuTef;
    }

    public String getCodigoAutorizacaoAdquirente() {
        return CodigoAutorizacaoAdquirente;
    }

    public void setCodigoAutorizacaoAdquirente(String CodigoAutorizacaoAdquirente) {
        this.CodigoAutorizacaoAdquirente = CodigoAutorizacaoAdquirente;
    }

    public String getCupomCliente() {
        return CupomCliente;
    }

    public void setCupomCliente(String CupomCliente) {
        this.CupomCliente = CupomCliente;
    }

    public String getCupomLojista() {
        return CupomLojista;
    }

    public void setCupomLojista(String CupomLojista) {
        this.CupomLojista = CupomLojista;
    }

    public String getCupomReduzido() {
        return CupomReduzido;
    }

    public void setCupomReduzido(String CupomReduzido) {
        this.CupomReduzido = CupomReduzido;
    }

    public String getNomeAdquirente() {
        return NomeAdquirente;
    }

    public void setNomeAdquirente(String NomeAdquirente) {
        this.NomeAdquirente = NomeAdquirente;
    }

    public String getNomeBandeiraCartao() {
        return NomeBandeiraCartao;
    }

    public void setNomeBandeiraCartao(String NomeBandeiraCartao) {
        this.NomeBandeiraCartao = NomeBandeiraCartao;
    }

    public String getNsuAdquirente() {
        return NsuAdquirente;
    }

    public void setNsuAdquirente(String NsuAdquirente) {
        this.NsuAdquirente = NsuAdquirente;
    }

    public String getNumeroControle() {
        return NumeroControle;
    }

    public void setNumeroControle(String NumeroControle) {
        this.NumeroControle = NumeroControle;
    }

    public Date getDataHoraAutorizacao() {
        return DataHoraAutorizacao;
    }

    public void setDataHoraAutorizacao(Date DataHoraAutorizacao) {
        this.DataHoraAutorizacao = DataHoraAutorizacao;
    }

    public int getCodigoBandeiraCartao() {
        return CodigoBandeiraCartao;
    }

    public void setCodigoBandeiraCartao(int CodigoBandeiraCartao) {
        this.CodigoBandeiraCartao = CodigoBandeiraCartao;
    }

    public String getNumeroCartaoCliente() {
        return NumeroCartaoCliente;
    }

    public void setNumeroCartaoCliente(String NumeroCartaoCliente) {
        this.NumeroCartaoCliente = NumeroCartaoCliente;
    }

    public String getNumeroAfiliacao() {
        return NumeroAfiliacao;
    }

    public void setNumeroAfiliacao(String NumeroAfiliacao) {
        this.NumeroAfiliacao = NumeroAfiliacao;
    }

    public int getQuantidadeParcelas() {
        return QuantidadeParcelas;
    }

    public void setQuantidadeParcelas(int QuantidadeParcelas) {
        this.QuantidadeParcelas = QuantidadeParcelas;
    }
     
Suggest Edits

Operação negada

 

Possui o motivo pelo qual a operação foi negada e um código respectivo (para mais detalhes consultar a tabela Códigos de motivo para operações negadas).

Propriedade
Tipo
Descrição

CodigoMotivo

int

Código que representa o motivo pelo qual a operação foi negada, as possibilidades deste código podem ser consultadas na tabela [Códigos de motivo para operações negadas]

TipoIteracao

int

Representa o tipo de iteração de mensagem e possui o valor fixo 2

Motivo

int

Descreve o motivo pelo qual a operação foi negada

public interface IRespostaOperacaoRecusada : IIteracaoTef
{
  int CodigoMotivo { get; }

  string Motivo { get; }
}
// -- Esse código é apenas ilustrativo: a interface será implementada com a importação da API. --

IRespostaOperacaoRecusada = interface(IDispatch)
    function Get_CodigoMotivo : Integer; safecall;
    function Get_Motivo : WideString; safecall;
    property CodigoMotivo:Integer read Get_CodigoMotivo;
    property Motivo:WideString read Get_Motivo;
end;
'Esse código é apenas ilustrativo: Para mais exemplos consulte nosso exemplo de código (Sample). Entre em contato com a equipe
Private ReadOnly Property CodigoMotivo() As Integer
        Get
            Return CodigoMotivo
        End Get
End Property
 
Private ReadOnly Property Motivo() As String
        Get
            Return Motivo
        End Get
End Property
  
Suggest Edits

Notificação de Transações Pendentes

 

Caso receba este tipo de resposta significa que uma ou mais transações (para o caso de uma sessão multi-cartões) ficaram pendentes, ou seja ao serem aprovadas não foram nem confirmadas e nem desfeitas. Ao receber esta notificação é necessário o uso da função EnviarParametro com o valor 1 para confirmar as transações ou 0 para desfazê-las (consulte Enviando parâmetros adicionais para a CappAPI) Em caso de dúvidas sobre o tratamento de pendencias consulte a sessão Confirmação e Desfazimento

Propriedade
Tipo
Descrição

Mensagem

string

É a mensagem enviada pelo CapptaGpPlus para ser exibida para o operador (opcionalmente)

ListaTransacoesPendentes

array de objeto do tipo ITransacaoPendente

Lista das transações que ficaram pendente

TipoIteracao

int

Representa o tipo de iteração de mensagem e possui o valor fixo 8

Detalhes de transação Pendente

Possui dados da transação que ficou pendente, com essas informações você pode (caso possua essa necessidade) conciliar o status da transação no seu software também, evitando inconsistência entre ele e o status da transação no CapptaGpPlus.

Propriedade
Tipo
Descrição

NumeroControle

string

Identificador única para pagamentos, é devolvido quando a transação é autorizada mas também pode ser consultado no portal de transações Cappta

NomeAdquirente

string

Nome da adquirente responsável pela aprovação do pagamento ou cancelamento

NomeBandeiraCartao

string

Nome da bandeira do cartão do cliente

DataHoraAutorizacao

DateTime

Contém a data+ hora completa da autorização do pagamento ou cancelamento

Valor

double

Valor da transação

public interface IRespostaTransacaoPendente : IIteracaoTef
{
    ITransacaoPendente[] ListaTransacoesPendentes { get; set; }

    String Mensagem { get; }
}
// -- Esse código é apenas ilustrativo: a interface será implementada com a importação da API. --

IRespostaTransacaoPendente = interface(IDispatch)
   function Get_ListaTransacoesPendentes : PSafeArray; safecall;
   procedure Set_ListaTransacoesPendentes(const pRetVal:PSafeArray); safecall;
   function Get_Mensagem : WideString; safecall;
   property ListaTransacoesPendentes:PSafeArray read Get_ListaTransacoesPendentes write Set_ListaTransacoesPendentes;
   property Mensagem:WideString read Get_Mensagem;
end;
'Esse código é apenas ilustrativo: Para mais exemplos consulte nosso exemplo de código (Sample). Entre em contato com a equipe
  Dim ListaTransacoesPendentes() As ITransacaoPendente
  Public ReadOnly Property Mensagem() As String
        Get
            Return Mensagem
        End Get
    End Property
public interface ITransacaoPendente
{
    string NumeroControle { get; }

    string NomeAdquirente { get; }

    string NomeBandeiraCartao { get; }

    DateTime DataHoraAutorizacao { get; }

    double Valor { get; }
}
// -- Esse código é apenas ilustrativo: a interface será implementada com a importação da API. --

IMensagem = interface(IDispatch)
   function Get_numeroControle : WideString; safecall;
   function Get_NomeAdquirente : WideString; safecall;
   function Get_NomeBandeiraCartao : WideString; safecall;
   function Get_DataHoraAutorizacao : TDateTime; safecall;
   function Get_valor : Double; safecall;
   property numeroControle:WideString read Get_numeroControle;
   property NomeAdquirente:WideString read Get_NomeAdquirente;
   property NomeBandeiraCartao:WideString read Get_NomeBandeiraCartao;
   property DataHoraAutorizacao:TDateTime read Get_DataHoraAutorizacao;
   property valor:Double read Get_valor;
end;
 

Contém uma mensagem do TEF para ser exibida pelo software integrador. Por exemplo, ao iniciar uma operação de pagamento independente da modalidade será necessário inserir o cartão no pinpad neste momento será devolvida a mensagem “Por favor, insira ou passe o cartão”.

Propriedade
Tipo
Descrição

Descricao

string

É a mensagem enviada pelo CapptaGpPlus para ser exibida para o operador

TipoIteracao

int

Representa o tipo de iteração de mensagem e possui o valor fixo 3

public interface IMensagem : IIteracaoTef
{
    string Descricao { get; }
}
// -- Esse código é apenas ilustrativo: a interface será implementada com a importação da API. --

IMensagem = interface(IDispatch)
    function Get_Descricao : WideString; safecall;  
    property Descricao:WideString read Get_Descricao;
end;
  'Esse código é apenas ilustrativo: Para mais exemplos consulte nosso exemplo de código (Sample). Entre em contato com a equipe
  
  Public ReadOnly Property Descricao() As String
        Get
            Return Descricao
        End Get
    End Property
Suggest Edits

Requisição de parâmetro

 

Retornada quando o CapptaGpPlus necessita de alguma informação para continuar o fluxo da operação TEF.

Propriedade
Tipo
Descrição

TipoIteracao

int

Representa o tipo de iteração de mensagem e possui o valor fixo 4

Mensagem

string

É a mensagem enviada pelo CapptaGpPlus para ser exibida para o operador, ela contém a solicitação do parâmetro necessário para prosseguir com a operação TEF

public interface IRequisicaoParametro : IIteracaoTef
{
    string Mensagem { get; }
}
// -- Esse código é apenas ilustrativo: a interface será implementada com a importação da API. --

IRequisicaoParametro = interface(IDispatch)
   function Get_Mensagem : WideString; safecall;
   property Mensagem:WideString read Get_Mensagem;
end;
'Esse código é apenas ilustrativo: Para mais exemplos consulte nosso exemplo de código (Sample). Entre em contato com a equipe
Public ReadOnly Property Mensagem() As String
        Get
            Return Mensagem
        End Get
    End Property
Suggest Edits

Enviando parâmetros adicionais para a CapptAPI

 

Caso o CapptaGpPlus esteja configurado para executar em modo Background, durante o fluxo de iteração do tef a função IterarOperacaoTef poderá retornar uma IRequisiscaoParametro.

Neste caso será necessário que o usuário final forneça o valor solicitado que estará descrito na propriedade Mensagem do objeto recebido.

Parâmetros
Tipo
Descrição

parametro

string

Valor informado pelo usuário final

acao

int

Existem apenas duas possibilidades, sendo elas 1 para avançar e 2 para cancelar a operação. Caso receba uma ação de cancelamento o valor do primeiro parâmetro será ignorado

Para detalhamento dos códigos de retorno consulte a tabela Possíveis códigos de retorno

O código a baixo é apenas ilustrativo não o utilize

using System;
using Cappta.Gp.Api.Com;

namespace CappAPIIntegration
{
    class Program
    {
        static void Main(string[] args)
        {
            //Não esqueça de realizar a autenticação e iniciar uma operação tef aqui \o/

            iteracaoTef = cappta.IterarOperacaoTef();
            if(iteracaoTef is IRequisicaoParametro == false)
            {
                Console.WriteLine("Não interessa nesse exemplo =p");
                return;
            }

            IRequisicaoParametro reqParametro = iteracaoTef as IRequisicaoParametro;
            Console.WriteLine(reqParametro.Mensagem);
            string parametro = Console.ReadLine();

            //Sendo 1 para "Avançar" e 2 para "Cancelar"
            cappta.EnviarParametro(parametro, String.IsNullOrWhiteSpace(parametro) ? 1 : 2);
        }
    }
}
program cappapiintegration;

uses Cappta_Gp_Api_Com_1_0_TLB, SysUtils;

var
  cappta : IClienteCappta;
  iteracaoTef : IIteracaoTef;
  tipoIteracao : integer;
  reqParametro : IRequisicaoParametro;
  parametro: string;
  acaoRequisicao: integer;

begin
  // -- Não esqueça de realizar a autenticação e iniciar uma operação tef aqui \o/ --

  iteracaoTef := cappta.IterarOperacaoTef();
  tipoIteracao := iteracaoTef.Get_TipoIteracao;

  if tipoIteracao <> 4 then
  begin
      WriteLn('Não interessa nesse exemplo =p');
      exit;
  end
  else
  begin
     reqParametro := (iteracaoTef as IRequisicaoParametro);
     WriteLn(reqParametro.Get_Mensagem);
     ReadLn(Input, parametro);

     if Length(parametro) = 0 then
     begin
       acaoRequisicao := 2;
       parametro := ' ';
     end
     else begin acaoRequisicao := 1; end;

     // -- Sendo 1 para "Avançar" e 2 para "Cancelar" --
     cappta.EnviarParametro(parametro, acaoRequisicao);
  end;
end.
Imports Cappta.Gp.Api.Com
Imports Cappta.Gp.Api.Com.Model

Module Module1
    Sub Main()

        Dim cappta As New ClienteCappta()

        Dim iteracaoTef As IIteracaoTef

        iteracaoTef = cappta.IterarOperacaoTef()

        If TypeOf iteracaoTef Is IRequisicaoParametro = False Then

            Console.WriteLine("Não interessa nesse exemplo =p")
            Return

        End If

        Dim reqParametro As IRequisicaoParametro = iteracaoTef
        Console.WriteLine(reqParametro.Mensagem)

        Dim input = Console.ReadLine()
        Dim parametro As Integer

        If (String.IsNullOrWhiteSpace(input)) Then
            parametro = 2
        Else
            parametro = 1
        End If
        cappta.EnviarParametro(input, parametro)

    End Sub

End Module
Private Sub RequisitarParametros(requisicaoParametros As IRequisicaoParametro, cappta As ClienteCappta)

    Dim result As Long
    Dim parametro As Long
    Dim entrada As String
    
    entrada = InputBox(requisicaoParametros.mensagem)
    
    If Len(entrada) <= 0 Then
        parametro = 2
    Else
        parametro = 1
    End If
        
    result = cappta.EnviarParametro(entrada, parametro)

End Sub
private void RequisitarParametros(IRequisicaoParametro requisicaoParametros)
 {
        String mensagem = input(requisicaoParametros.mensagem());
        int parametro;
        if (mensagem == null) {
            return;
        }
        if (mensagem.isEmpty()) {
            parametro = 2;
        } else {
            parametro = 1;
        }
        cappta.enviarParametro(mensagem, parametro);
    }
Suggest Edits

Confirmando ou desfazendo um pagamento

 

Sempre que retornamos Operação Aprovada, ficamos aguardando a confirmação por parte da sua automação para finalizar a operação de pagamento

Caso o cupom fiscal tenha sido impresso corretamente e deseje confirmar o pagamento utilize a função ConfirmarPagamentos(), caso contrário se houver algum problema na impressão do cupom fiscal e desejar desfazer e cancelar o pagamento utilize a função DesfazerPagamentos().

Reforçamos que para as operações administrativas como reimpressão e cancelamento não será necessário finalizar a operação ao receber uma resposta de Operação Aprovada no fluxo de iteração.

Obs: Esse valor pode ser alterado nas configurações da aplicação, para isso será necessário entrar em contato com o suporte da Cappta.

Para detalhamento dos códigos de retorno consulte a tabela Possíveis códigos de retorno

using System;
using Cappta.Gp.Api.Com;

namespace CappAPIIntegration
{
    class Program
    {
        static void Main(string[] args)
        {
            //Não esqueça da autenticação e do código para processar o pagamento aqui \o/

            IRespostaOperacaoAprovada pagamentoAprovado = iteracaoTef as IRespostaOperacaoAprovada;

            Console.WriteLine("Pagamento Aprovado =D");
            Console.WriteLine(pagamentoAprovado.CupomCliente);
            Console.WriteLine(pagamentoAprovado.CupomLojista);

            Console.WriteLine("Deseja confirmar este pagamento? (S/N)");
            ConsoleKeyInfo keyInfo = Console.ReadKey();

            int resultadoFinalizacao = keyInfo.Key == ConsoleKey.S
                ? cappta.ConfirmarPagamentos()
                : cappta.DesfazerPagamentos();

            if (resultadoFinalizacao != 0)
            {
                Console.WriteLine("Não foi possível finalizar o pagamento. Código de erro {0}", resultado);
                return;
            }
        }
    }
}
program cappapiintegration;

uses Cappta_Gp_Api_Com_1_0_TLB, SysUtils;

var
  cappta : IClienteCappta;
  iteracaoTef : IIteracaoTef;
  tipoIteracao : integer;
  resultado : integer;
  pagamentoAprovado : IRespostaOperacaoAprovada;
  keyInfo : string;

begin
  // -- Não esqueça de realizar a autenticação e iniciar uma operação tef aqui \o/ --

  iteracaoTef := cappta.IterarOperacaoTef();
  tipoIteracao := iteracaoTef.Get_TipoIteracao;

  if tipoIteracao <> 1 then
  begin
      WriteLn('Não interessa nesse exemplo =p');
      exit;
  end
  else
  begin
    pagamentoAprovado := (iteracaoTef as IRespostaOperacaoAprovada);

    WriteLn('Pagamento Aprovado =D');
    WriteLn(pagamentoAprovado.Get_CupomCliente);
    WriteLn(pagamentoAprovado.Get_CupomLojista);

    WriteLn('Deseja confirmar este pagamento? (S/N)');
    ReadLn(Input, keyInfo);

    if UpperCase(keyInfo) = 'S' then
    begin
        resultado := cappta.ConfirmarPagamentos;
    end
    else
    begin
        resultado := cappta.DesfazerPagamentos;
    end;

    if resultado <> 0 then
    begin
         WriteLn(Format('Não foi possível iniciar a operação. Código de erro %d', [resultado]));
         exit;
    end;
  end;
end.
Imports Cappta.Gp.Api.Com
Imports Cappta.Gp.Api.Com.Model

Module Module1
    Sub Main()

        Dim cappta As New ClienteCappta()

        Dim iteracaoTef As IIteracaoTef

        Dim pagamentoAprovado As IRespostaOperacaoAprovada = iteracaoTef

        Console.WriteLine("Pagamento Aprovado =D")
        Console.WriteLine(pagamentoAprovado.CupomCliente)
        Console.WriteLine(pagamentoAprovado.CupomLojista)

        Console.WriteLine("Deseja confirmar este pagamento? (S/N)")
        Dim keyInfo As ConsoleKeyInfo = Console.ReadKey()

        Dim resultadoFinalizacao As Integer
        If resultadoFinalizacao = keyInfo.Key = ConsoleKey.S Then
            cappta.ConfirmarPagamentos()

        Else
            cappta.DesfazerPagamentos()
        End If

        If resultadoFinalizacao <> 0 Then
            Console.WriteLine("Não foi possível finalizar o pagamento")
        End If

    End Sub

End Module
Imports Cappta.Gp.Api.Com
Imports Cappta.Gp.Api.Com.Model

Module Module1
    Sub Main()

        Dim cappta As New ClienteCappta()

        Dim iteracaoTef As IIteracaoTef

        Dim pagamentoAprovado As IRespostaOperacaoAprovada = iteracaoTef

        Console.WriteLine("Pagamento Aprovado =D")
        Console.WriteLine(pagamentoAprovado.CupomCliente)
        Console.WriteLine(pagamentoAprovado.CupomLojista)

        Console.WriteLine("Deseja confirmar este pagamento? (S/N)")
        Dim keyInfo As ConsoleKeyInfo = Console.ReadKey()

        Dim resultadoFinalizacao As Integer
        If resultadoFinalizacao = keyInfo.Key = ConsoleKey.S Then
            cappta.ConfirmarPagamentos()

        Else
            cappta.DesfazerPagamentos()
        End If

        If resultadoFinalizacao <> 0 Then
            Console.WriteLine("Não foi possível finalizar o pagamento")
        End If

    End Sub

End Module
private void FinalizarPagamento() 
  {
        if (processandoPagamento = false) {
            return;
        }
        if (sessaoMultiTefEmAndamento) {
            quantidadeCartoes--;
            if (quantidadeCartoes > 0) {
                return;
            }
        }
        String mensagem = GerarMensagemTransacaoAprovada();

        this.processandoPagamento = false;
        this.sessaoMultiTefEmAndamento = false;

        int dialogButton = JOptionPane.YES_NO_OPTION;
        int dialogResult = JOptionPane.showConfirmDialog(null, mensagem + "?", "", dialogButton);
        if (dialogResult == JOptionPane.YES_OPTION) {
            cappta.confirmarPagamentos();

        } else {
            cappta.desfazerPagamentos();
        }
    }
Suggest Edits

Pagamento

Abaixo serão descritas todas as formas de pagamento disponibilizadas pela CapptAPI

 

Voucher

Para pagamento com voucher deve ser enviado uma requisição de débito

Suggest Edits

Pagamento Débito / Voucher

 

Para realizar um pagamento débito ou voucher é bem simples, basta informar o valor a ser debitado

Parâmetros
Tipo
Descrição

valor

double

Valor do pagamento

Para detalhamento dos códigos de retorno consulte a tabela Possíveis códigos de retorno

using System;
using Cappta.Gp.Api.Com;

namespace CappAPIIntegration
{
    class Program
    {
        static void Main(string[] args)
        {
            //Não esqueça de realizar a autenticação aqui \o/

            int resultado = cappta.PagamentoDebito(100);
            if (resultado != 0)
            {
                Console.WriteLine("Não foi possível iniciar a operação");
                return;
            }

            //Agora basta continuar o fluxo de iteração do pagamento
        }
    }
}
program cappapiintegration;

uses Cappta_Gp_Api_Com_1_0_TLB;

var
  cappta : IClienteCappta;
  resultado : integer;

begin
  // -- Não esqueça de realizar a autenticação aqui \o/ --

  resultado := cappta.PagamentoDebito(10);
  if resultado <> 0 then
  begin
       WriteLn('Não foi possível iniciar a operação');
       exit;
  end;

  // -- Agora basta continuar o fluxo de iteração do pagamento --
end.
Imports Cappta.Gp.Api.Com
Imports Cappta.Gp.Api.Com.Model

Module Module1
    Sub Main()

        Dim cappta As New ClienteCappta()

        'Não esqueça de realizar a autenticação aqui \o/
					
        Dim resultado = cappta.PagamentoDebito(100)
        If resultado <> 0 Then
            Console.WriteLine("Não foi possível realizar a operação.")                
            Return
        End If

    End Sub
End Module
Private Sub ExecutarDebito_Click()
    
    If DeveIniciarMultiCartoes() Then
        IniciarMultiCartoes
    End If
     
    Dim valor As Double
    valor = CDbl(TxtValorPagamentoDebito.Text)
    
     If DeveIniciarMultiCartoes() Then
        IniciarMultiCartoes
    End If
        
    Dim resultado As Long
    resultado = cappta.PagamentoDebito(valor)
    
    If resultado <> 0 Then
        CriarMensagem (MensagensPainel.mensagem(resultado))
        Exit Sub
    End If
    
    processandoPagamento = True
    Call IterarOperacaoTef(cappta)
    
End Sub
private void PagamentoDebitoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonPagamentoDebitoActionPerformed
        if (this.DeveIniciarMultiCartoes()) {
            this.IniciarMulticartoes();
        }

        double valor = Double.parseDouble(jTextFieldValorDebito.getText());
        if(valor <= 0  ){
            CriarMensagemErroJanela("Por favor preencha com o valor");
            return;
        }
        if (this.DeveIniciarMultiCartoes()) {
            this.IniciarMulticartoes();
        }

        cappta.pagamentoDebito(valor);

        processandoPagamento = true;
        IterarOperacaoTef();
    }
Suggest Edits

Tipos de Parcelamento

 
Código
Descrição

1

Parcelamento Administradora - Configuração de parcelamento em que os juros são arcados pelo banco ou administradora, o limite de parcelas e valor mínimo são pré-estabelecidos e a venda não é tratada como parcelada para o lojista sendo assim o valor será depoistado integralmente em sua conta bancária. O cliente irá pagar as prestações com juros que serão revertidos para o banco/administradora do cartão

2

Parcelamento Lojista - É o parcelamento em que a quantidade de parcelas é definida no ato da compra. O limite de quantidade de parcelas e valor mínimo para cada uma pode ser determinado nas configurações do CapptaGpPlus. O lojista irá receber os créditos mensalmente em sua conta e o custo pelo financiamento é definido e arcado pelo próprio estabelecimento

Suggest Edits

Pagamento Crédito

 

O pagamento crédito também é bem simples, porém precisamos de alguns dados a mais para configura-lo, como quantidade de parcelas e a configuração de parcelamento (confira logo abaixo para mais detalhes).

Propriedades
Tipo
Descrição

valor

double

Valor do pagamento

detalhes

IDetalhesCredito

Objeto contendo o detalhamento do pagamento à crédito

Detalhes de pagamento crédito

Propriedade
Obrigatório?
Tipo
Descrição

TransacaoParcelada

Sim. Por padrão sempre é false

bool

Determina se o pagamento será parcelado

TipoParcelamento

Somente se TransacaoParcelada for true

int

Determina a configuração do parcelamento, verifique a tabela Tipos de Parcelamento para consultar os valores possíveis

QuantidadeParcelas

Somente se TransacaoParcelada for true

int

Quantidade de parcelas do pagamento

using System;
using Cappta.Gp.Api.Com;

namespace CappAPIIntegration
{
    class Program
    {
        static void Main(string[] args)
        {
            //Não esqueça de realizar a autenticação aqui \o/

            IDetalhesCredito detalhes = new DetalhesCredito
            {
                TransacaoParcelada = true,
                QuantidadeParcelas = 3,
                TipoParcelamento = 1 //Parcelamento Administradora
            };

            int resultado = cappta.PagamentoCredito(10D, detalhes);
            if (resultado != 0)
            {
                Console.WriteLine("Não foi possível iniciar a operação. Código de erro {0}", resultado);
                return;
            }

            //Agora basta continuar o fluxo de iteração do pagamento
        }
    }
}
program cappapiintegration;

uses Cappta_Gp_Api_Com_1_0_TLB, SysUtils;

var
  cappta : IClienteCappta;
  resultado : integer;
  detalhes : IDetalhesCredito;

begin
  // -- Não esqueça de realizar a autenticação aqui \o/ --

  detalhes := CoDetalhesCredito.Create;  
  detalhes.Set_TransacaoParcelada(true);
  detalhes.Set_QuantidadeParcelas(3);
  detalhes.Set_TipoParcelamento(1); // -- Parcelamento administradora --

  resultado := cappta.PagamentoCredito(10, detalhes);
  if resultado <> 0 then
  begin
       WriteLn(Format('Não foi possível iniciar a operação. Código de erro %d', [resultado]));
       exit;
  end;

  // -- Agora basta continuar o fluxo de iteração do pagamento --
end.  
Imports Cappta.Gp.Api.Com
Imports Cappta.Gp.Api.Com.Model

Module Module1
    Sub Main()

        Dim cappta As New ClienteCappta()

        'Não esqueça de realizar a autenticação aqui \o/
		
		Dim details As IDetalhesCredito = New DetalhesCredito
        details.QuantidadeParcelas = 3
        details.TipoParcelamento = 1
        details.TransacaoParcelada = true	
		
        Dim resultado =  cliente.PagamentoCredito(100, details)
        If resultado <> 0 Then
            Console.WriteLine("Não foi possível realizar a operação.")
            Return
        End If

    End Sub
End Module
Dim valor As Double
    valor = CDbl(TxtValorPagamentoCredito.Text)
    
    Dim detalhes As New DetalhesCredito
    
    detalhes.TransacaoParcelada = OptionTransacaoParceladaCreditoSim.Value
    detalhes.QuantidadeParcelas = UpDownNumeroParcelasCredito.Value
    detalhes.TipoParcelamento = TipoParcelamentoSelecionado()
    
    Dim resultado As Long
    resultado = cappta.PagamentoCredito(valor, detalhes)
    
    If resultado <> 0 Then
        CriarMensagem (MensagensPainel.mensagem(resultado))
        Exit Sub
    End If
    
    processandoPagamento = True
    Call IterarOperacaoTef(cappta)
    
End Sub
private void ExecutarCreditoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ExecutarCreditoActionPerformed
        if (this.DeveIniciarMultiCartoes()) {
            this.IniciarMulticartoes();
        }
        double valor = Double.parseDouble(jTextFieldValorCredito.getText());

        IDetalhesCredito idetalhesCredito = ClassFactory.createDetalhesCredito();
        idetalhesCredito.quantidadeParcelas((int) NumericUpDownQuantidadeParcelasPagamentoCredito.getValue());
        idetalhesCredito.tipoParcelamento(Administrador.getSelectedIndex());
        idetalhesCredito.transacaoParcelada(RadioButtonPagamentoCreditoComParcelas.isSelected());

        if (this.DeveIniciarMultiCartoes()) {
            this.IniciarMulticartoes();
        }

        int resultado = this.cappta.pagamentoCredito(valor, idetalhesCredito);

        if (resultado != 0) {
            this.CriarMensagemErroPainel(resultado);
            return;
        }

        this.processandoPagamento = true;
        this.IterarOperacaoTef();
    }
Suggest Edits

Pagamento Crediário

 

Assim como o pagamento crédito o crediário também necessita de alguns dados a mais para facilitar o seu processamento

Parâmetros
Descrição

valor

Valor do pagamento

detalhes

Objeto contendo o detalhamento do pagamento crediário

Detalhes de pagamento crediário

Propriedade
Obrigatório?
Tipo
Descrição

QuantidadeParcelas

Sim

int

Quantidade de parcelas do pagamento

using System;
using Cappta.Gp.Api.Com;

namespace CappAPIIntegration
{
    class Program
    {
        static void Main(string[] args)
        {
            //Não esqueça de realizar a autenticação aqui \o/

            IDetalhesCrediario detalhes = new DetalhesCrediario
            {
                QuantidadeParcelas = 3
            };

            int resultado = cappta.PagamentoCrediario(10D, detalhes);
            if (resultado != 0)
            {
                Console.WriteLine("Não foi possível iniciar a operação. Código de erro {0}", resultado);
                return;
            }

            //Agora basta continuar o fluxo de iteração do pagamento
        }
    }
}
program cappapiintegration;

uses Cappta_Gp_Api_Com_1_0_TLB, SysUtils;

var
  cappta : IClienteCappta;
  resultado : integer;
  detalhes : IDetalhesCrediario;

begin
  // -- Não esqueça de realizar a autenticação aqui \o/ --

  detalhes := CoDetalhesCrediario.Create;
  detalhes.Set_QuantidadeParcelas(3);

  resultado := cappta.PagamentoCrediario(10, detalhes);
  if resultado <> 0 then
  begin
       WriteLn(Format('Não foi possível iniciar a operação. Código de erro %d', [resultado]));
       exit;
  end;

  // -- Agora basta continuar o fluxo de iteração do pagamento --
end.      
Imports Cappta.Gp.Api.Com
Imports Cappta.Gp.Api.Com.Model

Module Module1
    Sub Main()

        Dim cappta As New ClienteCappta()

        'Não esqueça de realizar a autenticação aqui \o/
		
		Dim details As IDetalhesCrediario = New DetalhesCrediario
        details.QuantidadeParcelas = 3
       		
        Dim resultado =  cliente.PagamentoCrediario(100, details)
        If resultado <> 0 Then
            Console.WriteLine("Não foi possível realizar a operação.")
            Return
        End If

    End Sub
End Module
private void OnExecutaPagamentoCrediarioClick(object sender, EventArgs e)
{
	double valor = (double)NumericUpDownValorPagamentoCrediario.Value;
	IDetalhesCrediario detalhes = new DetalhesCrediario
	{
		QuantidadeParcelas = (int)NumericUpDownQuantidadeParcelasPagamentoCrediario.Value,
	};

	if (this.DeveIniciarMultiCartoes()) { this.IniciarMultiCartoes(); }

	int resultado = this.cliente.PagamentoCrediario(valor, detalhes);
	if (resultado != 0) { this.CriarMensagemErroPainel(resultado); return; }

	this.processandoPagamento = true;
	this.IterarOperacaoTef();
}
 private void ExecutaPagamentoCrediarioActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ExecutaPagamentoCrediarioActionPerformed
        double valor = (int) NumericUpDownValorPagamentoCrediario.getValue();
        IDetalhesCrediario detalhes = ClassFactory.createDetalhesCrediario();
        detalhes.quantidadeParcelas((int) NumericUpDownQuantidadeParcelasPagamentoCrediario.getValue());

        if (DeveIniciarMultiCartoes()) {
            IniciarMulticartoes();
        }

        int resultado = cappta.pagamentoCrediario(valor, detalhes);
        if (resultado != 0) {
            CriarMensagemErroPainel(resultado);
            return;
        }

        processandoPagamento = true;
        IterarOperacaoTef();
    }//GEN-LAST:event_ExecutaPagamentoCrediarioActionPerformed
Suggest Edits

Reimpressão

 

Existem dois tipos de reimpressão de cupons, aquele que reimprime o cupom do último pagamento ou cancelamento e também outra versão que permite especificar qual é o pagamento a partir do número de controle

Suggest Edits

Tipos de Vias para Reimpressão

 
Código
Descrição

1

Todas as vias, tanto a lojista como a do cliente

2

Somente a via do cliente

3

Somente a via do lojista

Suggest Edits

Reimpressão do Último Cupom

 

Para reimprimir o último cupom utilize a função abaixo:

Parâmetros
Descrição

tipoVia

Determina qual a via do cupom que deve ser reimpressa, verifique a tabela Tipos de Vias para Reimpressão para consultar os valores possíves

using System;
using Cappta.Gp.Api.Com;

namespace CappAPIIntegration
{
    class Program
    {
        static void Main(string[] args)
        {
            //Não esqueça de realizar a autenticação aqui \o/

            int tipoVia = 1; //Ambas as vias (Loja e cliente)

            int resultado = cappta.ReimprimirUltimoCupom(tipoVia);
            if (resultado != 0)
            {
                Console.WriteLine("Não foi possível iniciar a operação. Código de erro {0}", resultado);
                return;
            }

            //Agora basta continuar o fluxo de iteração da reimpressão
        }
    }
}
program cappapiintegration;

uses Cappta_Gp_Api_Com_1_0_TLB, SysUtils;

var
  cappta : IClienteCappta;
  resultado : integer;
  tipoVia : integer = 1; // -- Ambas as vias (Loja e cliente)

begin
  // -- Não esqueça de realizar a autenticação aqui \o/ --

  resultado := cappta.ReimprimirUltimoCupom(tipoVia);
  if resultado <> 0 then
  begin
       WriteLn(Format('Não foi possível iniciar a operação. Código de erro %d', [resultado]));
       exit;
  end;

  // -- Agora basta continuar o fluxo de iteração da reimpressão --
end.
Imports Cappta.Gp.Api.Com
Imports Cappta.Gp.Api.Com.Model

Module Module1
    Sub Main()

        Dim cappta As New ClienteCappta()

        'Não esqueça de realizar a autenticação aqui \o/
		Dim tipoVia As integer
		
        Dim resultado =  cappta.ReimprimirUltimoCupom(tipoVia)
        If resultado <> 0 Then
            Console.WriteLine("Não foi possível realizar a operação.")
            Return
        End If

    End Sub
End Module
Imports Cappta.Gp.Api.Com
Imports Cappta.Gp.Api.Com.Model

Module Module1
    Sub Main()

        Dim cappta As New ClienteCappta()

        'Não esqueça de realizar a autenticação aqui \o/
		Dim tipoVia As integer
		
        Dim resultado =  cappta.ReimprimirUltimoCupom(tipoVia)
        If resultado <> 0 Then
            Console.WriteLine("Não foi possível realizar a operação.")
            Return
        End If

    End Sub
End Module
package ProgramApi;

import Com.Api.Java.ClassFactory;
import Com.Api.Java.IClienteCappta;

public class Program {

    public static void main(String[] args) {
        IClienteCappta clienteCappta = ClassFactory.createClienteCappta();
        
        int tipoVia = 1;//Ambas as vias (Loja e cliente)
      
        int resultado = clienteCappta.reimprimirUltimoCupom(tipoVia);
        if (resultado != 0){
            System.out.println("Não foi possível iniciar a operação. Código de erro" + resultado);
          
        }
    }    
}
Suggest Edits

Reimpressão de um Cupom Específico

 

Do contrário caso queira reimprimir um cupom especifico utilize a seguinte função:

Parâmetros
Descrição

numeroControle

Identificador única para pagamentos, é devolvido quando a transação é autorizada mas também pode ser consultado no portal de transações Cappta

tipoVia

Determina qual a via do cupom que deve ser reimpressa, verifique a tabela Tipos de Vias para Reimpressão para consultar os valores possíveis

using System;
using Cappta.Gp.Api.Com;

namespace CappAPIIntegration
{
    class Program
    {
        static void Main(string[] args)
        {
            //Não esqueça de realizar a autenticação aqui \o/

            int tipoVia = 1; //Ambas as vias (Loja e cliente)

            int resultado = cappta.ReimprimirCupom("000000000", tipoVia);
            if (resultado != 0)
            {
                Console.WriteLine("Não foi possível iniciar a operação. Código de erro {0}", resultado);
                return;
            }

            //Agora basta continuar o fluxo de iteração da reimpressão
        }
    }
}
program cappapiintegration;

uses Cappta_Gp_Api_Com_1_0_TLB, SysUtils;

var
  cappta : IClienteCappta;
  resultado : integer;
  tipoVia : integer = 1; // -- Ambas as vias (Loja e cliente)

begin
  // -- Não esqueça de realizar a autenticação aqui \o/ --

  resultado := cappta.ReimprimirUltimoCupom('000000000', tipoVia);
  if resultado <> 0 then
  begin
       WriteLn(Format('Não foi possível iniciar a operação. Código de erro %d', [resultado]));
       exit;
  end;

  // -- Agora basta continuar o fluxo de iteração da reimpressão --
end.
Imports Cappta.Gp.Api.Com
Imports Cappta.Gp.Api.Com.Model

Module Module1
    Sub Main()

        Dim cappta As New ClienteCappta()

        'Não esqueça de realizar a autenticação aqui \o/
  
		Dim tipoVia As integer
		
        Dim resultado =  cappta.ReimprimirCupom("000000000", tipoVia)
        If resultado <> 0 Then
            Console.WriteLine("Não foi possível realizar a operação.")
            Return
        End If

    End Sub
End Module
Imports Cappta.Gp.Api.Com
Imports Cappta.Gp.Api.Com.Model

Module Module1
    Sub Main()

        Dim cappta As New ClienteCappta()

        'Não esqueça de realizar a autenticação aqui \o/
  
		Dim tipoVia As integer
		
        Dim resultado =  cappta.ReimprimirCupom("000000000", tipoVia)
        If resultado <> 0 Then
            Console.WriteLine("Não foi possível realizar a operação.")
            Return
        End If

    End Sub
End Module
package ProgramApi;

import Com.Api.Java.ClassFactory;
import Com.Api.Java.IClienteCappta;

public class Program {
  
    public static void main(String[] args) {
        IClienteCappta clienteCappta = ClassFactory.createClienteCappta();
        
        int tipoVia = 1;//Ambas as vias (Loja e cliente)
      
        int resultado = clienteCappta.reimprimirCupom("000000000",tipoVia);
        if (resultado != 0){
            System.out.println("Não foi possível iniciar a operação. Código de erro" + resultado);         
            return;
          
        }
    }   
}
Suggest Edits

Cancelamento de pagamentos

 

Somente será possível cancelar pagamentos que já foram confirmados dentro do mesmo dia ou seja não será possível cancelar pagamentos de dias anteriores.

Parâmetros
Descrição

senhaAdministrativa

Senha solicitada no CapptaGpPlus necessária para liberar o acesso à cancelamentos de pagamentos

numeroControle

Identificador única para pagamentos, é devolvido quando a transação é autorizada mas também pode ser consultado no portal de transações Cappta

Para detalhamento dos códigos de retorno consulte a tabela Possíveis códigos de retorno

using System;
using Cappta.Gp.Api.Com;

namespace CappAPIIntegration
{
    class Program
    {
        static void Main(string[] args)
        {
            //Não esqueça de realizar a autenticação aqui \o/

            int resultado = cappta.CancelarPagamento("senha", "000000000");
            if (resultado != 0)
            {
                Console.WriteLine("Não foi possível iniciar a operação. Código de erro {0}", resultado);
                return;
            }

            //Agora basta continuar o fluxo de iteração do cancelamento
        }
    }
}
program cappapiintegration;

uses Cappta_Gp_Api_Com_1_0_TLB, SysUtils;

var
  cappta : IClienteCappta;
  resultado : integer;

begin
  // -- Não esqueça de realizar a autenticação aqui \o/ --

  resultado := cappta.CancelarPagamento('senha', '000000000');
  if resultado <> 0 then
  begin
       WriteLn(Format('Não foi possível iniciar a operação. Código de erro %d', [resultado]));
       exit;
  end;

  // -- Agora basta continuar o fluxo de iteração do cancelamento --
end.
Imports Cappta.Gp.Api.Com

Module Module1

    Sub Main()
        'Não esqueça de realizar a autenticação aqui \o/

        Dim cappta As ClienteCappta = New ClienteCappta()

        Dim resultado = cappta.CancelarPagamento("senha", "000000000")
        If resultado <> 0 Then
            Console.WriteLine("Não foi possível iniciar a operação. Código de erro", resultado)
            Return
        End If

        'Agora basta continuar o fluxo de iteração da reimpressão
    End Sub
End Module
Imports Cappta.Gp.Api.Com

Module Module1

    Sub Main()
        'Não esqueça de realizar a autenticação aqui \o/

        Dim cappta As ClienteCappta = New ClienteCappta()

        Dim resultado = cappta.CancelarPagamento("senha", "000000000")
        If resultado <> 0 Then
            Console.WriteLine("Não foi possível iniciar a operação. Código de erro", resultado)
            Return
        End If

        'Agora basta continuar o fluxo de iteração da reimpressão
    End Sub
End Module
ackage ProgramApi;

import Com.Api.Java.ClassFactory;
import Com.Api.Java.IClienteCappta;

public class Program {
  
    public static void main(String[] args) {
        IClienteCappta clienteCappta = ClassFactory.createClienteCappta();
        
        int tipoVia = 1;//Ambas as vias (Loja e cliente)
      
        int resultado = clienteCappta.cancelarPagamento("senha","000000000");
        if (resultado != 0){
            System.out.println("Não foi possível iniciar a operação. Código de erro" + resultado);         
            return;
          
        }
    }   
}
Suggest Edits

Inicializando uma sessão multi-cartões

 

O multi-cartões da Cappta é um pouco diferente do mercado. Desenvolvemos ela em busca de facilitar a vida do varejista. Ou seja, caso ocorra algum erro durante o pagamento multi-cartões o varejista não vai precisar cancelar as transações uma a uma, com um simples comando de cancelamento por meio da sua automação, ele poderá cancelar todas as transações dentro da sessão Multi Cartões.

Uma sessão multi-cartões torna possível que sejam autorizados uma quantidade de pagamentos equivalente ao que foi informado no parâmetro quantidadePagamentos sem a necessidade de finaliza-los ao serem autorizados, porém ao executar uma função de finalização (confirmação ou desfazimento) todos os pagamentos serão afetados. Ou seja, ao confirmar, confirma todos e ao desfazer, desfazer e cancela todos os pagamentos. A sessão multi cartões é representada pelo fluxograma ao lado:

Ao final da autorização de todos os pagamentos solicitados a regra de finalização permanece assim como no fluxo de um pagamento simples, ou seja, não será possível executar novos pagamentos, cancelamentos ou reimpressões até que se tenha finalizado todos os pagamentos pendentes.

Dentro de uma sessão não será possível realizar cancelamentos e nem reimpressões, para isso será necessário desfazer ou confirmar os pagamentos anteriores.

Para finalizar uma sessão multi cartões antes que se tenha aprovado a quantidade de pagamentos informada, basta confirmar (ConfirmarPagamentos) ou desfazer (DesfazerPagamentos) os pagamentos pendentes.

Além disso durante o ciclo de pagamentos caso receba uma resposta de operação recusada a sessão multi cartões será cancelada automaticamente.

Parâmetros
Descrição

quantidadePagamentos

Número de pagamentos dentro da sessão multi cartões

using System;
using Cappta.Gp.Api.Com;

namespace CappAPIIntegration
{
    class Program
    {
        static void Main(string[] args)
        {
            //Não esqueça de realizar a autenticação aqui \o/

            int resultado = cappta.IniciarMultiCartoes(3);
            if (resultado != 0)
            {
                Console.WriteLine("Não foi possível iniciar a operação. Código de erro {0}", resultado);
                return;
            }

            //Agora basta processar seus pagamentos
        }
    }
}
program cappapiintegration;

uses Cappta_Gp_Api_Com_1_0_TLB, SysUtils;

var
  cappta : IClienteCappta;
  resultado : integer;

begin
  // -- Não esqueça de realizar a autenticação aqui \o/ --

  resultado := cappta.IniciarMultiCartoes(3);

  if resultado <> 0 then
  begin
       WriteLn(Format('Não foi possível iniciar a operação. Código de erro %d', [resultado]));
       exit;
  end;

  // -- Agora basta processar seus pagamentos --
end.
Imports Cappta.Gp.Api.Com
Imports Cappta.Gp.Api.Com.Model

Module Module1
    Sub Main()

        Dim cappta As New ClienteCappta()

        Dim resultado = cappta.IniciarMultiCartoes(3)
        If resultado <> 0 Then
            Console.WriteLine("Não foi possível iniciar a operação.")
        End If

    End Sub

End Module
Imports Cappta.Gp.Api.Com
Imports Cappta.Gp.Api.Com.Model

Module Module1
    Sub Main()

        Dim cappta As New ClienteCappta()

        Dim resultado = cappta.IniciarMultiCartoes(3)
        If resultado <> 0 Then
            Console.WriteLine("Não foi possível iniciar a operação.")
        End If

    End Sub

End Module
package ProgramApi;

import Com.Api.Java.ClassFactory;
import Com.Api.Java.IClienteCappta;

public class Program {
  
    public static void main(String[] args) {
        IClienteCappta clienteCappta = ClassFactory.createClienteCappta();
           
        int resultado = clienteCappta.iniciarMultiCartoes(3);
        if (resultado != 0){
            System.out.println("Não foi possível iniciar a operação. Código de erro" + resultado);         
            return;
          
        }
    }   
}

Existe um limite de no máximo 9 cartões para uma sessão.

Dentro de uma sessão multi cartões o timeout para confirmação ou desfazimento do CapptaGpPlus somente será ativado após a aprovação de todos os pagamentos

Suggest Edits

Solicitando informações pelo Pinpad

 

Utilizando este método, é possível solicitar informações a serem digitadas no pinpad. O método funciona de forma síncrona. Este método é chamado fora do loop de IteraçãoTef. As opções consistem em : CPF, telefone/celular e senha.

Tipos de informação

Tipos
Valor
Descrição

Cpf

1

Representa um número do documento CPF, que contem 11 dígitos.

Telefone/Celular

2

Representa um número de telefone ou celular, contendo 10 ou 11 dígitos. DDD + Número, exemplo : (00) 91234-1234 ou (00) 1234-1234

Senha

3

Representa uma senha numérica de 4 a 12 dígitos.

using System;
using Cappta.Gp.Api.Com;

namespace CappAPIIntegration
{
  class Program
  {
    static void Main(string[] args)
    {
      //Não esqueça de realizar a autenticação aqui \o/

      int tipoInformacao = 1; //tipo documento CPF

      IRequisicaoInformacaoPinpad infoPinpad = new RequisicaoInformacaoPinpad
      {
        TipoInformacaoPinpad = tipoInformacao
      };

      String resultado = cappta.SolicitarInformacoesPinpad(infoPinpad);

      Console.WriteLine(resultado);
    }
  }
}
program cappapiintegration;

uses Cappta_Gp_Api_Com_1_0_TLB, SysUtils;

var
  tipoInformacaoPinpad: integer;
  requisicaoPinpad: RequisicaoInformacaoPinpad;
  resultado: string;

begin

  // -- Não esqueça de realizar a autenticação aqui \o/ --

  tipoInformacao := 1; // -- Tipo documento CPF --

  requisicaoPinpad := CoRequisicaoInformacaoPinpad.Create();
  requisicaoPinpad.Set_TipoInformacaoPinpad(tipoInformacao);

  resultado := cappta.SolicitarInformacoesPinpad(requisicaoPinpad);

  ShowMessage(resultado);

end;
Imports Cappta.Gp.Api.Com
Imports Cappta.Gp.Api.Com.Model

Module Module1
    Sub Main()

        Dim cappta As New ClienteCappta()
        Dim tipoInformacao = 1

        Dim infoPinpad As IRequisicaoInformacaoPinpad = New RequisicaoInformacaoPinpad()
        infoPinpad.TipoInformacaoPinpad = tipoInformacao

        Dim resultado = cappta.SolicitarInformacoesPinpad(infoPinpad)

        Console.WriteLine(resultado)

    End Sub

End Module
Imports Cappta.Gp.Api.Com
Imports Cappta.Gp.Api.Com.Model

Module Module1
    Sub Main()

        Dim cappta As New ClienteCappta()
        Dim tipoInformacao = 1

        Dim infoPinpad As IRequisicaoInformacaoPinpad = New RequisicaoInformacaoPinpad()
        infoPinpad.TipoInformacaoPinpad = tipoInformacao

        Dim resultado = cappta.SolicitarInformacoesPinpad(infoPinpad)

        Console.WriteLine(resultado)

    End Sub

End Module
private void ButtonSolicitarInformacaoPinpadActionPerformed(java.awt.event.ActionEvent evt) {                                                                

        int tipoDeEntrada = ComboBoxTipoInformacaoPinpad.getSelectedIndex();
        if (tipoDeEntrada == 0) {
            CriarMensagemErroJanela("Porfavor escolha uma opção válida");
            return;
        }

        IRequisicaoInformacaoPinpad iRequisicaoInformacaoPinpad = ClassFactory.createRequisicaoInformacaoPinpad();
        iRequisicaoInformacaoPinpad.tipoInformacaoPinpad(tipoDeEntrada);

        String informacaoPinpad = cappta.solicitarInformacoesPinpad(iRequisicaoInformacaoPinpad);
        AtualizarResultado(informacaoPinpad);
    }  
Suggest Edits

Possíveis códigos de retorno

 
Possíveis códigos de retorno
Descrição

0

Sucesso

1

Não autenticado/Alguma das informações fornecidas para autenticação não é válida

2

CapptaGpPlus está sendo inicializado

7

Erro interno no CapptaGpPlus

8

Erro na comunicação entre a CappAPI e o CapptaGpPlus

9

Ocorre quando qualquer operação é realizada sem que se tenha finalizado o último pagamento

10

Uma reimpressão ou cancelamento foi executada dentro de uma sessão multi-cartões

14

Valor digitado no pinpad é inválido.

Suggest Edits

Códigos de motivo para operações negadas

 

1

Não autenticado/Alguma das informações fornecidas para autenticação não é válida

2

CapptaGpPlus está sendo inicializado

3

Formato da requisição recebida pelo CapptaGpPlus é inválido

4

Operação cancelada pelo operador

5

Pagamento não autorizado/pendente/não encontrado

6

Pagamento ou cancelamento negados pela rede adquirente ou falta de conexão com internet

7

Erro interno no CapptaGpPlus

8

Erro na comunicação entre a CappAPI e o CapptaGpPlus

Suggest Edits

Tabela de bandeiras

 
Código da bandeira Nome da bandeira
1 ABN
2 ABRAPETITE
3 ACC-CARD
4 ACEITO
5 ACSP
6 AGIPLAN
7 ALELO
8 AMAZONIA CELULAR
9 AMEX
10 ASCARD
11 AURA
12 AURA BERGAMAIS
13 AURA FNAC
14 AVISTA
15 BANCRED
16 BANESCARD
17 BANESE CARD
18 BANESTIK
19 BANKCARD
20 BANKTEC
21 BANPARA
22 BANQUET
23 BANQUET SMART
24 BANRICOMPRAS
25 BANRISUL
26 BANRISUL ALIMENTACAO
27 BANRISUL COMBUSTIVEL
28 BASECARD
29 BEM
30 BIGCARD
31 BLACKHAWK
32 BNB CLUBE
33 BNDES
34 BONUS
35 BRADESCO
36 BRASILCARD
37 BRT FIXA
38 BRTELECOM
39 CABAL CRED
40 CABAL DEB
41 CABAL VALE
42 CALCARD
43 CARDCO
44 CARTAO BRINQUEDO
45 CARTAO MAMAE
46 CARTAO NATAL
47 CB-BANCO DO BRASIL
48 CB-BRADESCO
49 CB-CITIBANK
50 CB-HSBC
51 CB-UNIBANCO
52 CELULAR
53 CHECKCHECK
54 CHEQUE ELETRONICO
55 CHEQUEPRE
56 CIELO
57 CLARO
58 CLARO OFF-LINE
59 COLABORADOR
60 COM VOCE
61 COMPROCARD
62 CONSTRUCARD
63 CONVCARD
64 COOPERCRED VALE
65 CPF
66 CREDI-SHOP
67 CREDITEM
68 CREDPAR
69 CREDSYSTEM
70 CTBC-CELULAR
71 CTBC-FIXO
72 DACASA
73 DIAMANTE
74 DINERS
75 DMCARD
76 ECXCARD
77 ELAVON
78 ELECTRON
79 ELO CREDITO
80 ELO DEBITO
81 ELO VOUCHER
82 EMBRATEL
83 EMBRATEL LIVRE ONLINE
84 EPAY
85 EPAY SEGUROS
86 EPHARMA
87 EPHARMA BALCAO
88 EVANGELICO
89 FACIL
90 FACIL_LOSANGO
91 FAI
92 FALA FACIL
93 FANCARD
94 FARMASEG
95 FIC
96 FININVEST
97 FLEXMED
98 FORTBRASIL
99 FUNCIONAL CARD
100 GETNET
101 GIVEX
102 GOIASCARD
103 GOODCARD
104 GOODMED
105 GOODVALE
106 GREENCARD
107 GYNCARD
108 HAPPY CARD
109 HIPERCARD
110 IBI
111 IBICARD
112 IBIPL
113 INCOMM
114 INFOCARDS
115 ITAU
116 ITAU-MOBILE
117 J.C.B.
118 JETPARCARD
119 LEADER CARD
120 LOJISTA
121 LOSANGO
122 MAESTRO
123 MAIS!
124 MARISA
125 MASTERCARD
126 MAXICRED
127 MEDCHEQUE
128 MINASCRED
129 MULTIALIMENTACAO
130 MULTIALIMENTACAO BEN
131 MULTIBENEFICIO
132 MULTIBENEFICIOS
133 MULTICASH
134 MULTICESTABASICA
135 MULTICHEQUE
136 MULTICHEQUE ANTIGO
137 MULTICHEQUE BEN
138 MULTICOMBUSTIVEL
139 MULTICULTURA
140 MULTIEMPRESARIAL
141 MULTIFARMA
142 MULTIREFEICAO
143 MURY
144 NBC
145 NEUS
146 NEXTEL
147 NOKIA
148 NOVARTIS
149 NUTRICARD/BONUSCRED
150 NUTRICASH
151 OBOÉCARD
152 OI
153 OI FIXA
154 OI OFF
155 ORGCARD CRED
156 ORGCARD DEB
157 ORGCARD DVCS
158 PAGUE CONTAS VISANET 4.1
159 PBMGOV
160 PERSONAL CARD
161 PHARMASYSTEM
162 PL FREECENTER
163 PL GETNET MASTER
164 PL GETNET VISA
165 PL MAGAZINE
166 PL TESOURA
167 PLANVALE
168 PLANVALE R
169 POLICARD
170 PORTALCARD
171 POUPCARD
172 PRATICARD
173 PREMIACAO
174 PREMIUM
175 PRESENTE
176 PRESTASERV
177 PREVSAUDE
178 PREZUNIC
179 PRIVATE LABEL REDECARD
180 QUALYCARD
181 RAINBOW
182 RANCHO CARD ALIMENTACAO
183 RANCHO CARD CONVENIO
184 REC-FININVEST
185 REDECARD
186 REDESOFTNEX
187 REDESOFTNEX CONV
188 REFEISUL
189 ROSSI
190 SAFRA AMANCO
191 SAPORE
192 SENFF
193 SERASA
194 SERCOMTEL-CELULAR
195 SERCOMTEL-FIXO
196 SICREDI CREDITO
197 SICREDI DEBITO
198 SIFRAGO
199 SIMCRED
200 SISCRED
201 SISTEMA
202 SODEXO ALIMENTACAO
203 SODEXO REFEICAO
204 SOLLO
205 SOLUCARD
206 SOMAR
207 SOROCRED
208 SOROCRED CREDITO
209 STAFFCARD
210 SUPER BONUS
211 SUPERCARD
212 SYSDATA
213 TECBAN
214 TELECHEQUE
215 TELEFONICA
216 TELEFONIC-FAMILIA
217 TELEMAR
218 TELEMIG
219 TELENET
220 TELESP-SUPER 15
221 TICKET ALIMENTAÇÃO
222 TICKET CAR
223 TICKET RESTAURANTE
224 TIM
225 TIM ON-LINE
226 TIPCARD
227 TMS
228 TOKORO
229 TOPCARD
230 TOPPREMIUM
231 TRANSCHECK
232 TRICARD
233 TRNCENTRE
234 UNIK
235 UNNISA
236 USECRED
237 VAELETRONICO
238 VALE MAIS
239 VALECARD
240 VALECASH
241 VALEFROTA
242 VALEGAS
243 VALESHOP
244 VALETIK
245 VEGAS CARD
246 VERDECARD
247 VEROCHEQUE
248 VIA FINANCEIRA
249 VIDALINK
250 VISA
251 VIVO
252 VIVO OFF-LINE
253 VR ALIMENTACAO
254 VR AUTO
255 VR CULTURA
256 VR REFEICAO
257 ZOGBI
259 SODEXO COMBUSTÍVEL
260 ALGORIX
261 ALGORIX_S
262 SAVS
263 VEROCHEQUE CREDITO
265 CREDZ
266 ESPLANADA
267 SODEXO
268 ELO REFEICAO
269 ELO ALIMENTACAO
270 PBM PADRAO
271 CIELO AUTO
273 BIGCARD DEB
276 TICKET ALIMENTACAO
277 ALELO REFEICAO
278 ALELO ALIMENTACAO
279 BAHAMAS CRED
280 BAHAMAS ALIM
281 BANESCARD DEBITO
283 FLEETCOR
284 MAXXCARD
285 METTACARD
286 REDE CRED
287 REDE DEB
288 REDE VOUCHER
289 HIPER DEB
290 ALGORIX-VOUCHER
291 CREDIALIMENTACAO
292 VISA VALE
293 UAI CARD
294 REDEMED
295 PARACATUCARD
296 VALECARD DEB
297 MULTIPLUS
298 POLICARD CREDITO
299 POLICARD DEBITO
300 POLICARD ALIMENTACAO
301 POLICARD REFEICAO
302 GOODCARD ALIMENTACAO
303 GOODCARD REFEICAO
304 ALELO REFEIÇÃO
305 ALELO ALIMENTAÇÃO
306 VEGAS CARD
307 VEGAS CARD
308 VALLE EXPRESS
 

Abaixo serão descritos todos os passos necessários para efetuar a recarga pela CapptAPI

using System;
using Cappta.Gp.Api.Com;

namespace CappAPIIntegration
{
    class Program
    {
        static void Main(string[] args)
        {
            //Não esqueça de realizar a autenticação aqui \o/

            var resultado = cappta.ObterOperadoras();
            if (resultado.CodigoResposta != 0)
            {
                Console.WriteLine("Não foi possível resgatar as operadoras");
                return;
            }

            //Agora basta continuar o fluxo de iteração de recarga aqui.
        }
    }
}
program cappapiintegration;

uses Cappta_Gp_Api_Com_1_0_TLB;

var
  cappta : IClienteCappta;
  detalhesOperadoras : IDetalhesOperadoras;

begin
  // -- Não esqueça de realizar a autenticação aqui \o/ --

  detalhesOperadoras := cliente.ObterOperadoras;
  if detalhesOperadoras.CodigoResposta <> 0 then
  begin
       WriteLn('Não foi possível resgatar as operadoras');
       exit;
  end;

  // -- Agora basta continuar o fluxo de iteração de recarga aqui --
end.
Imports Cappta.Gp.Api.Com
Imports Cappta.Gp.Api.Com.Model

Module Module1
    Sub Main()

        Dim cappta As New ClienteCappta()

        '//Não esqueça de realizar a autenticação aqui \o/

        Dim resultado = cappta.ObterOperadoras()

        If resultado <> 0 Then
            Console.WriteLine("Não foi possível resgatar as operadoras")
                Return
            Return
        End If

    End Sub
End Module
Suggest Edits

Obtendo Operadoras

 

O primeiro passo para a recarga é obter as operadoras disponíveis, para isso basta fazer uma simples requisição.

Suggest Edits

Obtendo Produtos

 

O segundo passo para a recarga é obter os produtos disponíveis para a operadora escolhida, para isso basta fazer uma simples requisição passando a operadora escolhida

Parâmetros
Tipo
Descrição

operadora

string

nome da operadora

Para detalhamento dos códigos de retorno consulte a tabela Possíveis códigos de retorno

using System;
using Cappta.Gp.Api.Com;

namespace CappAPIIntegration
{
    class Program
    {
        static void Main(string[] args)
        {
            //Obtenha e escolha sua operadora aqui.

            var resultado = cappta.ObterProdutosOperadoras(operadora);
            if (resultado.CodigoResposta != 0)
            {
                Console.WriteLine("Não foi possível resgatar os produtos de recarga.");
                return;
            }

            //Agora basta continuar o fluxo de iteração de recarga aqui.
        }
    }
}
program cappapiintegration;

uses Cappta_Gp_Api_Com_1_0_TLB;

var
  cappta : IClienteCappta;
  detalhesProdutos : IDetalhesProdutosOperadoras;
  operadora : WideString;

begin
  // -- Obtenha e escolha sua operadora aqui. --

  detalhesProdutos := cliente.ObterProdutosOperadoras(operadora);
  if detalhesOperadoras.CodigoResposta <> 0 then
  begin
       WriteLn('Não foi possível resgatar os produtos de recarga.');
       exit;
  end;

  // -- Agora basta continuar o fluxo de iteração de recarga aqui --
end.

Imports Cappta.Gp.Api.Com.Model

Module Module1
    Sub Main()

        Dim cappta As New ClienteCappta()

        'Não esqueça de realizar a autenticação aqui \o/
		    'Obtenha e escolha sua operadora aqui.

        Dim resultado = cappta.ObterProdutosOperadoras(operadora)

        If resultado <> 0 Then
            Console.WriteLine("Não foi possível resgatar os produtos de recarga.")
                Return
            Return
        End If

    End Sub
End Module
Suggest Edits

Realizando a Recarga

 

Depois de escolhermos a operadora e o produto é hora de realizar a recarga, para isso só precisaremos do ddd, número de celular e valor da recarga (se o produto for variável).

Para captura do número de celular do cliente, sugerimos a utilização do método Obter telefone pelo pinpad

Parâmetros
Tipo
Descrição

recarga

DetalhesRecarga

Objeto contendo o detalhamento da recarga

Para detalhamento dos códigos de retorno consulte a tabela Possíveis códigos de retorno

Detalhes da Recarga

Propriedade
Obrigatório?
Tipo
Descrição

Celular

Sim

string

número do celular onde será efetuada a recarga

Ddd

Sim

int

DDD do número onde será efetuada a recarga

Produto

Sim

IProdutoRecarga

Produto a ser comprado na recarga.

ValorRecarga

Sim

double

Valor do produto a ser comprado na recarga

using System;
using Cappta.Gp.Api.Com;

namespace CappAPIIntegration
{
    class Program
    {
        static void Main(string[] args)
        {
            //Obtenha e escolha sua operadora, produto, número de celular e valor aqui.

            var recarga = new DetalhesRecarga();
            recarga.Celular = celular; // inteiro.
            recarga.Ddd = ddd; // inteiro.
            recarga.Produto = produto; //IProdutoRecarga
            recarga.ValorRecarga = valor; // double

            var resultado = cappta.RecargaCelular(recarga);
            if (!resultado is IRespostaRecarga)
            {
                Console.WriteLine("Não foi possível realizar a recarga.");
                return;
            }

            //Agora basta imprimir o cupom.
        }
    }
}
program cappapiintegration;

uses Cappta_Gp_Api_Com_1_0_TLB;

var
  cappta : IClienteCappta;
  detalhesRecarga : IDetalhesRecarga;
  produto : IProdutoRecarga;
  celular : Integer;
  ddd : Integer;
  valor : Double;
  iteracao: IIteracaoTef;

begin
  // -- Obtenha e escolha sua operadora, produto, número de celular e valor aqui. --

  detalhesRecarga := CoDetalhesRecarga.Create;
  detalhesRecarga.Celular:= celular;
  detalhesRecarga.Ddd:= ddd;
  detalhesRecarga.ValorRecarga:= valor;
  detalhesRecarga.Produto := produto;
  iteracao := cliente.RecargaCelular(detalhesRecarga);
  if Not (iteracao is IDetalhesRecarga) then
  begin
       WriteLn('Não foi possível realizar a recarga.');
       exit;
  end;

  // -- Agora basta imprimir o cupom. --
end.
Imports Cappta.Gp.Api.Com
Imports Cappta.Gp.Api.Com.Model

Module Module1
    Sub Main()

        Dim cappta As New ClienteCappta()

        'Obtenha e escolha sua operadora, produto, número de celular e valor aqui.
		
		Dim recarga = New DetalhesRecarga()
		recarga.Celular = celular; // inteiro.
        recarga.Ddd = ddd; // inteiro.
        recarga.Produto = produto; //IProdutoRecarga
        recarga.ValorRecarga = valor; // double
			
        Dim resultado = cappta.RecargaCelular(recarga)
        If resultado <> 0 Then
            Console.WriteLine("Não foi possível realizar a recarga.")
                Return
            Return
        End If

    End Sub
End Module
Suggest Edits

O que é MultiLoja:

 

Com a Cappta os clientes podem ter diversos CNPJs vinculados na mesma instalação do CapptaGpPlus e selecionar qual deseja utilizar no momento da venda.

Além de ter diversas lojas vinculadas, o Multi Loja permite ao lojista uma flexibilidade maior sobre suas vendas, possibilitando que ele as direcione para o CNPJ de sua escolha. Automaticamente o valor dessa venda será direcionado ao domicilio bancário do CNPJ selecionado.

Abaixo estão descritos os métodos necessários para utilizar a função Multi Loja.

Suggest Edits

Obtendo lista de lojas

 

Este método é utilizado para obter uma lista de todas os CNPJs que estão vinculados a instalação e disponiveis para ativação. Com essa lista você pode exibi-la para que o operador possa selecionar o CNPJ que deseja ativar.

Retorno de obter lojas

Propriedade
Tipo
Descrição

CodigoResposta

int

Representa o código de retorno da busca realizada. Para detalhamento dos códigos de retorno consulte a tabela Possíveis códigos de retorno

ListaLojas

Array de DetalheLoja

Representa um array de DetalheLoja onde são inseridas todas as lojas vinculadas ao CNPJ.

Detalhes de DetalheLoja

Propriedade
Tipo
Descrição

Codigo

int

Representa o código da loja.

NomeFantasia

string

Representa o nome fantasia da loja.

Cnpj

string

Representa o número do CNPJ, que contem 14 dígitos.

Pdv

int

Representa numero do pdv daquele cnpj.

using System;
using Cappta.Gp.Api.Com;

namespace CappAPIIntegration
{
    class Program
    {
        static void Main(string[] args)
        {
            int resultado = cappta.ObterLojas();

            if (resultado.CodigoResposta != 0))
            {
                Console.WriteLine("Não foi possível obter lista de lojas.");
                return;
            }

            var listaDeLojas = consultaLojas.ListaLojas;

            foreach (var loja in listaDeLojas)
            {
                Console.WriteLine($"{loja.NomeFantasia} CNPJ: {loja.Cnpj} PDV: {loja.Pdv}");
            }
        }
    }
}
public class DetalheLoja : IDetalheLoja
{
    public int Codigo { get; set; }

    public string NomeFantasia { get; set; }

    public string Cnpj { get; set; }

    public int Pdv { get; set; }
}
Suggest Edits

Ativando uma loja

 

Após o operador selecionar a loja que será ativada, ele deve usar esse método para ativá-la. Após ativada, todas as transações, reimpressões e estornos serão referentes ao CNPJ ativo.

Propriedade
Obrigatório?
Tipo
Descrição

Codigo

Não

int

Representa o código da loja.

Nome Fantasia

Não

string

Representa o nome fantasia da loja.

Cnpj

Sim

string

Representa o número do CNPJ da loja que será ativada, que deve conter 14 dígitos.

Pdv

Não

int

Representa número do pdv daquele cnpj.

using System;
using Cappta.Gp.Api.Com;

namespace CappAPIIntegration
{
    class Program
    {
        static void Main(string[] args)
        {
            IDetalheLoja loja = new DetalheLoja()
            {
                Cnpj = "00000000000000"
            };

            var resultado = cappta.AtivarLoja(loja);
            if(resultado.CodigoResposta != 0))
            {
                Console.WriteLine("Não foi possível ativar a loja.");
                return;
            }

            Console.WriteLine("Loja ativada com sucesso.");
        }
    }
}
Suggest Edits

O que é a pré-autorização de crédito

 

O crédito pré-autorizado ou pré-autorização de crédito funciona como um pagamento comum de crédito, porém, em vez do valor ser capturado na hora, ele fica reservado do limite do cartão até que se realize a captura do valor final. Isso possibilita ao estabelecimento ter uma garantia de que, após utilizar o serviço, o cliente terá limite disponível para realizar o pagamento.

Portanto temos dois passos distintos para realizar o pagamento:
1. A solicitação do crédito pré-autorizado: É o momento em que o valor estimado do produto/serviço é reservado do limite do cartão do cliente.

2. A captura do crédito pré-autorizado: É o momento no qual é debitado o valor real do produto/serviço utilizado pelo cliente.

Suggest Edits

Criar crédito pré-autorizado

 

Para realizar a reserva do limite do cartão é necessário enviar uma requisição para o método PreAutorizacaoPagamentoCredito passando como parâmetro a quantia que deverá ser reservada do limite do cartão do cliente.

Normalmente uma pré-autorização de crédito possui uma validade, que pode variar em função da adquirente, bandeira e/ou emissor do cartão. Após esse prazo, o limite é liberado.

Parametro
Obrigatório
Tipo
Descrição

valor

Sim

double

Valor a ser pré autorizado no cartão

using System;
using Cappta.Gp.Api.Com;

namespace CappAPIIntegration
{
    class Program
    {
        static void Main(string[] args)
        {
            //Não esqueça de realizar a autenticação aqui \o/
						
            double valorDaPreAutorizacao = 100;
            int resultado = cappta.PreAutorizacaoPagamentoCredito(valorDaPreAutorizacao);
            
            if (resultado != 0)
            {
                Console.WriteLine("Não foi possível iniciar a operação");
                return;
            }

            //Agora basta continuar o fluxo de iteração do pagamento
        }
    }
}
program capptaapiintegration;

uses Cappta_Gp_Api_Com_1_0_TLB;

var
  cappta : IClienteCappta;
  resultado : integer;
  valorDaPreAutorizacao : double;
begin
  
  // -- Não esqueça de realizar a autenticação aqui \o/ --
	
  resultado := cappta.PreAutorizacaoPagamentoCredito(valorDaPreAutorizacao);
  
  if resultado <> 0 then
  begin
       WriteLn('Não foi possível iniciar a operação');
       exit;
  end;

  // -- Agora basta continuar o fluxo de iteração do pagamento --
end.
Suggest Edits

Capturar crédito pré-autorizado

 

Para capturar uma venda pré-autorizada é necessário enviar para o método CapturarPreAutorizacaoPagamentoCredito o valor que deseja capturar e o controle que foi retornado do método de criar crédito pré-autorizado

Se o valor de captura for menor que o valor pré-autorizado, o restante do crédito pré-aprovado é liberado no limite do cartão automaticamente.

Parametro
Obrigatório
Tipo
Descrição

controle

Sim

string

Código de identificação de cada venda.

valor

Sim

double

Valor a ser capturado.

using System;
using Cappta.Gp.Api.Com;

namespace CappAPIIntegration
{
    class Program
    {
        static void Main(string[] args)
        {
            //Não esqueça de realizar a autenticação aqui \o/
						
            double valorDaCaptura = 100;          	
            string codigoDeControleDaVenda = "01020676031";
            int resultado = cappta.CapturarPreAutorizacaoPagamentoCredito(codigoDeControleDaVenda, valorDaCaptura);
            
            if (resultado != 0)
            {
                Console.WriteLine("Não foi possível iniciar a operação");
                return;
            }

            //Agora basta continuar o fluxo de iteração do pagamento
        }
    }
}
program capptaapiintegration;

uses Cappta_Gp_Api_Com_1_0_TLB;

var
  cappta : IClienteCappta;
  resultado : integer;
  valorDaCaptura : double;
	codigoDeControleDaVenda : string;
begin
  
  // -- Não esqueça de realizar a autenticação aqui \o/ --
	
  resultado := cappta.CapturarPreAutorizacaoPagamentoCredito(codigoDeControleDaVenda, valorDaCaptura);
  
  if resultado <> 0 then
  begin
       WriteLn('Não foi possível iniciar a operação');
       exit;
  end;

  // -- Agora basta continuar o fluxo de iteração do pagamento --
end.
Suggest Edits

Cancelamento de crédito pré-autorizado

 

Cancelar um crédito pré-autorizado é como cancelar uma venda normal, basta enviar o senhaAdminstrativa e o controle para o método CancelarPagamento como explicado em Cancelamento de pagamentos

Será possível cancelar somente créditos pré-aprovados que não foram capturados.