API de Pagamentos e Assinaturas
A API de Pagamentos e Assinaturas do FitLocus fornece endpoints para gerenciamento de planos, assinaturas e transações financeiras na plataforma.Visão Geral
A API de Pagamentos e Assinaturas permite:
- Gerenciamento de planos de assinatura
- Processamento de pagamentos via cartão de crédito (Stripe) e PIX (AbacatePay)
- Consulta de histórico de transações
- Gerenciamento de assinaturas ativas
- Emissão de faturas e recibos
Métodos de Pagamento Suportados
Cartão de Crédito
Processamento de pagamentos com cartão de crédito via Stripe.
PIX
Pagamentos instantâneos via PIX utilizando AbacatePay.
Modelo de Dados
SubscriptionPlanDTO
O objeto SubscriptionPlanDTO representa um plano de assinatura disponível na plataforma:SubscriptionDTO
Objeto que representa uma assinatura de um usuário:PaymentDTO
Objeto que representa uma transação de pagamento:InvoiceDTO
Objeto que representa uma fatura:Endpoints Principais
| Método | Endpoint | Descrição |
|---|---|---|
| GET | /subscription-plans | Lista planos de assinatura disponíveis |
| GET | /subscription-plans/{id} | Obtém detalhes de um plano específico |
| GET | /subscriptions/my-subscription | Obtém a assinatura atual do usuário |
| POST | /subscriptions | Cria uma nova assinatura |
| PUT | /subscriptions/{id} | Atualiza uma assinatura existente |
| POST | /subscriptions/{id}/cancel | Cancela uma assinatura |
| GET | /payments | Lista pagamentos do usuário |
| GET | /payments/{id} | Obtém detalhes de um pagamento específico |
| GET | /invoices | Lista faturas do usuário |
| GET | /invoices/{id} | Obtém detalhes de uma fatura específica |
| GET | /invoices/{id}/download | Baixa uma fatura em formato PDF |
Detalhes de Implementação
Autenticação
Todos os endpoints requerem autenticação via token JWT no cabeçalhoAuthorization:
Controle de Acesso
O acesso aos endpoints é controlado com base no tipo de usuário e propriedade do recurso:- Usuários só podem acessar suas próprias assinaturas, pagamentos e faturas
- Administradores podem acessar todos os recursos
Listar Planos de Assinatura
Endpoint
Parâmetros de Consulta
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| userType | string | Não | Filtrar por tipo de usuário (ALUNO, PERSONAL) |
| active | boolean | Não | Filtrar por status de ativação |
| interval | string | Não | Filtrar por intervalo (MONTHLY, QUARTERLY, SEMIANNUAL, ANNUAL) |
Cabeçalhos da Requisição
| Cabeçalho | Valor | Descrição |
|---|---|---|
| Authorization | Bearer | Token JWT do usuário |
Exemplo de Requisição
Resposta de Sucesso
Código: 200 OKRespostas de Erro
Código: 401 UnauthorizedObter Detalhes de um Plano
Endpoint
Parâmetros de URL
| Parâmetro | Tipo | Descrição |
|---|---|---|
| id | number | ID do plano de assinatura |
Cabeçalhos da Requisição
| Cabeçalho | Valor | Descrição |
|---|---|---|
| Authorization | Bearer | Token JWT do usuário |
Exemplo de Requisição
Resposta de Sucesso
Código: 200 OKRespostas de Erro
Código: 401 UnauthorizedObter Assinatura Atual
Endpoint
Cabeçalhos da Requisição
| Cabeçalho | Valor | Descrição |
|---|---|---|
| Authorization | Bearer | Token JWT do usuário |
Exemplo de Requisição
Resposta de Sucesso
Código: 200 OKRespostas de Erro
Código: 401 UnauthorizedCriar Nova Assinatura
Endpoint
Cabeçalhos da Requisição
| Cabeçalho | Valor | Descrição |
|---|---|---|
| Authorization | Bearer | Token JWT do usuário |
| Content-Type | application/json | Tipo de conteúdo da requisição |
Parâmetros da Requisição
O corpo da requisição deve conter um objeto JSON com os seguintes campos:| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| planId | number | Sim | ID do plano de assinatura |
| paymentMethod | string | Sim | Método de pagamento (CREDIT_CARD, PIX, BOLETO) |
| cardNumber | string | Condicional | Número do cartão (obrigatório se paymentMethod for CREDIT_CARD) |
| cardHolderName | string | Condicional | Nome do titular do cartão |
| cardExpirationMonth | string | Condicional | Mês de expiração do cartão (MM) |
| cardExpirationYear | string | Condicional | Ano de expiração do cartão (YYYY) |
| cardCvv | string | Condicional | Código de segurança do cartão |
Exemplo de Requisição
Resposta de Sucesso
Código: 201 CreatedRespostas de Erro
Código: 400 Bad RequestCancelar Assinatura
Endpoint
Parâmetros de URL
| Parâmetro | Tipo | Descrição |
|---|---|---|
| id | number | ID da assinatura |
Cabeçalhos da Requisição
| Cabeçalho | Valor | Descrição |
|---|---|---|
| Authorization | Bearer | Token JWT do usuário |
| Content-Type | application/json | Tipo de conteúdo da requisição |
Parâmetros da Requisição
O corpo da requisição deve conter um objeto JSON com os seguintes campos:| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| cancelImmediately | boolean | Não | Se true, cancela imediatamente; se false, cancela na próxima renovação (default: false) |
| reason | string | Não | Motivo do cancelamento |
Exemplo de Requisição
Resposta de Sucesso
Código: 200 OKRespostas de Erro
Código: 401 UnauthorizedListar Pagamentos
Endpoint
Parâmetros de Consulta
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| status | string | Não | Filtrar por status (PENDING, COMPLETED, FAILED, REFUNDED) |
| startDate | string | Não | Data inicial (formato: YYYY-MM-DD) |
| endDate | string | Não | Data final (formato: YYYY-MM-DD) |
| page | number | Não | Número da página (default: 0) |
| size | number | Não | Tamanho da página (default: 20) |
| sort | string | Não | Campo e direção de ordenação (ex: createdAt,desc) |
Cabeçalhos da Requisição
| Cabeçalho | Valor | Descrição |
|---|---|---|
| Authorization | Bearer | Token JWT do usuário |
Exemplo de Requisição
Resposta de Sucesso
Código: 200 OKRespostas de Erro
Código: 401 UnauthorizedListar Faturas
Endpoint
Parâmetros de Consulta
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| status | string | Não | Filtrar por status (PENDING, PAID, OVERDUE, CANCELED) |
| startDate | string | Não | Data inicial (formato: YYYY-MM-DD) |
| endDate | string | Não | Data final (formato: YYYY-MM-DD) |
| page | number | Não | Número da página (default: 0) |
| size | number | Não | Tamanho da página (default: 20) |
| sort | string | Não | Campo e direção de ordenação (ex: dueDate,desc) |
Cabeçalhos da Requisição
| Cabeçalho | Valor | Descrição |
|---|---|---|
| Authorization | Bearer | Token JWT do usuário |
Exemplo de Requisição
Resposta de Sucesso
Código: 200 OKRespostas de Erro
Código: 401 UnauthorizedBaixar Fatura
Endpoint
Parâmetros de URL
| Parâmetro | Tipo | Descrição |
|---|---|---|
| id | number | ID da fatura |
Cabeçalhos da Requisição
| Cabeçalho | Valor | Descrição |
|---|---|---|
| Authorization | Bearer | Token JWT do usuário |
Exemplo de Requisição
Resposta de Sucesso
Código: 200 OKRespostas de Erro
Código: 401 UnauthorizedImplementação no Frontend
Componente de Seleção de Plano
Componente de Histórico de Pagamentos
Considerações de Design
A interface de pagamentos e assinaturas do FitLocus segue as diretrizes de design da plataforma:- Cores: Fundo escuro (#202020), elementos de destaque em verde (#B4ED00), texto em branco (#F9F9F9)
- Tipografia: Hanken Grotesk para texto e SUPERINE para títulos
- Layout: Design minimalista com espaçamento generoso e hierarquia clara
- Componentes: Campos de formulário com bordas arredondadas, botões com feedback visual ao interagir
Considerações de Segurança
- PCI Compliance: O sistema utiliza um gateway de pagamento compatível com PCI DSS para processar informações de cartão de crédito.
- Tokenização: Informações de cartão de crédito são tokenizadas e nunca armazenadas diretamente no banco de dados.
- HTTPS: Todas as comunicações com a API devem ser realizadas através de HTTPS para proteger dados sensíveis durante a transmissão.
- Validação de Dados: Todos os dados de entrada são validados tanto no frontend quanto no backend para prevenir injeção de dados maliciosos.
- Controle de Acesso: Verificações rigorosas garantem que um usuário só possa acessar e modificar seus próprios dados de pagamento e assinatura.
Regras de Negócio
- Período de Teste Gratuito: Novos usuários têm acesso a um período de teste gratuito de 7 dias.
- Renovação Automática: Assinaturas são renovadas automaticamente no final do período, a menos que sejam canceladas.
- Cancelamento: Usuários podem cancelar suas assinaturas a qualquer momento, com opção de cancelamento imediato ou no final do período atual.
- Reembolsos: Reembolsos são processados de acordo com a política de reembolso, geralmente dentro de 5 dias úteis.
- Limites por Plano: Cada plano tem limites específicos de recursos, como número máximo de alunos para personal trainers.