NAV
C# Delphi

Manual de Integração com o CapptaGpPlus

Neste documento iremos detalhar todos os passos necessários para realizar a integração com o CapptaGpPlus por intermédio da API CappAPI 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 implementados.

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 ele exibição de mensagens ou a solicitação de alguns dados básicos para dar continuidade aos pagamentos.

Preparativos para integração

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 nossa turma de homologação.

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

Fluxo de comunicação com a CappAPI

Durante a integração com a CappAPI será necessária a execução e validação de alguns procedimentos. A imagem abaixo demonstra este fluxo:

Fluxo operação pagamento

  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 CappAPI 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.

Importando CappAPI

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

.NET

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();
        }
    }
}

Delphi

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

Buscando o plugin necessário

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

Imagem Menu Pacotes

No campo disponível para instalação, digite LazActiveX 0.1. Selecione o plugin e depois clique em Instalar Seleção.

Imagem Janela Pacotes

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.

Imagem Menu Importação

Clique na aba ActiveX References, selecionando o componente Cappta_Gp_Api_Com.

Imagem Janela Importação

Após clicar em OK, será mostrada a janela do editor de código, com um novo unit. Grave este novo arquivo.

Imagem Janela Editor API

Com isso, basta criar uma nova instância da classe IClienteCappta e realizar a autenticação para começar a integrar outros serviços.

program cappapiintegration;

uses Cappta_Gp_Api_Com_1_0_TLB;

var cappta : IClienteCappta;

begin
  cappta := CoClienteCappta.Create;
end.

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

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 = "2C1CE88C-6A0C-4FA6-BF2D-519B1DB31DF4";

            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 = '2C1CE88C-6A0C-4FA6-BF2D-519B1DB31DF4';
  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;
end.
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 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.

Configurando sua integração

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

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.
Parâmetro Tipo Descrição
configs IConfiguracoes Objeto contendo as opções disponiveis para configurar o CapptaGpPlus

Configurações disponíveis

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.

Obs.: A chamada do método Configurar é opcional, se a sua integração não necessita de configurações específicas, não é necessário chama-lo.

Recarga

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

Obtendo Operadoras

O primeiro passo para a recarga é obter as operadoras disponíveis, para isso basta fazer uma simples requisiçã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/

            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.

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

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

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.
Parâmetros Tipo Descrição
recarga DetalhesRecarga Objeto contendo o detalhamento da recarga

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.

Pagamento

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

Pagamento Débito / Voucher

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

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(10D);
            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.
Parâmetros Tipo Descrição
valor double Valor do pagamento

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).

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.       
Parâmetros 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

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.

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

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.

Reimpressão do Último Cupom

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

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

Reimpressão de um Cupom Específico

Do contrário caso queira reimprimir um cupom especiífico utilize a seguinte funçã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/

            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.
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íves

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.

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

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.

Enviando parametros adicionais para a CappAPI

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.

Esse código é 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.
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

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().

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.

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.

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 abaixo:

Fluxo multi-cartões

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.

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.

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

Observações

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.

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;

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.

Possíveis códigos de retorno

Código 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.

Códigos de motivo para operações negadas

Código Descrição
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

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

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

Implementações da interface IIteracaoTef

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

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;  

Operação aprovada

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;

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

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).

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;
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 string Descreve o motivo pelo qual a operação foi negada

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

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;
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 da 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.

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;
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

Mensagem

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”.

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;
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

Requisição de parâmetro

Retornada quando o CapptaGpPlus necessita de alguma informação para continuar o fluxo da 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;
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âmentro necessário para proseguir com a operação TEF

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

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:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
    </startup>
    <appSettings>
        <add key="ChaveAutenticacao" value="2C1CE88C-6A0C-4FA6-BF2D-519B1DB31DF4"/>
        <add key="Cnpj" value="00000000000000"/>
        <add key="Pdv" value="8"/>
    </appSettings>
</configuration>
<?xml version="1.0"?>
<autenticacao>
    <chaveAutenticacao>2C1CE88C-6A0C-4FA6-BF2D-519B1DB31DF4</chaveAutenticacao>
    <cnpj>00000000000000</cnpj>
    <pdv>8</pdv>
</autenticacao>