Plano de integração com o LMS Onion
TLDR: adicionar o Onion como mais uma plataforma de
PlatformService, seguindo exatamente o padrão já existente de CBTRG e Apolo.
Não houve spec formal para esta integração — o plano nasceu direto da especificação da API do Onion. O contrato resultante está em ../reference/payments/onion_integration.md.
Fases
1. Configuração da plataforma
config/initializers/platform_integrations.rb — adicionar à lista PLATFORM_TARGETS:
ruby
["Onion", "onion"]
2. Módulo de comunicação HTTP
Criar app/models/onion.rb:
```ruby module Onion def webhook_send_payload(params) HTTParty.post( “#{base_url}checkout_notifications”, body: params.to_json, headers: { “Content-Type” => “application/json”, “Authorization” => “Bearer #{api_key}” } ) end
def base_url Rails.application.credentials.dig(:onion, :api_url) end
def api_key Rails.application.credentials.dig(:onion, :api_key) end end ```
3. Service de integração
Criar app/services/onion_service.rb, incluindo o módulo Onion e seguindo o padrão de app/services/cbtrg_service.rb e apolo_service.rb:
| Método | Responsabilidade |
|---|---|
initialize(payment) |
Carrega payment, customer, checkout e organization |
create_or_update(execute_now) |
Lógica de decisão a partir do status do pagamento |
grant_user_access |
Libera o acesso quando o pagamento é confirmado |
remove_user_access |
Bloqueia o acesso em overdue/refunded |
create_webhook(params) |
Log do webhook enviado |
4. Roteamento no PlatformService
app/services/platform_service.rb — no método process:
```ruby process_onion if target_ead == :onion
def process_onion OnionService.new(@payment).create_or_update(@execute_now) end ```
5. Credenciais (passo manual)
Adicionar ao config/credentials.yml.enc:
yaml
onion:
api_url: "https://api.onion.com/"
api_key: "seu_token_aqui"
6. Testes
| Arquivo | Cobertura |
|---|---|
spec/models/onion_spec.rb |
Métodos do módulo Onion, com HTTParty mockado |
spec/services/onion_service_spec.rb |
Fluxo de create_or_update, grant_user_access e remove_user_access |
Ordem de implementação
config/initializers/platform_integrations.rb— adicionar a opçãoapp/models/onion.rb— módulo HTTPapp/services/onion_service.rb— service principalapp/services/platform_service.rb— roteamentospec/models/onion_spec.rb— testes do módulospec/services/onion_service_spec.rb— testes do service
Verificação
make lint— verificar estilo de códigomake t— rodar a suíte de testes completa- Criar um checkout com
integration: "onion"e percorrer o fluxo de pagamento ponta a ponta
Especificação da API Onion
- Autenticação: token via header (
Authorization: Bearer xxx) - Endpoint:
/checkout_notifications - Funcionalidade: LMS — liberar ou bloquear acesso a cursos conforme o status do pagamento
json
{
"status": "enabled",
"email": "aluno@email.com",
"name": "Nome do Aluno",
"doc_number": "12345678900",
"phone_number": "11999999999",
"token": "token_de_verificacao",
"transaction": "ref_pagamento_abc123",
"expires_at": "2026-12-31 23:59:59"
}
| Campo | Descrição |
|---|---|
status |
"enabled" libera o acesso, "disabled" bloqueia |
email |
Email do aluno |
name |
Nome completo do aluno |
doc_number |
CPF/CNPJ do aluno |
phone_number |
Telefone do aluno |
token |
Token de verificação |
transaction |
Referência única do pagamento no checkout |
expires_at |
Data de expiração do acesso |