Criando uma assinatura

A API MundiPagg oferece uma funcionalidade prática para o gerenciamento de cobranças recorrentes: as Assinaturas(Subscription). Ela possibilita que você cobre os seus clientes com intervalos pré determinados, sem que seja necessário criar essa regra de negócio do seu lado. Nesse tutorial iremos descrever passo a passo como realizar a criação de uma assinatura avulsa e como criar uma assinatura a partir de um plano previamente cadastrado.

Nesse tutorial iremos utilizar a SDK C# da Mundipagg disponível no gerenciador de pacotes NuGet com o nome de MundiAPI.PCL.

Criando uma assinatura avulsa

Primeiro você deve importar o pacote MundiAPI.PCL para a nossa aplicação de teste e depois adicionar nossas credenciais instanciando a classe MundiAPIClient.

using MundiAPI.PCL;


namespace TutorialAssinatura {
    class Program {
        static void Main(string[] args) {

            string basicAuthUserName = "sk_test_4AdjlqpseatnmgbW";
            // Senha em branco. Passando apenas a secret key
            string basicAuthPassword = "";

            var client = new MundiAPIClient(basicAuthUserName, basicAuthPassword);
        }
    }
}

Em seguida, criará o objeto Customer, objeto esse que contém os dados do usuário final que está contratando a assinatura. Apenas o campo Name é obrigatório porém recomendamos que envie também o campo Email. Enviando esse campo, conseguiremos identificar se o cliente já esta na sua carteira de cliente, evitando assim qualquer duplicidade.

using MundiAPI.PCL;
using MundiAPI.PCL.Models;

namespace TutorialAssinatura {
    class Program {
        static void Main(string[] args) {

            string basicAuthUserName = "sk_test_4AdjlqpseatnmgbW";
            // Senha em branco. Passando apenas a secret key
            string basicAuthPassword = "";

            var client = new MundiAPIClient(basicAuthUserName, basicAuthPassword);

            var customer = new CreateCustomerRequest() {
                Name = "Gustavo Fonseca",
                Email = "[email protected]"
            };
        }
    }
}

Caso já tenha cadastrado o Customer previamente, você pode informar o CustomerId na criação do CreateSubscriptionRequest.

var createSubscriptionRequest = new CreateSubscriptionRequest() {
                CustomerId = "Id do Customer"
            };

O próximo passo é cadastrar os Itens que irão compor a Assinatura.

Para criação de um item você utilizará o CreateSubscriptionItemRequest. Os campos obrigatórios são:

  • Description : descrição ou nome do item
  • Quantity : quantidade do item
  • Pricing Scheme : template de precificação do item

Logo depois adicionará a uma lista de CreateSubscriptionItemRequest.

using MundiAPI.PCL;
using MundiAPI.PCL.Models;
using System.Collections.Generic;

namespace TutorialAssinatura {
    class Program {
        static void Main(string[] args) {

            string basicAuthUserName = "sk_test_4AdjlqpseatnmgbW";
            // Senha em branco. Passando apenas a secret key
            string basicAuthPassword = "";

            var client = new MundiAPIClient(basicAuthUserName, basicAuthPassword);

            var customer = new CreateCustomerRequest() {
                Name = "Gustavo Fonseca",
                Email = "[email protected]"
            };

            var items = new List<CreateSubscriptionItemRequest> {
                new CreateSubscriptionItemRequest {
                Description = "Musculação",
                Quantity = 1,
                PricingScheme = new CreatePricingSchemeRequest {
                Price = 18990
                    }
                }
            };
        }
    }
}

Intervalos

Durante a requisição de criação de uma assinatura pode-se definir algumas informações de intervalo das cobranças utilizando as propriedades:

  • Interval : possíveis valores - week, month ou year
  • IntervalCount : recebendo um numero inteiro

Assim pode-se criar intervalos de cobrança como :

  • Interval : month
  • IntervalCount : 3

Criando uma assinatura que sera cobrada a cada 3 meses.

Formas de pagamento

É possível escolher entre dois meios de pagamentos disponíveis para assinaturas :

  • Boleto
  • Cartão de crédito

Utilizando boleto

Você iniciará o processo de requisição de criação de uma assinatura instanciando um objeto chamado CreateSubscriptionRequest. Logo depois informará o meio de pagamento boleto na propriedade PaymentMethod.

Em seguida utilizará nossa classe Client para fazer a requisição de criação da Subscription.

using MundiAPI.PCL;
using MundiAPI.PCL.Models;
using System.Collections.Generic;

namespace TutorialAssinatura {
    class Program {
        static void Main(string[] args) {

            string basicAuthUserName = "sk_test_39joaPCZQFyxA8zx";
            // Senha em branco. Passando apenas a secret key
            string basicAuthPassword = "";

            var client = new MundiAPIClient(basicAuthUserName, basicAuthPassword);

            var customer = new CreateCustomerRequest() {
                Name = "Gustavo Fonseca",
                Email = "[email protected]"
            };

            var items = new List<CreateSubscriptionItemRequest> {
                new CreateSubscriptionItemRequest {
                Description = "Musculação",
                Quantity = 1,
                PricingScheme = new CreatePricingSchemeRequest {
                Price = 18990
                    }
                }
            };
           var subscrition = new CreateSubscriptionRequest(){
                PaymentMethod = "boleto",
                Interval = "month",
                IntervalCount = 3,
                Customer = customer,
                Items = items
            };

            var response = client.Subscriptions.CreateSubscription(subscription);
        }
    }
}

Utilizando cartão de crédito

Para criação de uma assinatura com o meio de pagamento cartão de crédito, você precisará de algumas informações adicionais além das solicitadas para criação com meio de pagamento boleto. É necessário o envio do objeto do objeto Card e do objeto BillingAddress para compor a requisição da Subscription.

using MundiAPI.PCL;
using MundiAPI.PCL.Models;
using System.Collections.Generic;

namespace TutorialAssinatura {
    class Program {
        static void Main(string[] args) {

            string basicAuthUserName = "sk_test_39joaPCZQFyxA8zx";
            // Senha em branco. Passando apenas a secret key
            string basicAuthPassword = "";

            var client = new MundiAPIClient(basicAuthUserName, basicAuthPassword);

            var customer = new CreateCustomerRequest() {
                Name = "Gustavo Fonseca",
                Email = "[email protected]"
            };

            var items = new List<CreateSubscriptionItemRequest> {
                new CreateSubscriptionItemRequest {
                Description = "Musculação",
                Quantity = 1,
                PricingScheme = new CreatePricingSchemeRequest {
                Price = 18990
                    }
                }
            };
            
            var card = new CreateCardRequest() {
                HolderName = "Tony Stark",
                Number = "5425019448107793",
                HolderDocument = "93095135270",
                ExpMonth = 1,
                ExpYear = 20,
                Cvv = "433",
                Brand = "Mastercard",
                BillingAddress = new CreateAddressRequest(){
                    Line1 = "375, Av. General Justo, Centro",
                    Line2 = "7º andar, sala 01",
                    City = "Rio de Janeiro",
                    Country = "BR",
                    State = "RJ",
                    ZipCode = "22000111",
                }
            };

            var subscription = new CreateSubscriptionRequest(){
                PaymentMethod = "credit_card",
                Card = card,
                Interval = "month",
                IntervalCount = 1,
                Customer = customer,
                Items = items
            };

            var response = client.Subscriptions.CreateSubscription(subscription);
        }
    }
}

Caso já tenha cadastrado o cartão do cliente previamente, você pode informar o CardId na requisição

using MundiAPI.PCL;
using MundiAPI.PCL.Models;
using System.Collections.Generic;

namespace TutorialAssinatura {
    class Program {
        static void Main(string[] args) {

            string basicAuthUserName = "sk_test_39joaPCZQFyxA8zx";
            // Senha em branco. Passando apenas a secret key
            string basicAuthPassword = "";

            var client = new MundiAPIClient(basicAuthUserName, basicAuthPassword);

            var customer = new CreateCustomerRequest() {
                Name = "Gustavo Fonseca",
                Email = "[email protected]"
            };

            var items = new List<CreateSubscriptionItemRequest> {
                new CreateSubscriptionItemRequest {
                Description = "Musculação",
                Quantity = 1,
                PricingScheme = new CreatePricingSchemeRequest {
                Price = 18990
                    }
                }
            };

           
            var subscription = new CreateSubscriptionRequest(){
                PaymentMethod = "credit_card",
                CardId = "Card id previamente cadastrado",
                Interval = "month",
                IntervalCount = 1,
                Customer = customer,
                Items = items
            };

            var response = client.Subscriptions.CreateSubscription(subscription);
        }
    }
}

Criando uma assinatura a partir de um plano

Além da criação de uma assinatura avulsa apresentada anteriormente é possível criar uma assinatura a partir de um [Plano](colocar link:https://docs.mundipagg.com/v1/reference#planos). O Plano é um template pré-definido de assinatura, facilitando a organização e criação de diferentes tipos de assinaturas. O Plano possui todas as propriedades informadas na criação da assinatura avulsa.

É preciso realizar a criação de um plano utilizando o CreatePlanRequest informando o nome do plano e os itens, com suas respectivas informações, seguindo o mesmo modelo da assinatura avulsa. A única diferença nesse caso é que irá utilizar o CreatePlanItemRequest.

Na criação do Plano, você pode definir qual meio de pagamento será aceito utilizando a propriedade PaymentMethods. Importante atentar que nas assinaturas ou planos só são aceitos os meios de pagamento cartão de crédito e boleto.

using MundiAPI.PCL;
using MundiAPI.PCL.Models;
using System.Collections.Generic;

namespace TutorialAssinatura {
    class Program {
        static void Main(string[] args) {

            string basicAuthUserName = "sk_test_39joaPCZQFyxA8zx";
            // Senha em branco. Passando apenas a secret key
            string basicAuthPassword = "";

            var client = new MundiAPIClient(basicAuthUserName, basicAuthPassword);

            var customer = new CreateCustomerRequest() {
                Name = "Gustavo Fonseca",
                Email = "[email protected]"
            };

            var request = new CreatePlanRequest {
                Name = "Plano Gold",
                PaymentMethods = new List<string>() { "credit_card","boleto"},
                Items = new List<CreatePlanItemRequest> {
                    new CreatePlanItemRequest {
                        Name = "Musculação",
                        Quantity = 1,
                        PricingScheme = new CreatePricingSchemeRequest {
                        Price = 18990
                        }
                    }
                }
            };

            var response = client.Plans.CreatePlan(request);

        }
    }
}

Após a criação do Plano recebemos o PlanId, o identificador daquele plano. Utilizaremos esse PlanId para criação da assinatura.

using MundiAPI.PCL;
using MundiAPI.PCL.Models;
using System.Collections.Generic;

namespace TutorialAssinatura {
    class Program {
        static void Main(string[] args) {

            string basicAuthUserName = "sk_test_39joaPCZQFyxA8zx";
            // Senha em branco. Passando apenas a secret key
            string basicAuthPassword = "";

            var client = new MundiAPIClient(basicAuthUserName, basicAuthPassword);

            var customer = new CreateCustomerRequest() {
                Name = "Gustavo Fonseca",
                Email = "[email protected]"
            };

            var request = new CreatePlanRequest {
                Name = "Plano Gold",
                PaymentMethods = new List<string>() { "credit_card","boleto"},
                Items = new List<CreatePlanItemRequest> {
                    new CreatePlanItemRequest {
                        Name = "Musculação",
                        Quantity = 1,
                        PricingScheme = new CreatePricingSchemeRequest {
                        Price = 18990
                        }
                    }
                }
            };

            var plan = client.Plans.CreatePlan(request);

            var subscriptionRequest = new CreateSubscriptionRequest() {
                PlanId = plan.Id,
                PaymentMethod = "boleto",
                Interval = "month",
                IntervalCount = 1,
                Customer = customer,  
            };

            var subscritionRequest = client.Subscriptions.CreateSubscription(subscrition);
        }
    }
}

📘

Para mais informações acesse a nossa API Reference.