Iterando sobre uma operação de pagamento ou administrativa

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.

 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