La procedura di checkout in Stripe può essere implementata in ExpressJS usando il modulo NPM ufficiale di Stripe.

Per prima cosa occorre ottenere un ID di sessione da Stripe. Questo ID si ottiene fornendo il tipo o i tipi di pagamento, l'elenco dei prodotti con le relative informazioni (nome, descrizione, prezzo, valuta e quantità) e i due URL su cui verranno reindirizzati gli utenti in caso di completamento dell'ordine o di annullamento dello stesso.

'use strict';

const app = require('express')();
const stripe = require('stripe')('stripe-private-key');
const PORT =  process.env.PORT ||  3000;

app.get('/checkout', async (req, res, next) => {
    const { products, total } = req.session.cart;
    const url = req.protocol + '://' + req.get('host');
    const stripeParameters = {
        payment_method_types: ['card'],
        line_items: products.map(p => {
          return {
            name: p.name,
            description: p.description,
            amount: p.price * 100,
            currency: 'eur',
            quantity: p.quantity
          };
        }),
        success_url: url + '/thank-you',
        cancel_url: url + '/cancel'
        
    };
    
    try {
       const stripeSession = await stripe.checkout.sessions.create(stripeParameters);
       
       res.render('checkout', {
               sessionId: stripeSession.id,
               total: total
       });
    } catch(err) {
        res.sendStatus(500);
    }
});

app.get('/thank-you', (req, res) => {
    res.render('thank-you');
});

app.get('/cancel', (req, res) => {
    res.redirect('/checkout');
});

app.listen(PORT);

Una volta definite le tre route, una per il checkout, una per il redirect dopo il completamento dell'ordine e la terza per la cancellazione, possiamo usare l'SDK JavaScript di Stripe nel frontend per effettuare il redirect dell'utente alla pagina di checkout sul sito di Stripe.

<button id="order-btn" class="btn btn-primary">Order Now<button>

<script src="https://js.stripe.com/v3/"></script>

<script>
const stripe = Stripe('stripe-public-key');
const orderBtn = document.getElementById('order-btn');

orderBtn.addEventListener('click', () => {
    stripe.redirectToCheckout({
        sessionId: '<%= sessionId %>'
    });
}, false);
</script>

Abbiamo inserito dinamicamente il valore dell'ID di sessione nella view in modo da effettuare il reindirizzamento sulla pagina di checkout del sito di Stripe utilizzando il metodo redirectToCheckout() dell'SDK di Stripe.

Come si può notare, la procedura richiede l'interazione tra il codice lato server e quello lato client.