ParceleMais 1.0.0
dotnet add package ParceleMais --version 1.0.0
NuGet\Install-Package ParceleMais -Version 1.0.0
<PackageReference Include="ParceleMais" Version="1.0.0" />
<PackageVersion Include="ParceleMais" Version="1.0.0" />
<PackageReference Include="ParceleMais" />
paket add ParceleMais --version 1.0.0
#r "nuget: ParceleMais, 1.0.0"
#:package ParceleMais@1.0.0
#addin nuget:?package=ParceleMais&version=1.0.0
#tool nuget:?package=ParceleMais&version=1.0.0
<p align="center"> <img src="https://raw.githubusercontent.com/Twila-Digital/twila-parcelemais-dotnet-sdk/production/assets/logo-light.svg" alt="Parcele+" width="180" style="max-width: 100%;"> </p>
<p align="center"> <a href="LICENSE"><img alt="License" src="https://img.shields.io/github/license/Twila-Digital/twila-parcelemais-dotnet-sdk"></a> <a href="https://github.com/Twila-Digital/twila-parcelemais-dotnet-sdk/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/Twila-Digital/twila-parcelemais-dotnet-sdk/actions/workflows/ci.yml/badge.svg"></a> <a href="https://github.com/Twila-Digital/twila-parcelemais-dotnet-sdk/actions/workflows/quality.yml"><img alt="Quality" src="https://github.com/Twila-Digital/twila-parcelemais-dotnet-sdk/actions/workflows/quality.yml/badge.svg"></a> <a href="https://github.com/Twila-Digital/twila-parcelemais-dotnet-sdk/security/code-scanning"><img alt="Security" src="https://github.com/Twila-Digital/twila-parcelemais-dotnet-sdk/actions/workflows/security.yml/badge.svg"></a> <a href="https://codecov.io/gh/Twila-Digital/twila-parcelemais-dotnet-sdk"><img alt="Coverage" src="https://codecov.io/gh/Twila-Digital/twila-parcelemais-dotnet-sdk/branch/production/graph/badge.svg"></a> <img alt="Target Frameworks" src="https://img.shields.io/badge/.NET-netstandard2.0%20%7C%20net8.0-512BD4"> </p>
ParceleMais
SDK .NET oficial para a API do Parcele+ — crédito direto ao consumidor (CDC) e parcelamento no momento da compra.
Uso restrito a server-side. O
ClientSecretnunca deve ser embarcado em um app mobile, SPA ou qualquer código que rode no dispositivo do usuário final.
Compatibilidade
Publica dois target frameworks: netstandard2.0 e net8.0 (build nativo).
| Runtime | Versões aceitas |
|---|---|
| .NET / .NET Core | 2.0 até a versão mais recente (5, 6, 7, 8, 9, 10) |
| .NET Framework | 4.6.2 ou superior |
| Xamarin / Mono / UWP | Qualquer versão compatível com .NET Standard 2.0 |
.NET Core 1.0/1.1 não são suportados — só implementam .NET Standard 1.6.
Instalação
dotnet add package ParceleMais
O pacote ainda não foi publicado no NuGet.org — veja CONTRIBUTING.md para instalar a partir do código-fonte enquanto isso.
Quick start
using ParceleMais.Configuration;
using ParceleMais.DependencyInjection;
services.AddParceleMais(options =>
{
options.ClientId = "<client-id>";
options.ClientSecret = "<client-secret>";
options.Environment = ParceleMaisEnvironment.Staging;
});
AddParceleMais registra o IHttpClientFactory, autenticação (obtenção e renovação de token), política de retry/circuit breaker (Polly.Core) e o IParceleMaisClient singleton.
Simulando parcelas
var client = provider.GetRequiredService<IParceleMaisClient>();
var parcelas = await client.Simulations.SimulateInstallmentsAsync(
new SimulateInstallmentsRequest(valor: 1500.00m));
foreach (var parcela in parcelas)
Console.WriteLine($"{parcela.Term}x de {parcela.InstallmentAmount:C} (total {parcela.TotalAmount:C})");
Resposta (uma das parcelas simuladas):
InstallmentSimulation
{
Term = 12,
InstallmentAmount = 145.32m,
TotalAmount = 1743.84m
}
Criando um pedido
var pedidoId = await client.Orders.CreateAsync(new CreateOrderRequest(
Cpf: "12345678901",
PhoneNumber: "+5511999998888",
EstablishmentDocument: "12345678000195",
RequestedAmount: 1500.00m,
Name: "Maria Souza",
Email: "maria.souza@exemplo.com.br",
DateOfBirth: new DateTimeOffset(1990, 5, 20, 0, 0, 0, TimeSpan.FromHours(-3)),
Address: new Address(
Street: "Av. Paulista",
Number: "1578",
Neighborhood: "Bela Vista",
City: "São Paulo",
State: "SP",
PostalCode: "01311000")));
CreateAsync retorna só o Guid do pedido (pedidoId) — a API não devolve o pedido completo na criação; use client.Orders.GetAsync(pedidoId) se precisar dos dados completos logo em seguida.
Clientes por recurso
| Cliente | Métodos |
|---|---|
client.Orders |
CreateAsync, GetAsync, ListAsync, StartCdcSaleAsync, ImportInvoiceAsync |
client.Simulations |
SimulateInstallmentsAsync, SimulateValuesAsync |
client.Customers |
GetAsync, ListAsync |
client.Webhooks |
CreateAsync, ListAsync, UpdateAsync, DeleteAsync |
Paginação
Orders.ListAsync e Customers.ListAsync retornam PagedResult<T> — sem auto-paginação; você controla explicitamente o avanço de página:
var page = await client.Orders.ListAsync(new ListOrdersRequest(Page: 1, PageSize: 20));
foreach (var order in page.Items)
Console.WriteLine(order.Id);
if (page.HasNext)
{
var next = await client.Orders.ListAsync(new ListOrdersRequest(Page: 2, PageSize: 20));
}
Tratamento de erros
| Exceção | Quando |
|---|---|
ParceleMaisConfigurationException |
ParceleMaisOptions inválidas (ex: ClientId/ClientSecret ausentes) |
ParceleMaisAuthenticationException |
Falha ao gerar/renovar o token de acesso |
ParceleMaisValidationException |
400/422 — erro de validação, com Errors por campo |
ParceleMaisRateLimitException |
429 |
ParceleMaisTimeoutException |
Timeout de rede ou do circuit breaker |
ParceleMaisApiException |
Qualquer outro erro de API (404, 409, 5xx) |
ParceleMaisWebhookSignatureException |
Assinatura de webhook inválida ou expirada |
catch (ParceleMaisApiException ex)
{
Console.WriteLine($"{ex.StatusCode} {ex.ErrorCode}: {ex.Message}");
}
Validando webhooks
using ParceleMais.Webhooks;
var evento = ParceleMaisWebhookEvent.Parse(rawJson, signatureHeader, signingSecret);
Verifica a assinatura HMAC-SHA256 do cabeçalho e a janela de replay (5 minutos) antes de expor o evento. Lança ParceleMaisWebhookSignatureException se a assinatura for inválida ou o evento estiver fora da janela.
Samples
samples/ParceleMais.Sample.Console— .NET 8, DI standalonesamples/ParceleMais.Sample.AspNetCore— .NET 8, minimal APIsamples/ParceleMais.Sample.NetFramework— net472,ServiceCollectionstandalone
Qualidade, segurança e cobertura
- Build (
ci.yml) — compila os dois TFMs emubuntu-latestewindows-latest. - Test (
ci.yml) — testes unitários emnet8.0(ambos os OS) enet472(windows-latest, único onde .NET Framework roda de verdade). - Quality (
quality.yml) — análise estática via Codacy CLI, resultados publicados na aba Security → Code scanning do repositório. - Security (
security.yml) — CodeQL para C#, rodando a cada PR/push e semanalmente. - Coverage — cobertura de testes coletada via
coverlet.collectore publicada no Codecov.
Documentação completa
documentacao.parcelemais.com.br — referência de todos os endpoints, autenticação, webhooks e mais.
Contribuindo
Veja CONTRIBUTING.md.
Código de conduta
Este projeto segue o Código de Conduta.
Licença
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Microsoft.Bcl.AsyncInterfaces (>= 9.0.0)
- Microsoft.Extensions.DependencyInjection (>= 9.0.0)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 9.0.0)
- Microsoft.Extensions.Http (>= 9.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 9.0.0)
- Microsoft.Extensions.Options (>= 9.0.0)
- Microsoft.Extensions.Options.DataAnnotations (>= 9.0.0)
- Polly.Core (>= 8.5.0)
- System.Net.Http.Json (>= 9.0.0)
- System.Text.Json (>= 9.0.0)
-
net8.0
- Microsoft.Extensions.DependencyInjection (>= 9.0.0)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 9.0.0)
- Microsoft.Extensions.Http (>= 9.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 9.0.0)
- Microsoft.Extensions.Options (>= 9.0.0)
- Microsoft.Extensions.Options.DataAnnotations (>= 9.0.0)
- Polly.Core (>= 8.5.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.0 | 89 | 9/12/2026 |