FortiBlox LogoFortiBlox Docs
NexusBilling & Pricing

Credit Card Payments (Stripe)

Complete guide to subscribing, managing, and troubleshooting Stripe credit card payments for FortiBlox Nexus

Credit Card Payments with Stripe

FortiBlox Nexus uses Stripe for secure, reliable credit card processing. This guide covers everything you need to know about subscribing, managing your subscription, and handling payment issues.

Why Use Credit Card Payments?

Advantages:

  • Instant subscription activation
  • Automatic monthly billing
  • Easy to upgrade/downgrade
  • Self-service billing portal
  • Invoice history and PDF receipts
  • PCI-compliant security
  • Fraud protection
  • Familiar checkout experience

Accepted Cards:

  • Visa
  • Mastercard
  • American Express
  • Discover
  • Diners Club
  • JCB

How to Subscribe

Step 1: Sign Up for FortiBlox Nexus

If you haven't already:

  1. Go to nexus.fortiblox.com/signup
  2. Create your account (email, Google, GitHub, or Telegram)
  3. Verify your email address
  4. You'll start on the Free tier automatically

Step 2: Choose Your Tier

  1. Log into Developer Portal
  2. Navigate to BillingPricing
  3. Review tier features and pricing
  4. Click "Subscribe" on your chosen tier

Step 3: Enter Payment Details

You'll be redirected to Stripe Checkout (secure payment page):

  1. Email: Pre-filled with your account email
  2. Card Information:
    • Card number
    • Expiration date (MM/YY)
    • CVC security code
    • ZIP/Postal code
  3. Name on card: Cardholder name
  4. Billing address: Required for tax calculation

Screenshot Placeholder

[IMAGE: Stripe Checkout page showing payment form]
Location: /docs/images/billing/stripe-checkout.png

Step 4: Complete Payment

  1. Review subscription details:
    • Tier name
    • Monthly price
    • Tax (if applicable)
    • Total amount
  2. Click "Subscribe" button
  3. Wait for payment processing (usually 1-3 seconds)
  4. 3D Secure authentication may be required for some cards

3D Secure Authentication

Some cards require additional verification:

  1. You'll see a popup from your bank
  2. Enter your 3D Secure password or code
  3. Approve the payment
  4. Return to FortiBlox
[IMAGE: 3D Secure authentication popup]
Location: /docs/images/billing/3ds-auth.png

Step 5: Confirmation

After successful payment:

  1. You'll be redirected to Developer Portal
  2. See confirmation: "Subscription activated!"
  3. Your tier is updated immediately
  4. Credits are reset to your new tier's allocation
  5. Receive confirmation email with receipt

Managing Your Subscription

View Subscription Details

Access your subscription information:

  1. Log into Developer Portal
  2. Navigate to BillingSubscription

You'll see:

  • Current tier
  • Monthly cost
  • Next billing date
  • Payment method (last 4 digits)
  • Credits used this period
  • Credits remaining
// Or fetch via API
const response = await fetch('https://nexus.fortiblox.com/api/subscription', {
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY'
  }
});

const subscription = await response.json();
console.log(subscription);
/*
{
  subscription_id: 'sub_1QKmN4B5tZ...',
  tier: 'developer',
  status: 'active',
  current_period_start: '2025-11-21T00:00:00Z',
  current_period_end: '2025-12-21T00:00:00Z',
  cancel_at_period_end: false,
  credits_allocated: 50000000,
  credits_used: 12500000,
  credits_remaining: 37500000
}
*/

Update Payment Method

Change your credit card without interrupting service:

Via Developer Portal

  1. Navigate to BillingSubscription
  2. Click "Update Payment Method"
  3. You'll be redirected to Stripe Customer Portal
  4. Click "Update payment method"
  5. Enter new card details
  6. Click "Save"
  7. Return to Developer Portal

Via Stripe Customer Portal

Direct link: Manage Billing

  1. Enter your email address
  2. Check email for verification code
  3. Enter code to access portal
  4. Click "Update payment method"
  5. Enter new card details
  6. Save changes
// Or get Customer Portal link via API
const response = await fetch('https://nexus.fortiblox.com/api/billing/portal', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    return_url: 'https://nexus.fortiblox.com/billing'
  })
});

const { url } = await response.json();
// Redirect user to this URL
window.location.href = url;

Upgrade Your Tier

Upgrade to a higher tier at any time:

  1. Navigate to BillingPricing
  2. Click "Upgrade" on desired tier
  3. Review prorated charge:
    • Remaining time on current tier is credited
    • New tier price is charged
    • You pay the difference
  4. Click "Confirm Upgrade"
  5. Payment processed immediately
  6. Credits updated to new tier
  7. Rate limits increased immediately

Prorated Charge Example

Current Tier: Developer ($49/month)
New Tier: Business ($499/month)
Days into billing cycle: 15 of 30
Days remaining: 15

Calculation:
- Credit for unused Developer time: $49 × (15/30) = $24.50
- Charge for remaining Business time: $499 × (15/30) = $249.50
- Net charge: $249.50 - $24.50 = $225.00

You pay: $225.00
Next billing: Full $499.00 in 15 days
// Upgrade via API
const response = await fetch('https://nexus.fortiblox.com/api/billing/upgrade', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    new_tier: 'business'
  })
});

const result = await response.json();
console.log(result);
/*
{
  success: true,
  message: 'Successfully upgraded to business tier',
  subscription: {
    id: 'sub_1QKmN4B5tZ...',
    tier: 'business',
    proration_amount: 22500, // cents
    next_billing_amount: 49900, // cents
    next_billing_date: '2025-12-06T00:00:00Z'
  }
}
*/

Downgrade Your Tier

Downgrade to a lower tier (takes effect at period end):

  1. Navigate to BillingPricing
  2. Click "Downgrade" on desired tier
  3. Review downgrade terms:
    • Change takes effect at end of current billing period
    • No refund for current period
    • Continue using current tier until then
    • Credits will decrease at period end
  4. Click "Confirm Downgrade"
  5. Confirmation message displayed
  6. Email confirmation sent

Important: Downgrade is scheduled but not immediate. You keep full access to your current tier until the billing period ends.

// Downgrade via API
const response = await fetch('https://nexus.fortiblox.com/api/billing/downgrade', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    new_tier: 'developer'
  })
});

const result = await response.json();
console.log(result);
/*
{
  success: true,
  message: 'Downgrade scheduled for end of billing period',
  subscription: {
    id: 'sub_1QKmN4B5tZ...',
    current_tier: 'business',
    scheduled_tier: 'developer',
    effective_date: '2025-12-21T00:00:00Z'
  }
}
*/

Cancel Subscription

You can cancel your subscription at any time:

See complete cancellation guide →

Invoice History

View Past Invoices

Access all your invoices:

  1. Navigate to BillingInvoices
  2. See list of all past invoices
  3. Click invoice to view details

Each invoice shows:

  • Invoice number
  • Date
  • Amount charged
  • Payment method used
  • Tax amount (if applicable)
  • PDF download link

Via Stripe Customer Portal

  1. Access Customer Portal
  2. Navigate to "Invoice history" tab
  3. View all invoices
  4. Download PDF receipts
// Get invoice history via API
const response = await fetch('https://nexus.fortiblox.com/api/billing/invoices', {
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY'
  }
});

const invoices = await response.json();
console.log(invoices);
/*
{
  invoices: [
    {
      id: 'in_1QKmN4B5tZ...',
      number: 'FB-2025-001',
      amount_paid: 4900, // cents
      currency: 'usd',
      status: 'paid',
      created: 1732147200,
      period_start: '2025-11-21T00:00:00Z',
      period_end: '2025-12-21T00:00:00Z',
      invoice_pdf: 'https://pay.stripe.com/invoice/.../pdf',
      hosted_invoice_url: 'https://pay.stripe.com/invoice/...'
    },
    // ... more invoices
  ]
}
*/

Download PDF Receipts

  1. Find invoice in BillingInvoices
  2. Click "Download PDF" button
  3. PDF receipt opens in new tab
  4. Save or print as needed

PDF includes:

  • Your business details
  • FortiBlox business details
  • Invoice date and number
  • Subscription details
  • Amount breakdown
  • Payment method
  • Tax information

Email Receipts

After each successful payment, you'll receive:

  • Subject: "Receipt from FortiBlox [#FB-2025-001]"
  • From: FortiBlox (via Stripe)
  • Contents:
    • Payment confirmation
    • Amount charged
    • PDF receipt attachment
    • Link to view online

Payment Issues

Failed Payment Handling

If a payment fails:

  1. Immediate notification: Email sent immediately
  2. Automatic retry: Stripe retries payment in 3 days
  3. Second retry: 5 days after first retry
  4. Third retry: 7 days after second retry
  5. Final notification: If all retries fail

Total retry period: Up to 15 days

During retry period:

  • ✅ Full access to your tier
  • ✅ Credits available
  • ⚠️ "Past Due" status shown
  • 📧 Email reminders sent

If all retries fail:

  • ❌ Subscription cancelled
  • ❌ Downgrade to Free tier
  • 📧 Final notice email sent

Common Failure Reasons

ReasonSolution
Insufficient fundsAdd funds to bank account, update payment method
Expired cardUpdate payment method with new expiration date
Card declined by bankContact your bank, try different card
Incorrect CVCUpdate payment method with correct CVC
Address mismatchUpdate billing address
3D Secure failedComplete 3D Secure authentication
Card not supportedUse Visa, Mastercard, Amex, or Discover

How to Resolve Failed Payment

Option 1: Update Payment Method

  1. Navigate to BillingSubscription
  2. Click "Update Payment Method"
  3. Enter new card details
  4. Payment will be retried immediately

Option 2: Retry Payment

  1. Navigate to BillingSubscription
  2. If payment failed, you'll see "Retry Payment" button
  3. Click to process payment again with existing card
  4. May be prompted for 3D Secure

Option 3: Contact Support

If you continue having issues:

Email: [email protected]

Include:

  • Your account email
  • Last 4 digits of card
  • Error message (if any)
  • Screenshot of issue

Response time: Within 24 hours

Grace Period

During the retry period (up to 15 days):

You can:

  • Continue using your paid tier
  • Access all credits
  • Use all features
  • Update payment method
  • Upgrade tier (to retry with higher amount)

You cannot:

  • Downgrade tier (would prevent payment recovery)
  • Cancel subscription (must resolve payment first)

Preventing Payment Failures

Set up backup payment method:

  1. Access Stripe Customer Portal
  2. Add second payment method
  3. Stripe will try backup if primary fails

Enable email notifications:

  1. Verify email address in your profile
  2. Check spam folder for Stripe emails
  3. Add [email protected] to contacts

Monitor card expiration:

  1. Set calendar reminder 1 month before expiration
  2. Update payment method proactively
  3. Check Billing dashboard for expiration warnings

Code Examples

Complete Subscription Flow

// Full example: Subscribe to a tier
import { loadStripe } from '@stripe/stripe-js';

// Initialize Stripe (use your Publishable Key)
const stripe = await loadStripe('pk_test_YOUR_PUBLISHABLE_KEY');

async function subscribeToDeveloperTier() {
  try {
    // Step 1: Create checkout session
    const response = await fetch('https://nexus.fortiblox.com/api/billing/create-checkout', {
      method: 'POST',
      headers: {
        'Authorization': 'Bearer YOUR_API_KEY',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        tier: 'developer',
        success_url: 'https://yourapp.com/success',
        cancel_url: 'https://yourapp.com/cancel'
      })
    });

    if (!response.ok) {
      throw new Error('Failed to create checkout session');
    }

    const session = await response.json();

    // Step 2: Redirect to Stripe Checkout
    const result = await stripe.redirectToCheckout({
      sessionId: session.id
    });

    if (result.error) {
      console.error(result.error.message);
      alert('Payment failed: ' + result.error.message);
    }
  } catch (error) {
    console.error('Subscription error:', error);
    alert('Failed to start subscription process');
  }
}

// Usage
document.getElementById('subscribe-btn').addEventListener('click', subscribeToDeveloperTier);

Handle Successful Payment

// After redirect back from Stripe Checkout
// URL will contain: ?session_id=cs_test_xxx

async function handleSuccessfulPayment() {
  const params = new URLSearchParams(window.location.search);
  const sessionId = params.get('session_id');

  if (sessionId) {
    // Verify session with backend
    const response = await fetch('https://nexus.fortiblox.com/api/billing/verify-session', {
      method: 'POST',
      headers: {
        'Authorization': 'Bearer YOUR_API_KEY',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({ session_id: sessionId })
    });

    const result = await response.json();

    if (result.success) {
      // Show success message
      showNotification('Subscription activated! Welcome to ' + result.tier + ' tier.');

      // Redirect to dashboard
      setTimeout(() => {
        window.location.href = '/dashboard';
      }, 2000);
    }
  }
}

// Run on page load
if (window.location.pathname === '/success') {
  handleSuccessfulPayment();
}

Check Subscription Status

// Check if user has active subscription
async function checkSubscriptionStatus() {
  try {
    const response = await fetch('https://nexus.fortiblox.com/api/subscription', {
      headers: {
        'Authorization': 'Bearer YOUR_API_KEY'
      }
    });

    const subscription = await response.json();

    // Check status
    switch (subscription.status) {
      case 'active':
        console.log('Subscription active');
        return true;

      case 'past_due':
        console.warn('Payment failed - please update payment method');
        showPaymentWarning();
        return true; // Still has access during grace period

      case 'canceled':
        console.log('Subscription cancelled');
        return false;

      case 'incomplete':
        console.log('Payment pending - please complete payment');
        showPaymentPrompt();
        return false;

      default:
        console.log('No active subscription');
        return false;
    }
  } catch (error) {
    console.error('Failed to check subscription:', error);
    return false;
  }
}

Update Payment Method

// Get Stripe Customer Portal URL to update payment
async function updatePaymentMethod() {
  try {
    const response = await fetch('https://nexus.fortiblox.com/api/billing/portal', {
      method: 'POST',
      headers: {
        'Authorization': 'Bearer YOUR_API_KEY',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        return_url: window.location.href // Return to current page
      })
    });

    const { url } = await response.json();

    // Redirect to Stripe Customer Portal
    window.location.href = url;
  } catch (error) {
    console.error('Failed to open billing portal:', error);
    alert('Could not open payment settings');
  }
}

// Usage
document.getElementById('update-payment-btn').addEventListener('click', updatePaymentMethod);

Security & Privacy

PCI Compliance

FortiBlox Nexus is PCI-DSS compliant through Stripe:

  • ✅ Your card details never touch our servers
  • ✅ All data encrypted in transit (TLS 1.2+)
  • ✅ Stripe stores card data securely
  • ✅ We only store Stripe customer ID
  • ✅ Regular security audits

Data We Store

FortiBlox stores:

  • ✅ Stripe customer ID (cus_xxx)
  • ✅ Stripe subscription ID (sub_xxx)
  • ✅ Subscription tier
  • ✅ Subscription status
  • ✅ Billing cycle dates

We DO NOT store:

  • ❌ Full card numbers
  • ❌ CVC codes
  • ❌ Card expiration dates
  • ❌ Billing addresses (stored by Stripe only)

Fraud Protection

Stripe provides automatic fraud detection:

  • Machine learning models analyze transactions
  • 3D Secure authentication for high-risk payments
  • Address verification (AVS)
  • CVC verification
  • Velocity checks (multiple failed attempts blocked)

Support

Need help with Stripe payments?

Documentation:

Contact:

  • Email: [email protected]
  • Live Chat: Available in Developer Portal
  • Response Time: Within 24 hours

Stripe Support:


Last Updated: 2025-11-21