Page cover

Fiat Payment Systems Integration

1.1 Overview

To integrate fiat payment systems, you’ll need access to third-party payment processing services like Stripe, PayPal, or Square. These services enable secure handling of user payments and offer APIs to manage transactions, refunds, and customer information.


1.2 Integration with Stripe API

1.2.1 Setup and Installation

npm install stripe

1.2.2 Initialize Stripe and Create a Payment Session

const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY);

async function createPaymentSession(req, res) {
    try {
        const session = await stripe.checkout.sessions.create({
            payment_method_types: ['card'],
            line_items: [{
                price_data: {
                    currency: 'usd',
                    product_data: {
                        name: 'CapsureLabs Premium Subscription',
                    },
                    unit_amount: 1999,
                },
                quantity: 1,
            }],
            mode: 'payment',
            success_url: `${req.headers.origin}/success?session_id={CHECKOUT_SESSION_ID}`,
            cancel_url: `${req.headers.origin}/cancel`,
        });

        res.json({ id: session.id });
    } catch (error) {
        console.error('Error creating payment session:', error);
        res.status(500).send('Payment session creation failed');
    }
}

1.2.3 Frontend Payment Button

<button id="checkout-button">Pay with Card</button>
<script src="https://js.stripe.com/v3/"></script>
<script>
    const stripe = Stripe('YOUR_PUBLISHABLE_KEY');

    document.getElementById('checkout-button').addEventListener('click', async () => {
        const response = await fetch('/create-payment-session', { method: 'POST' });
        const session = await response.json();

        stripe.redirectToCheckout({ sessionId: session.id });
    });
</script>

1.2.4 Handle Payment Confirmation via Webhooks

app.post('/webhook', express.raw({ type: 'application/json' }), (req, res) => {
    const sig = req.headers['stripe-signature'];

    let event;
    try {
        event = stripe.webhooks.constructEvent(req.body, sig, process.env.STRIPE_WEBHOOK_SECRET);
    } catch (error) {
        console.error('Webhook signature verification failed:', error);
        return res.status(400).send(`Webhook Error: ${error.message}`);
    }

    switch (event.type) {
        case 'payment_intent.succeeded':
            const paymentIntent = event.data.object;
            console.log('Payment succeeded:', paymentIntent);
            break;
        case 'payment_intent.payment_failed':
            const failedPaymentIntent = event.data.object;
            console.log('Payment failed:', failedPaymentIntent);
            break;
        case 'checkout.session.completed':
            const session = event.data.object;
            console.log('Checkout session completed:', session);
            break;
        default:
            console.log(`Unhandled event type ${event.type}`);
    }

    res.json({ received: true });
});

1.2.5 Error Handling and Testing

if (!session) {
    return res.status(400).json({ error: 'Payment session failed to create' });
}

Last updated