Skip to content
ūüöĺ - API do Wirecard para .NET - SDK
C#
Branch: master
Clone or download
Latest commit 16c57f6 Aug 17, 2019

README.md

Wirecard logo

O jeito mais simples e rápido de integrar o Wirecard a sua aplicação .NET e feito com base nas APIs REST do Wirecard.

Docs API Reference Slack MIT NuGet Statistics Download

Ler em outras linguagens de programação: Visual Basic, F#.

Biblioteca Descrição Status
MoipCSharp Onde tudo come√ßou... ‚ĚĆ Descontinuado
WirecardCSharp Quando a Moip virou Wirecard... ‚ĚĆ Descontinuado
Wirecard Projeto atual ‚úĒÔłŹ Atual

√ćndice - C#

Implementa√ß√Ķes .NET com suporte

Essa biblioteca foi feito em (.NET Standard 1.2 e VS2017) e tem suporte das seguintes implementa√ß√Ķes do .NET:

  • .NET Core 1.0 ou superior
  • .NET Framework 4.5.1 ou superior
  • Mono 4.6 ou superior
  • Xamarin.iOS 10.0 ou superior
  • Xamarin.Android 7.0 ou superior
  • Universal Windows Platform 10 ou superior
  • Windows 8.1 ou superior
  • Windows Phone 8.1 ou superior

Para mais informa√ß√Ķes: .NET Standard.

Aviso Importante

Pensando em melhorar ainda mais a sua seguran√ßa e para atender a padr√Ķes internacionais do nosso selo PCI Compliance, o Wirecard desativar√° protocolos de seguran√ßa TLS (Transport Layer Security) inferiores a 1.2 √† partir do dia 30/06/2018. Verifique se o seu projeto j√° possui TLS na vers√£o 1.2, caso n√£o, voc√™ receber√° uma exce√ß√£o:

- InnerException = {"A solicitação foi anulada: Não foi possível criar um canal seguro para SSL/TLS."}

Para isso, adicione o seguinte código no seu projeto:

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

Para mais informa√ß√Ķes : TLS1.2.

Instalação

Execute o comando para instalar via NuGet:

PM> Install-Package Wirecard

ūüí• Obs: Trocamos a biblioteca MoipCSharp por Wirecard.

Autenticando e configurando o ambiente (E-Commerce)

Escolha o "ambiente" voc√™ quer executar suas a√ß√Ķes e informe seu (token, chave):

using Wirecard;
using Wirecard.Models;

private const string token = "xxxxxxxxxxxxxxxxxxx";
private const string key = "xxxxxxxxxxxxxxxxxxxxxxxxxx";
private WirecardClient WC = new WirecardClient(Environments.SANDBOX, token, key);

Para obter um token e a chave, primeiro faça o login aqui.

Voc√™ pode acess√°-las em Minha conta > Configura√ß√Ķes > Chaves de Acesso.

Autenticando e configurando o ambiente (Marketplace)

Escolha o "ambiente" voc√™ quer executar suas a√ß√Ķes e informe seu accesstoken:

using Wirecard;
using Wirecard.Models;

private const string accessToken = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx_v2";
private WirecardClient WC = new WirecardClient(Environments.SANDBOX, accessToken);

Para obter o accesstoken, você precisa criar um App.

Assíncrona x Síncrona

Todos os métodos são assíncronos, caso você queira executar de forma síncrona, veja o exemplo:

var result = Task.Run(() => WC.Customer.List()).Result;

Conta Cl√°ssica

Verificar se usu√°rio j√° possui Conta Wirecard (email)

ūüö© Essa fun√ß√£o funciona somente na conta cl√°ssica.

var result = await WC.ClassicAccount.AccountExist("meu_email@email.com");
if (result == HttpStatusCode.OK)
{
    // j√° existe
    //HttpStatusCode.OK == 200 (j√° existe)
    //HttpStatusCode.BadRequest == 400 (CPF inv√°lido)
    //HttpStatusCode.NotFound == 404 (Para CPF v√°lido, mas n√£o possui Conta Wirecard)
}

Verificar se usu√°rio j√° possui Conta Wirecard (documento)

ūüö© Essa fun√ß√£o funciona somente na conta cl√°ssica.

var result = await WC.ClassicAccount.AccountExist("123.456.789-01");
if (result == HttpStatusCode.OK)
{
    // j√° existe
    //HttpStatusCode.OK == 200 (j√° existe)
    //HttpStatusCode.BadRequest == 400 (CPF inv√°lido)
    //HttpStatusCode.NotFound == 404 (Para CPF v√°lido, mas n√£o possui Conta Wirecard)
}

Criar Conta Wirecard Cl√°ssica (Conta PF)

var body = new ClassicAccountRequest
{
    Email = new Email
    {
        Address = "fulano@hotmail.com"
    },
    Person = new Person
    {
        Name = "Fulano",
        LastName = "da Silva",
        TaxDocument = new Taxdocument
        {
            Type = "CPF",
            Number = "123.456.789-91"
        },
        IdentityDocument = new Identitydocument
        {
            Type = "RG",
            Number = "434322344",
            Issuer = "SPP",
            IssueDate = "2000-12-12"
        },
        BirthDate = "1990-01-01",
        Phone = new Phone
        {
            CountryCode = "55",
            AreaCode = "11",
            Number = "965213244"
        },
        Address = new Address
        {
            Street = "Av. Brigadeiro Faria Lima",
            StreetNumber = "2927",
            District = "Itaim",
            ZipCode = "01234-000",
            City = "S√£o Paulo",
            State = "SP",
            Country = "BRA"
        }
    },
    Type = "MERCHANT"
};
var result = await WC.ClassicAccount.Create(body);

Criar Conta Wirecard Cl√°ssica (Conta PJ)

var body = new ClassicAccountRequest
{
    Email = new Email
    {
        Address = "fulano@hotmail.com"
    },
    Person = new Person
    {
        Name = "Fulano",
        LastName = "da Silva",
        BirthDate = "1990-01-01",
        TaxDocument = new Taxdocument
        {
            Type = "CPF",
            Number = "123.456.789-91"
        },
        IdentityDocument = new Identitydocument
        {
            Type = "RG",
            Number = "434322344",
            Issuer = "SPP",
            IssueDate = "2000-12-12"
        },
        Phone = new Phone
        {
            CountryCode = "55",
            AreaCode = "11",
            Number = "965213244"
        },
        Address = new Address
        {
            Street = "Av. Brigadeiro Faria Lima",
            StreetNumber = "2927",
            District = "Itaim",
            ZipCode = "01234-000",
            City = "S√£o Paulo",
            State = "SP",
            Country = "BR"
        }
    },
    Company = new Company
    {
        Name = "Noma da empresa",
        BusinessName = "Wirecard Pagamentos",
        OpeningDate = "2011-01-01",
        TaxDocument = new Taxdocument
        {
            Type = "CNPJ",
            Number = "11.698.147/0001-13"
        },
        MainActivity = new Mainactivity
        {
            Cnae = "82.91-1/00",
            Description = "Atividades de cobran√ßas e informa√ß√Ķes cadastrais"
        },
        Phone = new Phone
        {
            CountryCode = "55",
            AreaCode = "11",
            Number = "32234455"
        },
        Address = new Address
        {
            Street = "Av. Brigadeiro Faria Lima",
            StreetNumber = "2927",
            District = "Itaim",
            ZipCode = "01234-000",
            City = "S√£o Paulo",
            State = "SP",
            Country = "BRA"
        }
    },
    BusinessSegment = new Businesssegment
    {
        Id = 3
    },
    Type = "MERCHANT"
};
var result = await WC.ClassicAccount.Create(body);

Consultar Conta Wirecard

var result = await WC.ClassicAccount.Consult("MPA-XXXXXXXXXXXX");

Solicitar Permiss√Ķes de Acesso ao Usu√°rio

ūüö© O c√≥digo a seguir n√£o consome API, apenas monta o URL. Mais informa√ß√Ķes clica aqui.

string response_type = "code";
string client_id = "APP-FFFGVQMOK123";
string redirect_uri = "https://example.com/abc?DEF=„Āā„ĀĄ„ĀÜ\x20„Āą„Āä";
string scope = "RECEIVE_FUNDS,MANAGE_ACCOUNT_INFO,DEFINE_PREFERENCES";
var url = Utilities.RequestUserAccessPermissions(response_type, client_id, redirect_uri, scope);

//https://connect-sandbox.moip.com.br/oauth/authorize?response_type=code&client_id=APP-
//FFFGVQMOK123&redirect_uri=https://example.com/abc?DEF=%E3%81%82%E3%81%84%E3%81%86%20%
//E3%81%88%E3%81%8A&scope=RECEIVE_FUNDS,MANAGE_ACCOUNT_INFO,DEFINE_PREFERENCES

Veja aqui como funciona a permiss√£o.

Gerar Access Token

string client_id = "APP-M11STAPPOAU";
string client_secret = "SplxlOBeZQQYbYS6WxSbIA";
string redirect_uri = "http://localhost/moip/callback";
string grant_type = "authorization_code";
string code = "4d9e0466bc14aad85b894237145b217219e9a825";
var result = await WC.ClassicAccount.GenerateAccessToken(
                client_id, client_secret, redirect_uri, grant_type, code);

Atualizar accessToken

string grant_type = "refresh_token";
string refresh_token = "2381dfbbcbd645268af1dd0e4456bfe1_v2";
var result = await WC.ClassicAccount.UpdateAccessToken(grant_type, refresh_token);

Obter chave p√ļblica de uma Conta Wirecard

var result = await WC.ClassicAccount.GetPublickey();

Conta Transparente

Criar Conta Wirecard Transparente

var body = new TransparentAccountRequest
{
    TransparentAccount = true,
    Type = "MERCHANT",
    Email = new Email
    {
        Address = "teste@hotmail.com"
    },
    Person = new Person
    {
        Name = "PrimeiroNome",
        LastName = "SegundoNome",
        TaxDocument = new Taxdocument
        {
            Type = "CPF",
            Number = "123.456.798-91"
        },
        BirthDate = "2011-01-01",
        Phone = new Phone
        {
            CountryCode = "55",
            AreaCode = "11",
            Number = "965213244"
        },
        Address = new Address
        {
            Street = "Av. Brigadeiro Faria Lima",
            StreetNumber = "2927",
            District = "Itaim",
            ZipCode = "01234000",
            City = "Osasco",
            State = "SP",
            Country = "BRA"
        }
    }
};
var result = await WC.TransparentAccount.Create(body);

Clientes

Criar Cliente - (E-COMMERCE)

var body = new CustomerRequest
{
    OwnId = "meu_id_customer_002",
    FullName = "Maria Oliveira",
    Email = "maria@email.com",
    BirthDate = "1980-5-10",
    TaxDocument = new Taxdocument
    {
        Type = "CPF",
        Number = "22288866644"
    },
    Phone = new Phone
    {
        CountryCode = "55",
        AreaCode = "11",
        Number = "55552266"
    },
    ShippingAddress = new Shippingaddress
    {
        City = "S√£o Paulo",
        Complement = "10",
        District = "Itaim Bibi",
        Street = "Avenida Faria Lima",
        StreetNumber = "500",
        ZipCode = "01234000",
        State = "SP",
        Country = "BRA"
    },
    FundingInstrument = new Fundinginstrument
    {
        Method = "CREDIT_CARD",
        CreditCard = new Creditcard
        {
            ExpirationMonth = "06",
            ExpirationYear = "22",
            Number = "6362970000457013",
            Cvc = "123",
            Holder = new Holder
            {
                FullName = "Maria Oliveira",
                BirthDate = "1988-12-30",
                TaxDocument = new Taxdocument
                {
                    Type = "CPF",
                    Number = "33333333333"
                },
                BillingAddress = new Billingaddress
                {
                    City = "Rio de Janeiro",
                    District = "Copacabana",
                    Street = "Rua Raimundo Corrêa",
                    StreetNumber = "1200",
                    ZipCode = "05246200",
                    State = "SP",
                    Country = "BRA"
                },
                Phone = new Phone
                {
                    CountryCode = "55",
                    AreaCode = "11",
                    Number = "66778899"
                }
            }
        }
    }
};
var result = await WC.Customer.Create(body);

Criar Cliente - (MARKETPLACE / PLATAFORMA)

 var body = new CustomerRequest
 {
     OwnId = "meu_id_customer",
     FullName = "Jo√£o Silva",
     Email = "joao@email.com",
     BirthDate = "1990-10-22",
     TaxDocument = new Taxdocument
     {
         Type = "CPF",
         Number = "22288866644"
     },
     Phone = new Phone
     {
         CountryCode = "55",
         AreaCode = "11",
         Number = "55552266"
     },
     ShippingAddress = new Shippingaddress
     {
         City = "S√£o Paulo",
         Complement = "10",
         District = "Itaim Bibi",
         Street = "Avenida Faria Lima",
         StreetNumber = "500",
         ZipCode = "01234000",
         State = "SP",
         Country = "BRA"
     }
 };
var result = await WC.Customer.Create(body);

Adicionar Cartão de Crédito

var body = new CustomerRequest
{
    Method = "CREDIT_CARD",
    CreditCard = new Creditcard
    {
        ExpirationMonth = "06",
        ExpirationYear = "2022",
        Number = "4012001037141112",
        Cvc = "123",
        Holder = new Holder
        {
            FullName = "Jo√£o da Silva",
            BirthDate = "1961-03-01",
            TaxDocument = new Taxdocument
            {
                Type = "CPF",
                Number = "11111111111"
            },
            Phone = new Phone
            {
                CountryCode = "55",
                AreaCode = "11",
                Number = "111111111"
            }
        }
    }
};
var result = await WC.Customer.AddCreditCard(body, "CUS-XXXXXXXXXXXX");

Deletar Cartão de Crédito

var result = await WC.Customer.DeleteCreditCard("CRC-XXXXXXXXXXXX");

Consultar Cliente

var result = await WC.Customer.Consult("CUS-XXXXXXXXXXXX");

Listar Todos os Clientes

var result = await WC.Customer.List();

Pedidos

Criar Pedido

var body = new OrderRequest
{
    OwnId = "id_pedido",
    Amount = new Amount
    {
        Currency = "BRL",
        Subtotals = new Subtotals
        {
            Shipping = 1000
        }
    },
    Items = new List<Item>
    {
        new Item
        {
            Product = "Descrição do pedido",
            Category = "VIDEO_GAME_SOFTWARE",
            Quantity = 1,
            Detail = "Mais info...",
            Price = 22000
        }
    },
    Customer = new Customer
    {
        Id = "CUS-7AKU0VORZ2D4"
    },
    Receivers = new List<Receiver>
    {
        new Receiver
        {
            Type = "SECONDARY",
            FeePayor = false,
            MoipAccount = new Moipaccount
            {
                Id = "MPA-E3C8493A06AE"
            },
            Amount = new Amount
            {
                Fixed = 5000
            }
        }
    }
};
var result = await WC.Order.Create(body);

Consultar Pedido

var result = await WC.Order.Consult("ORD-XXXXXXXXXXXX");

Listar Todos os Pedidos - Sem Filtros

var result = await WC.Order.List();

Listar Todos os Pedidos - Com Filtros

string filtros = "q=josesilva&filters=status::in(PAID,WAITING)|paymentMethod::in(CREDIT_CARD,BOLETO)|value::bt(5000,10000)&limit=3&offset=0";
var result = await WC.Order.ListFilter(filtros);

Veja a tabela filtros de busca aqui.

Pagamentos

Criar Pagamento - Cartão de Crédito

var body = new PaymentRequest
{
   //informe os campos aqui
   InstallmentCount = 1,
   FundingInstrument = new Fundinginstrument
   {
       Method = "CREDIT_CARD",
       CreditCard = new Creditcard
       {
           Id = "CRC-XXXXXXXXXXXX",
           Cvc = "123",
           Holder = new Holder
           {
               FullName = "Jose Portador da Silva",
               BirthDate = "1988-12-30",
               TaxDocument = new Taxdocument
               {
                   Type = "CPF",
                   Number = "33333333333"
               }
           }
       }
   }
};          
var result = await WC.Payment.Create(body, "ORD-XXXXXXXXXXXX");

Criar Pagamento - Boleto

var body = new PaymentRequest
{
    //informe os campos aqui
    StatementDescriptor = "Minha Loja",
    FundingInstrument = new Fundinginstrument
    {
        Method = "BOLETO",
        Boleto = new Boleto
        {
            ExpirationDate = "2020-06-20", //yyyy-MM-dd
            InstructionLines = new Instructionlines
            {
                First = "Atenção",
                Second = "fique atento à data de vencimento do boleto.",
                Third = "Pague em qualquer casa lotérica."
            }
        }        
    }
};
var result = await WC.Payment.Create(body, "ORD-XXXXXXXXXXXX");
var link = result._Links.Payboleto.PrintHref; // <--- obter o link para impress√£o

Criar Pagamento - Débito Online

var body = new PaymentRequest
{
    FundingInstrument = new Fundinginstrument
    {
        Method = "ONLINE_BANK_DEBIT",
        OnlineBankDebit = new Onlinebankdebit
        {
            BankNumber = "341",
            ExpirationDate = "2017-10-22"
        }
    }
};
var result = await WC.Payment.Create(body, "ORD-XXXXXXXXXXXX");

Liberação de Custódia

var result = await WC.Payment.ReleaseCustody("ECW-XXXXXXXXXXXX");

Capturar Pagamento Pré-autorizado

var result = await WC.Payment.CaptureAuthorized("PAY-XXXXXXXXXXXX");

Cancelar Pagamento Pré-autorizado

var result = await WC.Payment.CancelAuthorized("PAY-XXXXXXXXXXXX");

Consultar Pagamento

var result = await WC.Payment.Consult("PAY-XXXXXXXXXXXX");

Simular Pagamentos (sandbox)

var result = await WC.Payment.Simulate("PAY-XXXXXXXXXXXX", 26500);

Multipedidos

Criar Multipedido

var body = new MultiOrderRequest
{
    OwnId = "meu_multiorder_id",
    Orders = new List<Order>
    {
        new Order
        {
            OwnId = "pedido_1_id",
            Amount = new Amount
            {
                Currency = "BRL",
                Subtotals = new Subtotals
                {
                    Shipping = 2000
                }
            },
            Items = new List<Item>
            {
                new Item
                {
                    Product = "Camisa Verde e Amarelo - Brasil",
                    Quantity = 1,
                    Detail = "Seleção Brasileira",
                    Price = 2000
                }
            },
            Customer = new Customer
            {
                OwnId = "customer[1234]",
                FullName = "Joao Souza",
                Email = "joao.sousa@email.com",
                BirthDate = "1988-12-30",
                TaxDocument = new Taxdocument
                {
                    Type = "CPF",
                    Number = "22222222222"
                },
                Phone = new Phone
                {
                    CountryCode = "55",
                    AreaCode = "11",
                    Number = "66778899"
                },
                ShippingAddress = new Shippingaddress
                {
                    City = "S√£o Paulo",
                    Complement = "10",
                    District = "Itaim Bibi",
                    Street = "Avenida Faria Lima",
                    StreetNumber = "500",
                    ZipCode = "01234000",
                    State = "SP",
                    Country = "BRA"
                }
            },
            Receivers = new List<Receiver>
            {
                new Receiver
                {
                    MoipAccount = new Moipaccount
                    {
                        Id = "MPA-VB5OGTVPCI52"
                    },
                    Type = "PRIMARY"
                }
            }
        },
        new Order
        {
            OwnId = "pedido_2_id",
            Amount = new Amount
            {
                Currency = "BRL",
                Subtotals = new Subtotals
                {
                    Shipping = 2000
                }
            },
            Items = new List<Item>
            {
                new Item
                {
                    Product = "Camisa Preta e Vermelha - Alemanha",
                    Quantity = 1,
                    Detail = "Camiseta da Copa 2014",
                    Price = 2000
                }
            },
            Customer = new Customer
            {
                OwnId = "customer[1234]",
                FullName = "Joao Souza",
                Email = "joao.sousa@email.com",
                BirthDate = "1988-12-30",
                TaxDocument = new Taxdocument
                {
                    Type = "CPF",
                    Number = "22222222222"
                },
                Phone = new Phone
                {
                    CountryCode = "55",
                    AreaCode = "11",
                    Number = "66778899"
                },
                ShippingAddress = new Shippingaddress
                {
                    City = "S√£o Paulo",
                    Complement = "10",
                    District = "Itaim Bibi",
                    Street = "Avenida Faria Lima",
                    StreetNumber = "500",
                    ZipCode = "01234000",
                    State = "SP",
                    Country = "BRA"
                }
            },
            Receivers = new List<Receiver>
            {
                new Receiver
                {
                    MoipAccount = new Moipaccount
                    {
                        Id = "MPA-KQB1QFWS6QNM"
                    },
                    Type = "SECONDARY",
                    FeePayor = false,
                    Amount = new Amount
                    {
                        Fixed = 55
                    }
                }
            }
        }
    }
};            
var result = await WC.MultiOrder.Create(body);

Consultar Multipedido

var result = await WC.MultiOrder.Consult("MOR-XXXXXXXXXXXX");

Multipagamentos

Criar Multipagamento

var body = new MultiPaymentRequest
{
    InstallmentCount = 1,
    FundingInstrument = new Fundinginstrument
    {
        Method = "CREDIT_CARD",
        CreditCard = new Creditcard
        {
            Hash = "HhL0...pIkjl2+3Q==",
            Holder = new Holder
            {
                FullName = "",
                BirthDate = "1988-12-30",
                TaxDocument = new Taxdocument
                {
                    Type = "CPF",
                    Number = "33333333333"
                },
                Phone = new Phone
                {
                    CountryCode  = "55",
                    AreaCode = "11",
                    Number = "66778899"
                }
            }
        }
    }
};            
var result = await WC.MultiPayment.Create(body, "MOR-XXXXXXXXXXXX");

Consultar Multipagamento

var result = await WC.MultiPayment.Consult("MPY-XXXXXXXXXXXX");

Capturar Multipagamento Pré-autorizado

var result = await WC.MultiPayment.CaptureAuthorized("MPY-XXXXXXXXXXXX");

Cancelar Multipagamento Pré-autorizado

var result = await WC.MultiPayment.CancelAuthorized("MPY-XXXXXXXXXXXX");

Liberação de Custódia

var result = await WC.MultiPayment.ReleaseCustody("ECW-XXXXXXXXXXXX");

Notifica√ß√Ķes

Criar Preferência de Notificação para Conta Wirecard

var body = new NotificationRequest
{
    Events = new List<string> { "ORDER.*", "PAYMENT.AUTHORIZED", "PAYMENT.CANCELLED" },
    Target = "https://webhook.site/a54daf-da54-8d5a-8d5d1-kfa4gahf42",
    Media = "WEBHOOK"
};           
var result = await WC.Notification.CreatAccountWirecard(body);

Criar Preferência de Notificação para App

Caso não tenha uma URL disponível, você pode usar o Webhook Tester para fazer seus testes e receber os webhooks.

Para isso basta acessar o site e gera uma URL automaticamente.

var body = new NotificationRequest
{
    Events = new List<string> { "ORDER.*" },
    Target = "https://webhook.site/a54daf-da54-8d5a-8d5d1-kfa4gahf42",
    Media = "WEBHOOK"
};           
var result = await WC.Notification.CreateApp(body);

Criar Preferência de Notificação para App com código identificador

var body = new NotificationRequest
{
    Events = new List<string> { "ORDER.*" },
    Target = "https://webhook.site/a54daf-da54-8d5a-8d5d1-kfa4gahf42",
    Media = "WEBHOOK"
};           
var result = await WC.Notification.CreateApp(body, "APP-3984HG73HE9");

Consultar Preferência de Notificação

var result = await WC.Notification.Consult("NPR-XXXXXXXXXXXX");

Listar Todas as Preferências de Notificação

var result = await WC.Notification.List();

Remover Preferência de Notificação

var result = await WC.Notification.Remove("NPR-XXXXXXXXXXXX");
if (result == HttpStatusCode.NoContent)
{
    // Caso a Preferência de Notificação tenha sido deletada, você deve receber uma response vazia (NoContent)
}

Consultar Webhook Enviado

var result = await WC.Notification.ConsultWebhook("PAY-XXXXXXXXXXXX"); 

Listar Todos os Webhooks Enviados

var result = await WC.Notification.ListWebhooks();

Reenviar Webhook

var body = new NotificationRequest
{
    ResourceId = "PAY-XJM2SF6IS7FU",
    Event = "PAYMENT.AUTHORIZED"
};
var result = await WC.Notification.ResendWebhook(body);

Desserializar WebHook

Ao configurar suas Preferências de Notificação você deve receber os webhooks em formato JSON e você pode desserializar.

var json = "{ \"date\": \"\", \"env\": \"\", ... }";
var result = Utilities.DeserializeWebHook(json);

Veja um exemplo do webhook aqui.

Para aumentar a seguran√ßa da sua aplica√ß√£o e garantir que apenas a Wirecard pode enviar notifica√ß√Ķes para o seu sistema, voc√™ pode conferir o token enviado no header dos webhooks. Este token √© o mesmo que √© gerado no momento do cadastro da sua URL:

var token = Request.Headers["Authorization"];

Contas Banc√°rias

Criar Conta Banc√°ria

var body = new BankAccountRequest
{
    BankNumber = "237",
    AgencyNumber = "12345",
    AgencyCheckNumber = "0",
    AccountNumber = "12345678",
    AccountCheckNumber = "7",
    Type = "CHECKING",
    Holder = new Holder
    {
        TaxDocument = new Taxdocument
        {
            Type = "CPF",
            Number = "622.134.533-22"
        },
        FullName = "Demo Wirecard"
    }
};
string accesstoken = "XXXXXXXXXXXXXXXXXXXXXXXXXXX_v2"; // accesstoken do recebedor
var result = await WC.BankAccount.Create(body, accesstoken, "MPA-XXXXXXXXXXXX");

Consultar Conta Banc√°ria

string accesstoken = "XXXXXXXXXXXXXXXXXXXXXXXXXXX_v2"; // accesstoken do recebedor
var result = await WC.BankAccount.Consult(accesstoken, "BKA-XXXXXXXXXXXX");

Listar Todas Contas Banc√°rias

string accesstoken = "XXXXXXXXXXXXXXXXXXXXXXXXXXX_v2"; // accesstoken do recebedor
var result = await WC.BankAccount.List(accesstoken, "MPA-XXXXXXXXXXXX");

Deletar Conta Banc√°ria

string accesstoken = "XXXXXXXXXXXXXXXXXXXXXXXXXXX_v2"; // accesstoken do recebedor
var result = await WC.BankAccount.Delete(accesstoken, "BKA-XXXXXXXXXXXX");

Atualizar Conta Banc√°ria

var body = new BankAccountRequest
{
    BankNumber = "237",
    AgencyNumber = "12345",
    AgencyCheckNumber = "8",
    AccountNumber = "12345678",
    AccountCheckNumber = "8",
    Type = "CHECKING",
    Holder = new Holder
    {
        TaxDocument = new Taxdocument
        {
            Type = "CPF",
            Number = "622.134.533-22"
        },
        FullName = "Nome Completo"
    }
};
string accesstoken = "XXXXXXXXXXXXXXXXXXXXXXXXXXX_v2"; // accesstoken do recebedor
var result = await WC.BankAccount.Update(body, accesstoken, "BKA-XXXXXXXXXXXX");

Saldo Wirecard

Consultar Saldos

var result = await WC.Balance.Consult();

Lançamentos

Consultar Lançamento

var result = await WC.Launch.Consult("ENT-XXXXXXXXXXXX");

Listar Todos Lançamentos

var result = await WC.Launch.List();

Listar Todos Lançamentos com Filtro

string filtros = "filters=status::in(SETTLED)";
var result = await WC.Launch.ListFilter(filtros);

Extratos

Listar Extrato

var result = await WC.Extract.List("2019-01-15", "2019-01-01");

Detalhes do Extrato

var result = await WC.Extract.Detail("1", "2018-10-04");

Listar Extrato Futuro

var result = await WC.Extract.ListFuture("2018-01-01", "2018-01-15");

Detalhes do Extrato Futuro

var result = await WC.Extract.DetailFuture("1", "2018-12-18");

Tipo do extrato, disponível na tabela de tipos de lançamentos

Transferências

Criar Transferência

var body = new TransferRequest
{
    Amount = 500,
    TransferInstrument = new Transferinstrument
    {
        Method = "",
        BankAccount = new Bankaccount
        {
            Type = "CHECKING",
            BankNumber = "001",
            AgencyNumber = "1111",
            AgencyCheckNumber = "2",
            AccountNumber = "9999",
            AccountCheckNumber = "8",
            Holder = new Holder
            {
                FullName = "Nome do Portador",
                TaxDocument = new Taxdocument
                {
                    Type = "CPF",
                    Number = "22222222222"
                }
            }
        }
    }
};
string accessToken = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx_v2";
var result = await WC.Transfer.Create(body, accessToken);

Reverter Transferência

string accessToken = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx_v2";
var result = await WC.Transfer.Revert("TRA-XXXXXXXXXXXX", accessToken);

Consultar Transferência

string accessToken = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx_v2";
var result = await WC.Transfer.Consult("TRA-XXXXXXXXXXXX", accessToken);

Listar Todas Transferências

var result = await WC.Transfer.List();

Listar Todas Transferências com filtros

string filtros = "filters=transferInstrument.method::in(MOIP_ACCOUNT)&limit=3&offset=0";
var result = await WC.Transfer.ListFilter(filtros);

Reembolsos

Reembolsar Pagamento

var body = new RefundRequest
{
    //caso queira fazer um reembolso parcial é necessário informar o atributo amount na requisição
    Amount = "2000"
};            
var result = await WC.Refund.RefundPayment(body, "PAY-XXXXXXXXXXXX");

Reembolsar Pedido via Cartão de Crédito

var body = new RefundRequest
{
    //caso queira fazer um reembolso parcial é necessário informar o atributo amount na requisição
    Amount = "2000"
};            
var result = await WC.Refund.RefundRequestCreditCard(body, "ORD-XXXXXXXXXXXX");

Consultar Reembolso

var result = await WC.Refund.Consult("REF-XXXXXXXXXXXX");

Listar Reembolsos do Pagamento

var result = await WC.Refund.ListPayments("PAY-XXXXXXXXXXXX");

Listar Reembolsos do Pedido

var result = await WC.Refund.ListOrders("ORD-XXXXXXXXXXXX");

Conciliação

Obter Arquivo de Vendas

var result = await WC.Conciliation.GetSalesFile("20180829"); // Data no formato YYYYMMDD

Obter Arquivo Financeiro

var result = await WC.Conciliation.GetFinancialFile("2018-08-29"); // Data no formato YYYY-MM-DD

Assinatura

Criar Plano

var body = new PlanRequest
{
    Code = "plan103",
    Name = "Plano Especial",
    Description = "Descrição do Plano Especial",
    Amount = 990,
    Setup_Fee = 500,
    Max_Qty = 1,
    Interval = new Interval
    {
        Length = 1,
        Unit = "MONTH"
    },
    Billing_Cycles = 12,
    Trial = new Trial
    {
        Days = 30,
        Enabled = true,
        Hold_Setup_Fee = true
    }
};
var result = await WC.Signature.CreatePlan(body);

Listar Planos

var result = await WC.Signature.ListPlans();

Consultar Plano

var result = await WC.Signature.ConsultPlan("plan101");

Ativar Plano

var result = await WC.Signature.EnablePlan("plan101");

Desativar Plano

var result = await WC.Signature.DisablePlan("plan101");

Alterar Plano

var body = new PlanRequest
{
    Name = "Plano Especial",
    Description = "",
    Amount = 1290,
    Setup_Fee = 800,
    Max_Qty = 1,
    Payment_Method = "CREDIT_CARD",
    Interval = new Interval
    {
        Length = 1,
        Unit = "MONTH"
    },
    Billing_Cycles = 12,
    Trial = new Trial
    {
        Days = 30,
        Enabled = true,
        Hold_Setup_Fee = true
    }
};
var result = await WC.Signature.ChangePlan(body, "plan101");

Criar Assinante

var body = new SubscriberRequest
{
    Code = "cliente03",
    Email = "nome@exemplo.com.br",
    FullName = "Nome Sobrenome",
    Cpf = "22222222222",
    Phone_Area_Code = "11",
    Phone_Number = "934343434",
    BirthDate_Day = "26",
    BirthDate_Month = "04",
    BirthDate_Year = "1980",
    Address = new Address
    {
        Street = "Rua Nome da Rua",
        StreetNumber = "100",
        Complement = "casa",
        District = "Nome do Bairro",
        City = "S√£o Paulo",
        State = "SP",
        Country = "BRA",
        ZipCode = "05015010"
    },
    Billing_Info = new Billing_Info
    {
        Credit_Card = new Credit_Card
        {
            Holder_Name = "Nome Completo",
            Number = "4111111111111111",
            Expiration_Month = "06",
            Expiration_Year = "22"
        }
    }
};
var result = await WC.Signature.CreateSubscriber(body, true);

Listar Assinantes

var result = await WC.Signature.ListSubscribers();

Consultar Assinante

var result = await WC.Signature.ConsultSubscriber("cliente01");

Alterar Assinante

var body = new SubscriberRequest
{
    Code = "cliente01",
    Email = "nome@exemplo.com.br",
    FullName = "Nome Sobrenome",
    Cpf = "22222222222",
    Phone_Area_Code = "11",
    Phone_Number = "934343434",
    BirthDate_Day = "26",
    BirthDate_Month = "04",
    BirthDate_Year = "1980",
    Address = new Address
    {
        Street = "Rua Nome da Rua1",
        StreetNumber = "100",
        Complement = "casa",
        District = "Nome do Bairro",
        City = "S√£o Paulo",
        State = "SP",
        Country = "BRA",
        ZipCode = "05015010"
    }
};
var result = await WC.Signature.ChangeSubscriber(body, "cliente01");

Atualizar Cart√£o do Assinante

var body = new SubscriberRequest
{
    Billing_Info = new Billing_Info
    {
        Credit_Card = new Credit_Card
        {
            Holder_Name = "Novo nome222",
            Number = "5555666677778884",
            Expiration_Month = "12",
            Expiration_Year = "20"
        }
    }
};
var result = await WC.Signature.UpdateSubscriberCard(body, "cliente01");

Criar Assinaturas

var body = new SubscriptionRequest
{
    Code = "assinatura04",
    Amount = "9000",
    Plan = new Plan
    {
        Code = "plan101"
    },
    Payment_Method = "CREDIT_CARD",
    Customer = new Customer
    {
        Code = "cliente01",
    }
};
var result = await WC.Signature.CreateSubscriptions(body, false);

Listar Todas Assinaturas

var result = await WC.Signature.ListAllSubscriptions();

Consultar Assinatura -Sem Filtro

var result = await WC.Signature.ConsultSubscriptionFilter("assinatura01");

Consultar Assinatura - Com Filtro

var filter = "q=assinatura01&filters=status::eq(ACTIVE)";
var result = await WC.Signature.ConsultSubscription(filter);

Alguns exemplos de como filtrar:

  1. Pesquisar e Filtrar assinaturas (q=teste&filters=status::eq(EXPIRED))
  2. Filtrar assinaturas por status (filters=status::eq(EXPIRED)&limit=10&offset=0)
  3. Filtrar assinaturas por creation_date (filters=creation_date::bt(2014-11-08,2015-05-07)&limit=100&offset=0)
  4. Filtrar assinaturas por next_invoice_date (filters=next_invoice_date::bt(2015-10-12,2015-10-12)&limit=100&offset=0)
  5. Filtrar assinaturas por plano (filters=plan.code::eq(TESTE_WIRECARD)&limit=100&offset=0)
  6. Filtrar assinaturas por customer.code (filters=customer.code::eq(HHDGOo)&limit=100&offset=0)
  7. Filtrar assinaturas por customer.email (filters=customer.email::eq(joao.silva@email.com.br)&limit=100&offset=0)
  8. Filtrar assinaturas por customer.cpf (filters=customer.cpf::eq(22222222222)&limit=100&offset=0)
  9. Filtrar assinaturas por valor (filters=amount::bt(100,100000))
  10. Pesquisar Assinatura (q=diego nunes&limit=10&offset=0)

Suspender Assinatura

var result = await WC.Signature.SuspendSubscription("assinatura01");

Reativar Assinatura

var result = await WC.Signature.ReactivateSignature("assinatura01");

Cancelar Assinatura

var result = await WC.Signature.CancelSignature("assinatura01");

Alterar Assinatura

var body = new SubscriptionRequest
{
    Plan = new Plan
    {
        Code = "plan101"
    },
    Amount = "9990",
    Next_Invoice_Date = new Next_Invoice_Date
    {
        Day = 15,
        Month = 12,
        Year = 2018
    }
};
var result = await WC.Signature.ChangeSubscription(body, "assinatura01");

Alterar método de pagamento

var body = new SubscriptionRequest
{
    Payment_Method = "BOLETO"
};
var result = await WC.Signature.ChangePaymentMethod(body, "assinatura01");

Listar Todas as Faturas de Uma Assinatura

var result = await WC.Signature.ListSignatureInvoices("assinatura01");

Consultar Fatura

var result = await WC.Signature.ConsultInvoice("10865746");

Listar todos os pagamentos de fatura

var result = await WC.Signature.ListAllInvoicePayments("10865746");

Consultar pagamento de assinatura

var result = await WC.Signature.ConsultSubscriptionPayment("PAY-123456789012");

Criar Cupom

var body = new CouponRequest
{
    Code = "coupon-0002",
    Name = "Coupon name",
    Description = "My new coupon",
    Discount = new Discount
    {
        Value = 1000,
        Type = "percent"
    },
    Status = "active",
    Duration = new Duration
    {
        Type = "repeating",
        Occurrences = 12
    },
    Max_Redemptions = 100,
    Expiration_Date = new Expiration_Date
    {
        Year = 2020,
        Month = 08,
        Day = 01    
    }
};
var result = await WC.Signature.CreateCoupon(body);

Associar Cupom para Assinatura

var body = new CouponRequest
{
    Coupon = new Coupon
    {
        Code = "coupon-0001"
    }
};
var result = await WC.Signature.AssociateCouponForExistingSignature(body, "assinatura01");

Associar Cupom para Nova Assinatura

var body = new CouponRequest
{
    //informar os campos
};
var result = await WC.Signature.AssociateCouponForExistingSignature(body, "true");

Consultar Cupom

var result = await WC.Signature.ConsultCoupon("coupon-0001");

Listar Todos os Cupons

var result = await WC.Signature.ListAllCoupons();

Ativar e Inativar Cupons

var result = await WC.Signature.EnableOrDisableCoupon("coupon-0001", "inactive");

Excluir Cupom de uma Assinatura

var result = await WC.Signature.DeleteSignatureCoupon("assinatura01");

Retentativa de pagamento de uma fatura

var result = await WC.Signature.RetentiveInvoicePayment("1548222");

Gerar um novo boleto para uma fatura

var body = new RetentativeRequest
{
    Year = 2020,
    Month = 08,
    Day = 01
};
var result = await WC.Signature.CreateNewInvoiceBoleto(body,"1548222");

Criar Regras de Retentativas Autom√°ticas

var body = new RetentativeRequest
{
    First_Try = 1,
    Second_Try = 3,
    Third_Try = 5,
    Finally = "cancel"
};
var result = await WC.Signature.CreateAutomaticRetentionRules(body);

Criar Preferência de Notificação

var body = new NotificationRequest
{
    Notification = new Notification
    {
        Webhook = new Webhook
        {
            Url = "http://exemploldeurl.com.br/assinaturas"
        },
        Email = new Email
        {
            Merchant = new Merchant
            {
                Enabled = true
            },
            Customer = new Customer
            {
                Enabled = true
            }
        }
    }
};
var result = await WC.Signature.CreateNotificationPreference(body);

Convertendo objeto para json

As vezes você enfrenta um problema e o suporte Wirecard pede o código json para verificar se realmente está no json:

using Newtonsoft.Json;

var body = new PaymentRequest
{
    //informe os campos aqui
    DelayCapture = true,
    InstallmentCount = 1,
    FundingInstrument = new Fundinginstrument
    {
        Method = "CREDIT_CARD",
        CreditCard = new Creditcard
        {
            Id = "CRC-XXXXXXXXXXXX",
            Cvc = "123",
            Holder = new Holder
            {
                FullName = "Jose Portador da Silva",
                BirthDate = "1988-12-30",
                TaxDocument = new Taxdocument
                {
                    Type = "CPF",
                    Number = "33333333333"
                }
            }
        }
    }
};

//Aqui você pode obter json e compratilhar para suporte Wirecard
string json = JsonConvert.SerializeObject(body, Formatting.Indented);

Veja como ficou na vari√°vel json:

{
  "installmentCount": 1,
  "delayCapture": true,
  "fundingInstrument": {
    "method": "CREDIT_CARD",
    "creditCard": {
      "id": "CRC-XXXXXXXXXXXX",
      "cvc": "123",
      "holder": {
        "fullname": "Jose Portador da Silva",
        "birthdate": "1988-12-30",
        "taxDocument": {
          "type": "CPF",
          "number": "33333333333"
        }
      }
    }
  }
}

Alterando accesstoken

WC.ChangeAccessToken("new access token here");

Tabela

Tipos de Lançamentos

Id Tipo Descrição
1 CREDIT_CARD Recebíveis de cartão de crédito
2 CREDIT_CARD_INSTALLMENT Recebíveis de cartão de crédito com parcelamento
3 DEBIT_CARD Recebíveis de cartão de débito
4 BOLETO Recebíveis de boleto
5 BANK_FINANCING Recebíveis de financiamento bancário
6 BANK_DEBIT Recebíveis de débito bancário
7 MOIP_WALLET Recebíveis de pagamento usando conta Moip
8 COMMISSION Recebíveis como recebedor secundário
9 COMMISSION_INSTALLMENT Recebíveis como recebedor secundário com parcelamento
10 TRANSFER_TO_MOIP_ACCOUNT_RECEIVED Transferências entre contas Moip
11 TRANSFER_TO_BANK_ACCOUNT_CANCELLED Devolucao de transferencia para conta bancaria
12 DEPOSIT Deposito
13 AMOUNT_UNBLOCKED Liberacao de bloqueio de saldo
14 TRANSFER_TO_BANK_ACCOUNT Transferencia para conta bancaria
15 TRANSFER_TO_MOIP_ACCOUNT_PAID Transferencia entre contas Moip realizada
16 PAYMENT_REVERSE Estornos de pagamento
17 PAYMENT_INSTALLMENT_REVERSE Estornos de parcelas de pagamento
18 COMMISSION_REVERSE Estornos de comiss√£o de pagamento
19 COMMISSION_INSTALLMENT_REVERSE Estornos de comiss√£o da parcela
20 PAYMENT_REFUND Reembolsos de pagamento
21 PAYMENT_INSTALLMENT_REFUND Reembolsos de parcelas de pagamento
22 PAYMENT_PARCIAL_REFUND Reembolsos parciais
23 PAYMENT_PARCIAL_INSTALLMENT_REFUND Reembolsos parciais de parcelas de pagamento
24 COMMISSION_REFUND Reembolsos de comiss√Ķes de pagamento
25 COMMISSION_INSTALLMENT_REFUND Reembolsos de comiss√Ķes de parcelas de pagamento
26 MOIP_WALLET_PAYMENT Pagamento realizado
27 PRE_PAYMENT_FEE Taxas de antecipação de recebí­veis
28 PENALTY Multa
29 MOIP_RECURRING_CHARGE Assinatura Moip
30 AMOUNT_BLOCKED Bloqueio de saldo
31 MOIP_FINANCIAL_ADJUSTEMENT Ajuste financeiro do Moip
32 REFUND_REVOKE Cancelamento do Reembolso do Pagamento
33 PAYMENT_PARCIAL_REFUND_REVOKE Cancelamento do Reembolso parcial do Pagamento
34 PAYMENT_PARCIAL_INSTALLMENT_REFUND_REVOKE Cancelamento do Reembolso parcial do Pagamento
35 COMMISSION_REFUND_REVOKE Cancelamento do Reembolso da Comissao do Pagamento
36 COMMISSION_INSTALLMENT_REFUND_REVOKE Cancelamento do Reembolso da Comissao do Pagamento
37 REMITTANCE_CREDIT Recebí­veis de pagamento de remessa
38 REMITTANCE_DEBIT Pagamento de remessa
39 BALANCE_ADJUSTMENT Conciliacao entre plataformas
40 JUDICIAL_DEBIT Débito Juridico
41 TRANSFER_TO_MOIP_ACCOUNT_PAID_REVERTED Transferencia entre contas revertida
42 TRANSFER_TO_MOIP_ACCOUNT_RECEIVED_REVERTED Transferencia entre contas revertida
43 REMAINING_CREDIT_REFUND Credito Remanescente de Reembolso
44 DEBIT_COMPENSATORY_REFUND Debito Compensatorio de Reembolso
45 MAINTENANCE_FEE Taxa de manutencao - conta inativa
46 ESCROW_BLOCKED Bloqueio de custódia
47 ESCROW_UNBLOCKED Desbloqueio de custódia
48 BILL_PAYMENT Pagamento de contas
49 CARD_PURCHASE Compra no cart√£o
50 CARD_PURCHASE_REVERSAL Revers√£o de compra no cart√£o
51 CARD_WITHDRAWAL Saque no cart√£o
52 CARD_WITHDRAWAL_REVERSAL Revers√£o de saque no cart√£o
53 CARD_PREPURCHASE Pré-compra no cartão
54 CARD_PREPURCHASE_REVERSAL Reversão de pré-compra no cartão
55 CARD_PREPURCHASE_INCREMENT Incremento de pré-compra no cartão
56 CARD_PREPURCHASE_INCREMENT_REVERSAL Reversão de incremento de pré-compra
57 CARD_PREPURCHASE_COMPLETE Finalização de pré-compra
58 CARD_REFUND Reembolso de compra no cart√£o
59 CARD_REFUND_REVERSAL Revers√£o de reembolso de compra no cart√£o
60 CARD_CHARGEBACK Chargeback de compra no cart√£o
61 CARD_CHARGEBACK_REVERSAL Revers√£o de chargeback de compra no cart√£o
62 CARD_ISSUED Taxa de emiss√£o do cart√£o
63 CARD_P2PCREDIT Crédito de P2P
64 CARD_P2PCREDIT_REVERSAL Reversão de crédito P2P
65 BILL_PAYMENT_CANCELLED Devoluo de pagamento de contas

Filtros de busca

Nome Tipo Descrição
limit int Quantidade de registros por busca (página). O valor default é 20
offset int Registro a partir do qual a busca vai retornar. O valor default é 0
gt(x) number or date Maior que - ‚ÄúGreater Than‚ÄĚ
ge(x) number or date Maior ou igual - ‚ÄúGreater than or Equal‚ÄĚ
lt(x) number or date Menor que - ‚ÄúLess Than‚ÄĚ
le(x) number or date Menor ou igual - ‚ÄúLess than or Equal‚ÄĚ
bt(x,y) string Entre - ‚ÄúBetween‚ÄĚ
in(x,y‚Ķz) string Em - ‚ÄúIN‚ÄĚ
q Consulta um valor em específico

‚úÖ Fazendo uma busca com os seguintes requisitos:

+ Transa√ß√Ķes de valores entre 5000 e 10000 (em centavos);
+ Formas de pagamento: Cartão de Crédito e Boleto;
+ Cliente com o nome jose silva;
+ Retornando 3 resultados.

GET https: //sandbox.moip.com.br/v2/orders?q=jose silva &filters=status::in(PAID,WAITING)|paymentMethod::in(CREDIT_CARD,BOLETO) |value::bt(5000,10000)&limit=3&offset=0

Você pode também fazer uma busca por pedidos dentro de um intervalo de tempo:

GET https: //sandbox.moip.com.br/v2/orders?filters=createdAt::bt(2017-10-10T13:07:00Z,2017-10-25T13:08:00Z)

Exceção

Obter erros

Você pode recuperar os atributos code, path, description, message e error, veja no exemplo abaixo:

using Wirecard.Exception;

try
{
    var result = await WC.Customer.Create(new CustomerRequest());
}
catch (WirecardException ex)
{
    var t = ex.wirecardError;
    var t_text = ex.GetExceptionText();
} 

Tabela de erros

Nome Descrição Detalhe
code Código identificador do erro string
path Par√Ęmetro relacionado ao erro string
description Descrição do erro string
message Mensagem do retorno Wirecard string

Licença

The MIT License

Tem d√ļvidas? Fale com a gente no Slack! Algum problema ? Abre issues!

You can’t perform that action at this time.