Skip to content

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

  1. Confirmar com a UNICEF que os donativos são atualmente processados por uma plataforma externa (e qual)
  2. Exportar um backup final da base de dados EasyPay de produção para armazenamento (blob storage ou local)
  3. Despublicar as 4 páginas de donativo no backoffice Umbraco, bem como os formulários EasyPay e PayPal
  4. Remover a connection string "Payments" do Web.config (e transforms)
  5. Eliminar a base de dados EasyPay-qual em qualidade (ambiente de testes)
  6. Monitorizar durante 30 dias para garantir que nada depende destas bases de dados
  7. Eliminar a base de dados EasyPay em produção
  8. 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.