Sure, I'd be happy to provide you with an introduction to integrating Stripe Payments in a Node.js application using Express. Stripe is a popular payment processing platform that allows businesses to accept online payments. Here's a step-by-step guide to get you started:
-
Set up a Stripe Account
First, you need to create a Stripe account if you don't have one already. Visit the Stripe website and sign up.
-
Install Dependencies
Create a new Node.js project and install the necessary packages:
npm init -y npm install express stripe dotenv
-
Obtain API Keys
After setting up your Stripe account, obtain your API keys from the Stripe Dashboard.
You will have both a Publishable Key and a Secret Key. Keep them secure, especially the secret key.
-
Set up Environment Variables
Create a
.env
file in your project root and add your Stripe API keys:STRIPE_PUBLIC_KEY=your_publishable_key STRIPE_SECRET_KEY=your_secret_key
-
Create an Express Server
Create a file (e.g.,
app.js
) for your Express server:const express = require('express'); const app = express(); const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY); app.use(express.static('public')); app.use(express.json()); app.use(express.urlencoded({ extended: true })); app.set('view engine', 'ejs'); app.get('/', (req, res) => { res.render('index', { stripePublicKey: process.env.STRIPE_PUBLIC_KEY }); }); app.post('/purchase', async (req, res) => { // Retrieve payment intent from the client const { paymentIntentId } = req.body; try { // Confirm the payment intent on the server const paymentIntent = await stripe.paymentIntents.confirm(paymentIntentId); res.json({ clientSecret: paymentIntent.client_secret }); } catch (error) { console.error(error); res.status(500).json({ error: 'Unable to confirm payment intent' }); } }); const PORT = process.env.PORT || 3000; app.listen(PORT, () => { console.log(`Server is running on port ${PORT}`); });
-
Create Frontend (index.ejs)
Create a folder called
views
in your project and add a file namedindex.ejs
:<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Stripe Payments</title> <script src="https://js.stripe.com/v3/"></script> </head> <body> <h1>Stripe Payments with Node.js and Express</h1> <form id="payment-form"> <!-- A Stripe Element will be inserted here. --> <div id="card-element"></div> <!-- Used to display form errors. --> <div id="card-errors" role="alert"></div> <button type="button" id="submit">Pay</button> </form> <script> // Set your publishable key const stripe = Stripe('<%= stripePublicKey %>'); // Create an instance of Elements const elements = stripe.elements(); // Create an instance of the card Element const card = elements.create('card'); // Add an instance of the card Element into the `card-element` div card.mount('#card-element'); // Handle real-time validation errors from the card Element card.addEventListener('change', ({ error }) => { const displayError = document.getElementById('card-errors'); if (error) { displayError.textContent = error.message; } else { displayError.textContent = ''; } }); // Handle form submission const form = document.getElementById('payment-form'); form.addEventListener('submit', async (event) => { event.preventDefault(); const { token, error } = await stripe.createToken(card); if (error) { // Inform the user if there was an error const errorElement = document.getElementById('card-errors'); errorElement.textContent = error.message; } else { // Send the token to your server fetch('/purchase', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ paymentIntentId: token.id }), }) .then(response => response.json()) .then(({ clientSecret }) => { // Call confirmCardPayment when submitting the form stripe.confirmCardPayment(clientSecret, { payment_method: { card: card, }, }); }); } }); </script> </body> </html>
-
Start the Server
Run your Node.js server:
node app.js
Visit http://localhost:3000 in your browser to see the payment form.
This is a basic example to help you get started. For a production environment, you should handle more aspects such as error handling, security, and proper server-side confirmation.
Remember to refer to the official Stripe documentation for more details and advanced configurations.