데브허브 | DEVHUB | How I Implement paystack subscriptionsHow I Implement paystack subscriptions
- 구독 시스템은 '플랜', '구독', '웹훅 이벤트'의 세 가지 핵심 구성 요소로 이루어집니다. 🏗️
- '플랜'은 사용자가 지불할 금액, 주기, 이름 등을 정의하며, Paystack 대시보드나 API를 통해 생성하고 고유한 '플랜 코드'를 받습니다. 💰
- 사용자가 구독을 시작하면, 이메일, 플랜 ID, 플랜 코드, 금액, 주기 등의 정보로 '구독 시작' 프로세스가 진행되며, 데이터베이스에 '대기 중'인 구독 기록이 생성됩니다. ⏳
- 결제는 Paystack 체크아웃 페이지에서 이루어지며, 결제 성공/실패/취소 등 모든 빌링 업데이트는 '웹훅 이벤트'를 통해 애플리케이션에 전달됩니다. 🔔
- 웹훅 이벤트의 보안과 신뢰성을 위해 Paystack 시그니처와 비밀 키를 사용하여 웹훅 요청의 진위 여부를 반드시 검증해야 합니다. 🔐
charge.success, subscription.create, invoice.create, invoice.payment_failed 등 다양한 웹훅 이벤트를 처리하여 구독 상태를 업데이트하고 적절한 후속 조치를 취합니다. 🔄
- 데이터베이스는 'subscription_invoices' 테이블에서 모든 결제 내역과 대기 중인 구독을 관리하고, 'subscriptions' 테이블에서 성공적으로 결제된 활성 구독의 시작 및 종료 기간을 기록합니다. 📊
- 구독 상태(대기 중, 성공, 실패, 취소됨)에 따라 사용자에게 이메일 알림을 보내고, 플랫폼과 Paystack 양쪽에서 알림을 보낼 수 있습니다. 📧
hasActiveSubscription과 같은 기능을 통해 사용자의 활성 구독 여부를 확인하여 프리미엄 기능 접근 권한을 제어하고, 구독 기간 만료 여부도 함께 확인합니다. ✨
- 사용자는 Paystack 대시보드나 애플리케이션 UI를 통해 카드 관리, 결제 내역 조회, 구독 취소 등을 할 수 있습니다. ⚙️
- 구독 취소 시, 상태는 '취소됨'으로 변경되지만, 현재 결제 기간이 끝날 때까지 프리미엄 기능 접근 권한은 유지됩니다. 🛑
- 구독 재활성화는 다시 결제하는 과정을 의미하며, 사용자를 결제 페이지로 안내합니다. ↩️
- 핵심 구현 단계는 플랜 생성, Paystack 구독 엔드포인트 호출, 그리고 웹훅 이벤트 수신 및 검증입니다. 🚀