Skip to main content

Overview

Payment links in Flexprice provide a secure, hosted checkout experience powered by Stripe. Customers click a payment URL and are redirected to Stripe’s secure checkout page to complete their payment.

Key Features

  • Secure Checkout: Hosted by Stripe with PCI compliance
  • Multiple Payment Methods: Cards, bank transfers, digital wallets
  • Mobile Optimized: Responsive checkout experience
  • Real-time Updates: Webhook-driven status updates
  • Invoice Integration: Automatic invoice reconciliation
  • Card Saving: Optional card storage for future payments

Payment Status Flow

Status Transitions

Status Definitions

Prerequisites

  1. Stripe Connection: Active Stripe connection configured
  2. Customer Sync: Customer must have Stripe customer ID
  3. Invoice Status: Invoice must be finalized and unpaid
  4. Valid Amount: Payment amount must match invoice outstanding
You can create payment links directly from the Flexprice dashboard:
Payment Link Form
Payment Link Preview

API Request

Endpoint: POST /api/v1/payments Headers:
Request Body (Save Card for Future Use):
Request Body (One-time Payment Only):

Response

Required Fields

Stripe Checkout Configuration

Default Checkout Settings

When creating payment links, Flexprice automatically configures Stripe Checkout with:
  • Payment Methods: Cards, bank transfers, digital wallets
  • Currency: Matches the payment currency
  • Amount: Exact payment amount
  • Customer: Pre-filled with customer data
  • Invoice Details: Line items from the invoice

Card Saving Configuration

When save_card_and_make_default is set to true:
  • Setup Future Usage: Stripe session configured with setup_future_usage: "off_session"
  • Card Storage: Payment method automatically saved to customer
  • Default Assignment: Saved card becomes the customer’s default payment method
  • Future Payments: Enables subsequent card payments without re-entering details
Important Notes:
  • Card saving requires customer consent and should comply with local regulations
  • Saved cards can be used for future CARD payment method type payments
  • Only one default payment method per customer is supported

Webhook Processing

Payment Completion Webhook

When a payment is completed, Stripe sends a checkout.session.completed webhook:

Webhook Processing Flow

  1. Receive Webhook: Flexprice receives the webhook from Stripe
  2. Verify Signature: Validate webhook signature for security
  3. Find Payment: Locate payment record using session ID
  4. Check Card Saving: Read save_card_and_make_default from payment metadata
  5. Set Default Card: If flag is true, set payment method as default in Stripe
  6. Update Status: Change payment status to SUCCEEDED
  7. Reconcile Invoice: Update invoice payment status and amounts
  8. Trigger Events: Send payment completion events

Error Handling

Common Payment Errors

Payment Failure Handling

When payments fail:
  1. Webhook Received: Stripe sends failure webhook
  2. Status Updated: Payment status changed to FAILED
  3. Error Logged: Failure reason recorded
  4. Customer Notified: Optional failure notification
  5. Retry Available: Customer can create new payment link

Test Environment Setup

  1. Use Test Keys: Configure Stripe test mode
  2. Test Cards: Use Stripe’s test card numbers
  3. Test Webhooks: Use ngrok for local webhook testing

Test Card Numbers

Testing Flow

  1. Create Test Payment: Use test invoice and customer
  2. Generate Payment Link: Create payment with test data
  3. Complete Payment: Use test card in Stripe checkout
  4. Verify Webhook: Check webhook processing
  5. Confirm Status: Verify payment and invoice updates

Relationship with Card Payments

Enabling Future Card Payments

Payment links with save_card_and_make_default: true enable future card payments:
  1. First Payment: Customer uses payment link to pay and save card
  2. Card Storage: Payment method saved and set as default in Stripe
  3. Future Payments: Customer can use CARD payment method type
  4. Seamless Experience: No redirect required for subsequent payments

Payment Method Hierarchy

Integration Strategy

Recommended Flow:
  1. New Customers: Always use payment links for first payment
  2. Set Save Flag: Include save_card_and_make_default: true for returning customers
  3. Future Payments: Use card payment method for faster checkout
  4. Fallback: Provide payment link option if card payment fails
For detailed information about card payments, see Card Payment Documentation.

Security Considerations

  • HTTPS Required: All payment links use HTTPS
  • Session Expiry: Links expire after 24 hours
  • One-time Use: Each link can only be used once
  • Signature Verification: All webhooks verified

Data Protection

  • PCI Compliance: Stripe handles sensitive payment data
  • No Card Storage: Card details never stored in Flexprice
  • Encrypted Storage: All payment data encrypted at rest
  • Access Controls: Role-based access to payment data

Webhook Endpoints

  • POST /api/v1/webhooks/stripe/{tenant_id}/{environment_id} - Stripe webhook handler
For complete API documentation, see the API Reference.