You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Add Pagarme integration for "Codando com IA" course
- Implemented payment flow via Pagarme for the live course "Codando com IA" without granting access or sending emails.
- Created a new migration to ensure the plan exists in the database.
- Added a new request class for validating checkout link creation.
- Updated PagarmeController to handle the new checkout link and order status.
- Enhanced webhook handling to create users and subscriptions based on order events.
- Added tests for the webhook lifecycle to ensure proper functionality.
This update lays the groundwork for managing course payments and user subscriptions effectively.
Implementar e ajustar o fluxo de pagamento via Pagarme (Core v5 Orders + Checkout) para o curso ao vivo “Codando com IA”, sem liberar área de acesso ou enviar e-mails por enquanto, garantindo associação/criação de usuário e notificações no Discord.
4
+
5
+
## Requisitos Confirmados
6
+
7
+
-**Preço:** R$ 588,00 (58800 centavos), parcelamento em até 12x sem juros.
8
+
-**Métodos de pagamento:** cartão de crédito, boleto e pix.
9
+
-**Acesso/e-mails:** nenhum acesso adicional nem e-mails de confirmação neste momento.
10
+
-**Usuário:** reutilizar usuário existente pelo e-mail ou criar um novo se não existir.
11
+
-**Webhooks:** reutilizar o fluxo já existente, com tratamento específico para o produto do curso.
12
+
-**URLs e metadados:**`success_url` = `/curso-ao-vivo/codando-com-ia/sucesso`; `product_slug` = `curso-ao-vivo-codando-com-ia-v1`.
13
+
14
+
## Estado Atual
15
+
16
+
-**POST `/api/pagarme/codando-com-ia/checkout`** já cria a Order + Checkout, retornando `payment_url`.
17
+
-**GET `/api/pagarme/codando-com-ia/orders/{orderId}`** consulta a Order no Core v5, validando `product_slug`.
18
+
-**POST `/api/pagarme/notification`** processa webhooks; atualmente o fluxo é focado em Subscription e apenas registra quando não encontra subscription para este produto.
19
+
20
+
## Plano de Implementação
21
+
22
+
### 1. Plano (`codando-com-ia-v1`)
23
+
24
+
- Garantir via seed/migração idempotente a existência do plano com:
- Sanitizar telefone (já implementado) e aceitar ausência sem falhar.
34
+
- Localizar usuário pelo e-mail; se não existir, criar com nome, e-mail, telefone (se válido) e senha aleatória hasheada; atualizar dados faltantes quando reaproveitar usuários.
35
+
- Incluir `customer.metadata.user_id` no payload enviado ao Pagarme.
36
+
- Manter preço, métodos aceitos, parcelas sem juros, `success_url` e metadados existentes.
37
+
- Após sucesso na criação da Order:
38
+
- Criar `Subscription` vinculada ao plano `codando-com-ia-v1` com `status = pending`, `acquisition_type = purchase`, `provider_id = order.id`, `price_paid_in_cents = order.amount` e `payment_method = null` (até atualização via webhook).
39
+
- Retornar `checkoutLink`, `pagarmeOrderID`, `amount`, `status` (sem autenticar/logar o usuário nem disparar e-mails).
40
+
41
+
### 3. Status (`GET /api/pagarme/codando-com-ia/orders/{orderId}`)
42
+
43
+
- Manter lógica atual de validação do `product_slug` e retorno filtrado dos dados da Order.
- Para eventos `order.*` onde `metadata.product_slug === curso-ao-vivo-codando-com-ia-v1` ou Subscription vinculada ao plano `codando-com-ia-v1`:
48
+
-`findOrCreate` do `User` (atualizando nome/telefone ausentes).
49
+
- Localizar ou criar a `Subscription` pendente vinculada ao plano.
50
+
- Atualizar `status` e campos `payment_method`, `boleto_url`, `boleto_barcode` / `qr_code` diretamente (não usar `changeStatus` para evitar `upgradeUserToPro`).
51
+
- Enviar mensagem ao Discord no canal `notificacoes-compras` com resumo do evento (comprador, método, valor, `orderId`, status e contexto).
52
+
- Não liberar acesso, não enviar e-mails.
53
+
- Garantir idempotência atualizando apenas dados necessários.
54
+
55
+
### 5. Segurança e Resiliência
56
+
57
+
- Manter uso de Basic Auth para chamadas à API Pagarme.
58
+
- Tolerar telefones inválidos/vazios sem lançar exceções.
59
+
- Preservar e detalhar logs de erro no checkout.
60
+
61
+
### 6. Testes Automatizados
62
+
63
+
-**Checkout:** garantir criação/associação do usuário e subscription pendente, além do retorno do `payment_url`.
64
+
-**Status:** confirmar 200 quando o `product_slug` bate e 404 caso contrário.
65
+
-**Webhooks:** simular `order.created`, `order.closed`, `order.paid`, `order.canceled/failed` para validar atualizações da subscription, criação/atualização de usuário e envio de notificações ao Discord (mockado), assegurando que não há promoção a PRO.
66
+
67
+
### 7. Pós-Implementação
68
+
69
+
- Rodar migration/seed para criar o plano.
70
+
- Executar `php artisan test` para validar o backend.
71
+
- Certificar que o webhook do Pagarme aponta para `/api/pagarme/notification` e que `PAGARME_API_KEY` correta está configurada no `.env` de cada ambiente.
0 commit comments