Skip to content

đŸ”„ đŸšŸ - API do Wirecard para .NET - SDK

License

Notifications You must be signed in to change notification settings

uzbekdev1/WirecardCSharp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

Índice

ImplementaçÔes .NET com suporte

Essa biblioteca foi feito em .NET Standard 1.2 e tem suporte das seguintes implementaçÔes do .NET:

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

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 WirecardCSharp

đŸ’„ Obs: Trocamos a biblioteca MoipCSharp por WirecardCSharp.

Autenticando e configurando o ambiente (E-Commerce)

Escolha o "ambiente" vocĂȘ quer executar suas açÔes e informe seu (token, chave):

using WirecardCSharp;
using WirecardCSharp.Models;

private const string token = "xxxxxxxxxxxxxxxxxxx";
private const string key = "xxxxxxxxxxxxxxxxxxxxxxxxxx";
private WirecardClient WirecardClient = 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 WirecardCSharp;
using WirecardCSharp.Models;

private const string accessToken = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx_v2";
private WirecardClient WirecardClient = 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(() => WirecardClient.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 WirecardClient.ClassicAccount.AccountExist("[email protected]");
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 WirecardClient.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

var body = new ClassicAccountRequest
{
    //informe os campos aqui
};
var result = await WirecardClient.ClassicAccount.Create(body);

Consultar Conta Wirecard

var result = await WirecardClient.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

var result = await WirecardClient.ClassicAccount.GenerateAccessToken(/*informe o valor de cada parĂąmetro*/);

Atualizar accessToken

var result = await WirecardClient.ClassicAccount.UpdateAccessToken(/*informe o valor de cada parĂąmetro*/);

Obter chave pĂșblica de uma Conta Wirecard

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

Conta Transparente

Criar Conta Wirecard Transparente

var body = new TransparentAccountRequest
{
    TransparentAccount = true,
    Type = "MERCHANT",
    Email = new Email
    {
        Address = "[email protected]"
    },
    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 WirecardClient.TransparentAccount.Create(body);

Clientes

Criar Cliente

var body = new CustomerRequest
{
    //informe os campos aqui
};
var result = await WirecardClient.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 WirecardClient.Customer.AddCreditCard(body, "CUS-XXXXXXXXXXXX");

Deletar Cartão de Crédito

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

Consultar Cliente

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

Listar Todos os Clientes

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

Pedidos

Criar Pedido

var body = new OrderRequest
{
    //informe os campos aqui
};
var result = await WirecardClient.Order.Create(body);

Consultar Pedido

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

Listar Todos os Pedidos - Sem Filtros

var result = await WirecardClient.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 WirecardClient.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 WirecardClient.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 WirecardClient.Payment.Create(body, "ORD-XXXXXXXXXXXX");

Liberação de Custódia

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

Capturar Pagamento Pré-autorizado

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

Cancelar Pagamento Pré-autorizado

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

Consultar Pagamento

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

Simular Pagamentos (sandbox)

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

Multipedidos

Criar Multipedido

var body = new MultiOrderRequest
{
    //informe os campos aqui
};            
var result = await WirecardClient.MultiOrder.Create(body);

Consultar Multipedido

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

Multipagamentos

Criar Multipagamento

var body = new MultiPaymentRequest
{
    //informe os campos aqui
};            
var result = await WirecardClient.MultiPayment.Create(body, "MOR-XXXXXXXXXXXX");

Consultar Multipagamento

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

Capturar Multipagamento Pré-autorizado

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

Cancelar Multipagamento Pré-autorizado

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

Liberação de Custódia

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

NotificaçÔes

Criar PreferĂȘncia de Notificação para Conta Wirecard

var body = new NotificationRequest
{
    //informe os campos aqui
};            
var result = await WirecardClient.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 WirecardClient.Notification.CreateApp(body, "APP-XXXXXXXXXXXX");

Consultar PreferĂȘncia de Notificação

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

Listar Todas as PreferĂȘncias de Notificação

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

Remover PreferĂȘncia de Notificação

var result = await WirecardClient.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 WirecardClient.Notification.ConsultWebhook("PAY-XXXXXXXXXXXX"); 

Listar Todos os Webhooks Enviados

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

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.

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 WirecardClient.BankAccount.Create(body, accesstoken, "MPA-XXXXXXXXXXXX");

Consultar Conta BancĂĄria

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

Listar Todas Contas BancĂĄrias

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

Deletar Conta BancĂĄria

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

Atualizar Conta BancĂĄria

var body = new BankAccountRequest
{
    //informe os campos aqui
};
string accesstoken = "XXXXXXXXXXXXXXXXXXXXXXXXXXX_v2"; // accesstoken do recebedor
var result = await WirecardClient.BankAccount.Update(body, accesstoken, "BKA-XXXXXXXXXXXX");

Saldo Wirecard

Consultar Saldos

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

Lançamentos

Consultar Lançamento

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

Listar Todos Lançamentos

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

Listar Todos Lançamentos com Filtro

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

TransferĂȘncias

Criar TransferĂȘncia

var body = new TransferRequest
{
    //informe os campos aqui
};
string accessToken = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx_v2";
var result = await WirecardClient.Transfer.Create(body, accessToken);

Reverter TransferĂȘncia

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

Consultar TransferĂȘncia

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

Listar Todas TransferĂȘncias

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

Listar Todas TransferĂȘncias com filtros

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

Reembolsos

Reembolsar Pagamento

var body = new RefundRequest
{
    //informe os campos aqui
};            
var result = await WirecardClient.Refund.RefundPayment(body, "PAY-XXXXXXXXXXXX");

Reembolsar Pedido via Cartão de Crédito

var body = new RefundRequest
{
    //informe os campos aqui
};            
var result = await WirecardClient.Refund.RefundRequestCreditCard(body, "ORD-XXXXXXXXXXXX");

Consultar Reembolso

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

Listar Reembolsos do Pagamento

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

Listar Reembolsos do Pedido

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

Conciliação

Obter Arquivo de Vendas

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

Obter Arquivo Financeiro

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

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"
        }
      }
    }
  }
}

Tabela - 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 WirecardCSharp.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!

About

đŸ”„ đŸšŸ - API do Wirecard para .NET - SDK

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages