Sistema de Pagamentos#
Visão Geral#
O sistema de pagamentos da aplicação UNICEF Portugal foi desenvolvido para suportar dois métodos de pagamento:
- EasyPay — Gateway de pagamento português (método principal)
- PayPal — Método alternativo para pagamentos internacionais
Sistema Inativo desde Maio de 2020
A análise à base de dados de pagamentos confirma que o último registo de encomenda data de 18 de maio de 2020 — há mais de 6 anos. O processamento de donativos foi entretanto migrado para fora do website Umbraco. No entanto, permanecem ativos no Umbraco:
- 4 páginas de donativo publicadas
- Formulários EasyPay e PayPal publicados
- Base de dados SQL "EasyPay" a correr (custo mensal estimado: ~15 EUR em produção + ~15 EUR em qualidade)
- Jobs Hangfire desativados (já não processam pagamentos)
Recomenda-se uma decisão formal sobre a desativação destes componentes.
Evidência de Inatividade#
Dados obtidos da base de dados EasyPay (bacpac do repositório):
| Tabela | Registos | Período de Atividade |
|---|---|---|
| Order | 8.676 | Agosto 2018 — Maio 2020 |
| EasyPayPayment | 6.453 | Mesmo período |
| EasyPayRecurrentPayment | 1.325 | Mesmo período |
| EasyPayPaymentRequest | 1.166 | Mesmo período |
| OrderHistory | 919 | Mesmo período |
Nota
Estes dados são do ficheiro .bacpac existente no repositório e podem não refletir o estado atual da base de dados de produção. Recomenda-se verificar diretamente na base de dados EasyPay de produção (uncsqlsrv-prd.database.windows.net) se existem registos mais recentes.
Arquitetura#
graph TB
subgraph Frontend
A["Pagina de Donativo - donationPage"]
end
subgraph Backend
B["PaymentsManager"]
C["DAL.Payments"]
end
subgraph Gateways
D["EasyPay - easypay.pt"]
E["PayPal - paypal.com"]
end
subgraph BD
F[("EasyPay - SQL Server separada")]
end
A --> B
B --> C
B --> D
B --> E
C --> F
style A fill:#ffcdd2,stroke:#c62828
style D fill:#ffcdd2,stroke:#c62828
style E fill:#ffcdd2,stroke:#c62828
style F fill:#ffcdd2,stroke:#c62828
Diagrama: Os componentes a vermelho estão potencialmente obsoletos.
Projetos no Código#
| Projeto | Descrição | Estado |
|---|---|---|
| PaymentsManager (PaymentsManager.csproj) | Lógica de processamento de pagamentos. Comunicação com EasyPay e PayPal | Inativo |
| DAL.Payments (DAL.Payments.csproj) | Camada de acesso a dados para pagamentos | Inativo |
| Business.PaymentGateway.Paypal | Integração com PayPal | Inativo |
| Test.Payment.EasyPay | Testes de pagamento EasyPay | Inativo |
| Test.Payments | Testes gerais de pagamentos | Inativo |
Base de Dados de Pagamentos#
Os dados de pagamentos estão armazenados numa base de dados SQL Server separada chamada "EasyPay", alojada no mesmo servidor Azure SQL (uncsqlsrv-prd).
Tabelas#
| Tabela | Registos | Descrição |
|---|---|---|
Order |
8.676 | Encomendas/donativos |
EasyPayPayment |
6.453 | Pagamentos confirmados via EasyPay |
EasyPayRecurrentPayment |
1.325 | Pagamentos recorrentes |
EasyPayPaymentRequest |
1.166 | Pedidos de pagamento enviados ao EasyPay |
OrderHistory |
919 | Histórico de encomendas |
EasyPayRecurrentPaymentRequest |
44 | Pedidos de pagamentos recorrentes |
EasyPayRecurringNotification |
2 | Notificações de pagamentos recorrentes |
EasyPayNotification |
2 | Notificações recebidas do EasyPay |
Stored Procedures#
| Procedimento | Descrição |
|---|---|
UpdateOrder |
Atualiza o estado de uma encomenda |
UpdatePayment |
Atualiza o estado de um pagamento |
UpdatePaymentProcessed |
Marca pagamento como processado |
UpdateRecurrentPayment |
Atualiza pagamento recorrente |
UpdateNumberOfDebits |
Atualiza contador de débitos |
UpdateEasyPayNotification |
Regista notificação recebida |
Jobs Hangfire (DESATIVADOS)#
O Hangfire era utilizado para processar pagamentos recorrentes, mas foi desativado devido a problemas de memória (commit a37e63e8). Dado que os pagamentos estão inativos desde 2020, a reativação do Hangfire não é necessária.
| Job | Frequência Original | Descrição |
|---|---|---|
ClearOldRecurringPayments() |
Diário à meia-noite | Limpeza de pagamentos recorrentes antigos |
ProcessDailyRecurringPayments("1M") |
Diário | Pagamentos recorrentes mensais |
ProcessDailyRecurringPayments("6M") |
Diário | Pagamentos recorrentes semestrais |
ProcessDailyRecurringPayments("1Y") |
Diário | Pagamentos recorrentes anuais |
Custos Associados#
| Recurso | Ambiente | SKU | Custo Estimado/Mês |
|---|---|---|---|
| Base de dados EasyPay | Produção | Standard S0 (10 DTU) | ~15 EUR |
| Base de dados EasyPay-qual | Qualidade | Standard S0 (10 DTU) | ~15 EUR |
| Total | ~30 EUR/mês |
Nota sobre Custos
Os valores são estimativas indicativas. Consultar o Azure Cost Management para obter os custos reais.
Plano de Desativação Proposto#
Caso a equipa UNICEF confirme que os pagamentos são processados fora do website Umbraco:
flowchart TD
A["1. Confirmar com UNICEF\nque pagamentos sao externos"] --> B{"Confirmado?"}
B -->|Sim| C["2. Exportar backup final\nda BD EasyPay"]
B -->|Nao| Z["Manter ativo\ne documentar"]
C --> D["3. Despublicar paginas\nde donativo no Umbraco"]
D --> E["4. Remover connection string\nEasyPay do Web.config"]
E --> F["5. Eliminar BD EasyPay-qual"]
F --> G["6. Monitorizar 30 dias"]
G --> H["7. Eliminar BD EasyPay\nem producao"]
H --> I["Poupanca: ~30 EUR/mes"]
Passos Detalhados#
- Confirmar com a UNICEF que os donativos são atualmente processados por uma plataforma externa (e qual)
- Exportar um backup final da base de dados EasyPay de produção para armazenamento (blob storage ou local)
- Despublicar as 4 páginas de donativo no backoffice Umbraco, bem como os formulários EasyPay e PayPal
- Remover a connection string "Payments" do
Web.config(e transforms) - Eliminar a base de dados EasyPay-qual em qualidade (ambiente de testes)
- Monitorizar durante 30 dias para garantir que nada depende destas bases de dados
- Eliminar a base de dados EasyPay em produção
- Numa fase posterior, remover o código dos projetos PaymentsManager, DAL.Payments e testes associados
Código Legacy
A remoção do código de pagamentos (PaymentsManager, DAL.Payments, etc.) pode ser feita numa fase posterior, uma vez que o código inativo não consome recursos nem afeta a performance. A prioridade deve ser a eliminação das bases de dados para reduzir custos imediatos.