3.7 KiB
3.7 KiB
Payment Methods Page
Purpose
Display available payment methods for the tenant and support selection for purchases/subscriptions. Methods originate from backend billing configs and are reused across plan changes and credit purchases.
Code Locations (exact paths)
- Consolidated flows:
frontend/src/pages/account/PlansAndBillingPage.tsx(tabpayment-methods) - Purchase credits:
frontend/src/pages/account/PurchaseCreditsPage.tsx(method selection + manual payment proof) - API:
frontend/src/services/billing.api(getAvailablePaymentMethods,createPaymentMethod,deletePaymentMethod,setDefaultPaymentMethod)
High-Level Responsibilities
- Fetch account-scoped payment methods (bank transfer, local wallet, manual/other).
- Allow choosing a default method for purchases/subscriptions.
- Provide instructions/details (bank or wallet) for manual/offline flows.
Detailed Behavior
- PlansAndBillingPage:
- On load, calls
getAvailablePaymentMethods()with other billing calls; filters out disabled methods (is_enabled === false). - Chooses preferred method for selection: bank_transfer, then manual, else default flag, else first item.
- Renders payment-methods tab listing methods, default flag, instructions; supports create/delete/default actions via
createPaymentMethod,deletePaymentMethod,setDefaultPaymentMethod. - Selection state (
selectedPaymentMethod) is reused when purchasing packages or creating subscriptions.
- On load, calls
- PurchaseCreditsPage:
- Fetches methods and auto-selects bank_transfer, then manual, else first.
- For bank/local/manual methods, shows instructions and bank/wallet details and collects
transaction_reference+noteswhen the payment is manual/offline. - Stripe/PayPal placeholders show “integration pending”.
Data Structures / Models Involved (no code)
PaymentMethodDTO:id,type(bank_transfer,local_wallet,manual,stripe,paypal),display_name,instructions, optionalbank_details/wallet_details,is_default,is_enabled.
Execution Flow
- Load methods → set local
paymentMethods→ deriveselectedPaymentMethod. - User selects method → stored in component state; used by purchase/subscription handlers.
- Optional CRUD (create/delete/default) triggered in
PlansAndBillingPagetab using billing API helpers.
Cross-Module Interactions
- Used by credit purchase (
purchaseCreditPackage) and subscription updates (createSubscription,cancelSubscription) withinPlansAndBillingPage.
State Transitions
- Local selection state only; backend default flag can be updated via
setDefaultPaymentMethod.
Error Handling
- Errors surface via toast/banner in
PlansAndBillingPage; inline error message inPurchaseCreditsPagefor missing selections or failed calls.
Tenancy Rules
- All calls are account-scoped by backend auth; no client multi-tenant switching.
Billing Rules (if applicable)
- Selected method is passed to credit purchase and subscription creation; manual methods require proof submission (transaction reference) and remain pending approval server-side.
Background Tasks / Schedulers (if applicable)
- None on client.
Key Design Considerations
- Prefers offline-safe methods (bank/manual) to avoid blocking when card gateways are unavailable.
- Keeps selection sticky within the session to reduce user friction across tabs.
How Developers Should Work With This Module
- To add a new gateway type, extend
PaymentMethodtype, update selection logic, and render gateway-specific instructions or redirection flows. - Keep manual/offline instructions editable via backend configs; surface them read-only in the UI.