DEPRECATED
# Wirecard-NET
A credenciadora de cartões PagSeguro, do grupo Uol, anunciou a compra da Wirecard Brazil, subsidiária da empresa de pagamentos alemã envolvida em um escândalo de fraude contábil.
Mais detalhes: https://exame.com/negocios/pagseguro-compra-wirecard-brazil/
Criamos outra bilioteca pagbank-dotnet a partir daqui: https://github.com/matmiranda/pagbank-dotnet
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.
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 by Wirecard | ❌ Descontinuado |
- Implementações .NET com suporte
- Aviso Importante
- Instalação
- Autenticando e configurando o ambiente (E-Commerce)
- Autenticando e configurando o ambiente (Marketplace)
- Assíncrona x Síncrona
- Conta Clássica
- Verificar se usuário já possui Conta Wirecard (email)
- Verificar se usuário já possui Conta Wirecard (documento)
- Criar Conta Wirecard Clássica (Conta PF)
- Criar Conta Wirecard Clássica (Conta PJ)
- Consultar Conta Wirecard
- Solicitar Permissões de Acesso ao Usuário
- Gerar Access Token
- Atualizar accessToken
- Obter chave pública de uma Conta Wirecard
- Conta Transparente
- Clientes
- Pedidos
- Pagamentos
- Multipedidos
- Multipagamentos
- Notificações
- Criar Preferência de Notificação para Conta Wirecard
- Criar Preferência de Notificação para App
- Criar Preferência de Notificação para App com código identificador
- Consultar Preferência de Notificação
- Listar Todas as Preferências de Notificação
- Remover Preferência de Notificação
- Consultar Webhook Enviado
- Listar Todos os Webhooks Enviados
- Reenviar Webhook
- Desserializar WebHook
- Contas Bancárias
- Saldo Wirecard
- Lançamentos
- Extratos
- Transferências
- Reembolsos
- Conciliação
- Assinatura
- Criar Plano
- Listar Planos
- Consultar Plano
- Ativar Plano
- Desativar Plano
- Alterar Plano
- Criar Assinante
- Listar Assinantes
- Consultar Assinante
- Alterar Assinante
- Atualizar Cartão do Assinante
- Criar Assinaturas
- Listar Todas Assinaturas
- Consultar Assinatura -Sem Filtro
- Consultar Assinatura - Com Filtro
- Suspender Assinatura
- Reativar Assinatura
- Cancelar Assinatura
- Alterar Assinatura
- Alterar método de pagamento
- Listar Todas as Faturas de Uma Assinatura
- Consultar Fatura
- Listar todos os pagamentos de fatura
- Consultar pagamento de assinatura
- Criar Cupom
- Associar Cupom para Assinatura
- Associar Cupom para Nova Assinatura
- Consultar Cupom
- Listar Todos os Cupons
- Ativar e Inativar Cupons
- Excluir Cupom de uma Assinatura
- Retentativa de pagamento de uma fatura
- Gerar um novo boleto para uma fatura
- Criar Regras de Retentativas Automáticas
- Criar Preferência de Notificação
- Convertendo objeto para json
- Alterando accesstoken
- Tabela
- Exceção
- Licença
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.
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.
Execute o comando para instalar via NuGet:
PM> Install-Package Wirecard
💥 Obs: Trocamos a biblioteca MoipCSharp por Wirecard.
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.
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.
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;
🚩 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)
}
🚩 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)
}
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);
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);
var result = await WC.ClassicAccount.Consult("MPA-XXXXXXXXXXXX");
🚩 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.
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);
string grant_type = "refresh_token";
string refresh_token = "2381dfbbcbd645268af1dd0e4456bfe1_v2";
var result = await WC.ClassicAccount.UpdateAccessToken(grant_type, refresh_token);
var result = await WC.ClassicAccount.GetPublickey();
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);
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);
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);
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");
var result = await WC.Customer.DeleteCreditCard("CRC-XXXXXXXXXXXX");
var result = await WC.Customer.Consult("CUS-XXXXXXXXXXXX");
var result = await WC.Customer.List();
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);
var result = await WC.Order.Consult("ORD-XXXXXXXXXXXX");
var result = await WC.Order.List();
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.
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");
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
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");
var result = await WC.Payment.ReleaseCustody("ECW-XXXXXXXXXXXX");
var result = await WC.Payment.CaptureAuthorized("PAY-XXXXXXXXXXXX");
var result = await WC.Payment.CancelAuthorized("PAY-XXXXXXXXXXXX");
var result = await WC.Payment.Consult("PAY-XXXXXXXXXXXX");
var result = await WC.Payment.Simulate("PAY-XXXXXXXXXXXX", 26500);
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);
var result = await WC.MultiOrder.Consult("MOR-XXXXXXXXXXXX");
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");
var result = await WC.MultiPayment.Consult("MPY-XXXXXXXXXXXX");
var result = await WC.MultiPayment.CaptureAuthorized("MPY-XXXXXXXXXXXX");
var result = await WC.MultiPayment.CancelAuthorized("MPY-XXXXXXXXXXXX");
var result = await WC.MultiPayment.ReleaseCustody("ECW-XXXXXXXXXXXX");
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);
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);
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");
var result = await WC.Notification.Consult("NPR-XXXXXXXXXXXX");
var result = await WC.Notification.List();
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)
}
var result = await WC.Notification.ConsultWebhook("PAY-XXXXXXXXXXXX");
var result = await WC.Notification.ListWebhooks();
var body = new NotificationRequest
{
ResourceId = "PAY-XJM2SF6IS7FU",
Event = "PAYMENT.AUTHORIZED"
};
var result = await WC.Notification.ResendWebhook(body);
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"];
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");
string accesstoken = "XXXXXXXXXXXXXXXXXXXXXXXXXXX_v2"; // accesstoken do recebedor
var result = await WC.BankAccount.Consult(accesstoken, "BKA-XXXXXXXXXXXX");
string accesstoken = "XXXXXXXXXXXXXXXXXXXXXXXXXXX_v2"; // accesstoken do recebedor
var result = await WC.BankAccount.List(accesstoken, "MPA-XXXXXXXXXXXX");
string accesstoken = "XXXXXXXXXXXXXXXXXXXXXXXXXXX_v2"; // accesstoken do recebedor
var result = await WC.BankAccount.Delete(accesstoken, "BKA-XXXXXXXXXXXX");
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");
var result = await WC.Balance.Consult();
var result = await WC.Launch.Consult("ENT-XXXXXXXXXXXX");
var result = await WC.Launch.List();
string filtros = "filters=status::in(SETTLED)";
var result = await WC.Launch.ListFilter(filtros);
var result = await WC.Extract.List("2019-01-15", "2019-01-01");
var result = await WC.Extract.Detail("1", "2018-10-04");
var result = await WC.Extract.ListFuture("2018-01-01", "2018-01-15");
var result = await WC.Extract.DetailFuture("1", "2018-12-18");
Tipo do extrato, disponível na tabela de tipos de lançamentos
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);
string accessToken = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx_v2";
var result = await WC.Transfer.Revert("TRA-XXXXXXXXXXXX", accessToken);
string accessToken = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx_v2";
var result = await WC.Transfer.Consult("TRA-XXXXXXXXXXXX", accessToken);
var result = await WC.Transfer.List();
string filtros = "filters=transferInstrument.method::in(MOIP_ACCOUNT)&limit=3&offset=0";
var result = await WC.Transfer.ListFilter(filtros);
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");
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");
var result = await WC.Refund.Consult("REF-XXXXXXXXXXXX");
var result = await WC.Refund.ListPayments("PAY-XXXXXXXXXXXX");
var result = await WC.Refund.ListOrders("ORD-XXXXXXXXXXXX");
var result = await WC.Conciliation.GetSalesFile("20180829"); // Data no formato YYYYMMDD
var result = await WC.Conciliation.GetFinancialFile("2018-08-29"); // Data no formato YYYY-MM-DD
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);
var result = await WC.Signature.ListPlans();
var result = await WC.Signature.ConsultPlan("plan101");
var result = await WC.Signature.EnablePlan("plan101");
var result = await WC.Signature.DisablePlan("plan101");
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");
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);
var result = await WC.Signature.ListSubscribers();
var result = await WC.Signature.ConsultSubscriber("cliente01");
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");
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");
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);
var result = await WC.Signature.ListAllSubscriptions();
var result = await WC.Signature.ConsultSubscriptionFilter("assinatura01");
var filter = "q=assinatura01&filters=status::eq(ACTIVE)";
var result = await WC.Signature.ConsultSubscription(filter);
Alguns exemplos de como filtrar:
- Pesquisar e Filtrar assinaturas (
q=teste&filters=status::eq(EXPIRED)
) - Filtrar assinaturas por status (
filters=status::eq(EXPIRED)&limit=10&offset=0
) - Filtrar assinaturas por creation_date (
filters=creation_date::bt(2014-11-08,2015-05-07)&limit=100&offset=0
) - Filtrar assinaturas por next_invoice_date (
filters=next_invoice_date::bt(2015-10-12,2015-10-12)&limit=100&offset=0
) - Filtrar assinaturas por plano (
filters=plan.code::eq(TESTE_WIRECARD)&limit=100&offset=0
) - Filtrar assinaturas por customer.code (
filters=customer.code::eq(HHDGOo)&limit=100&offset=0
) - Filtrar assinaturas por customer.email (
filters=customer.email::eq(joao.silva@email.com.br)&limit=100&offset=0
) - Filtrar assinaturas por customer.cpf (
filters=customer.cpf::eq(22222222222)&limit=100&offset=0
) - Filtrar assinaturas por valor (
filters=amount::bt(100,100000)
) - Pesquisar Assinatura (
q=diego nunes&limit=10&offset=0
)
var result = await WC.Signature.SuspendSubscription("assinatura01");
var result = await WC.Signature.ReactivateSignature("assinatura01");
var result = await WC.Signature.CancelSignature("assinatura01");
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");
var body = new SubscriptionRequest
{
Payment_Method = "BOLETO"
};
var result = await WC.Signature.ChangePaymentMethod(body, "assinatura01");
var result = await WC.Signature.ListSignatureInvoices("assinatura01");
var result = await WC.Signature.ConsultInvoice("10865746");
var result = await WC.Signature.ListAllInvoicePayments("10865746");
var result = await WC.Signature.ConsultSubscriptionPayment("PAY-123456789012");
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);
var body = new CouponRequest
{
Coupon = new Coupon
{
Code = "coupon-0001"
}
};
var result = await WC.Signature.AssociateCouponForExistingSignature(body, "assinatura01");
var body = new CouponRequest
{
//informar os campos
};
var result = await WC.Signature.AssociateCouponForExistingSignature(body, "true");
var result = await WC.Signature.ConsultCoupon("coupon-0001");
var result = await WC.Signature.ListAllCoupons();
var result = await WC.Signature.EnableOrDisableCoupon("coupon-0001", "inactive");
var result = await WC.Signature.DeleteSignatureCoupon("assinatura01");
var result = await WC.Signature.RetentiveInvoicePayment("1548222");
var body = new RetentativeRequest
{
Year = 2020,
Month = 08,
Day = 01
};
var result = await WC.Signature.CreateNewInvoiceBoleto(body,"1548222");
var body = new RetentativeRequest
{
First_Try = 1,
Second_Try = 3,
Third_Try = 5,
Finally = "cancel"
};
var result = await WC.Signature.CreateAutomaticRetentionRules(body);
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);
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"
}
}
}
}
}
WC.ChangeAccessToken("new access token here");
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 |
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)
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();
}
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 |
Tem dúvidas? Fale com a gente no Slack! Algum problema ? Abre issues!