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¶
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:
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.