AcapaPay · Laravel SDK
Boas Práticas de Segurança
Idempotência nos Listeners
O servidor AcapaPay pode, em situações excecionais (timeouts, retentativas), enviar o mesmo Webhook mais do que uma vez. Os seus Listeners devem ser idempotentes — produzir o mesmo resultado independentemente de quantas vezes forem chamados.
// Verifique sempre antes de processar
if (Subscription::where('acapapay_id', $event->subscriptionId)->exists()) {
Log::info('Evento duplicado ignorado: ' . $event->subscriptionId);
return;
}
Nunca Confiar Apenas no Redirect de Sucesso
O utilizador pode fechar o browser antes do redirecionamento. Nunca ative subscrições baseando-se apenas na chegada à página de sucesso. A confirmação canónica e fiável é sempre o Webhook.
Fluxo Correto
A página de sucesso mostra uma mensagem de "A processar..." e o seu sistema usa polling ou espera pelo Webhook para ativar o serviço. Só então apresenta a confirmação definitiva.
Proteger o Client Secret
- Nunca exponha o
ACAPAPAY_CLIENT_SECRETno frontend (JavaScript, HTML). - Use variáveis de ambiente e nunca faça hardcode no código-fonte.
- Rode os secrets periodicamente no painel de Developer do SSO.
SSL em Produção
O SDK verifica certificados SSL por padrão (ACAPAPAY_VERIFY_SSL=true). Nunca defina como false em produção — isso exporia a comunicação M2M a ataques man-in-the-middle.