Getting Started with Your Node.js Application
Before you embark on the journey of integrating Stripe into your Node.js application, make sure you have a Node.js environment set up. If you don't already have a Node.js project, you can create one by following these simple steps:
1. Create a Project Folder: Open your terminal and navigate to the directory where you want to create your Node.js project. Use the following command to create a new project folder:
mkdir node-stripe-app
cd node-stripe-app
2. Initialize Your Project: Next, initialize your Node.js project using npm by running the following command:
npm init -y
This command will generate a package.json
file that contains information about your project.
With your Node.js project set up, you're ready to start integrating Stripe.
Configuring Your Stripe Account
To begin using Stripe, you need to create a Stripe account if you haven't already. Once you have an account, you can access the Stripe Dashboard to obtain your API keys.
-
Sign in to Your Stripe Account: Visit the Stripe Dashboard and sign in with your credentials.
-
Access Your API Keys: In the Dashboard, locate the "Developers" section. Here, you'll find your API keys – a publishable key and a secret key. These keys are essential for authenticating your application with Stripe.
-
Publishable Key: This key is used on the client-side to interact with Stripe. It's safe to include this key in your frontend code.
-
Secret Key: The secret key must remain confidential and is used on the server-side to make API calls securely.
-
Storing Your API Keys Securely
It's crucial to store your API keys securely. A common practice is to use environment variables. To do this, create a .env
file in your project directory and add your API keys:
STRIPE_PUBLISHABLE_KEY=your_publishable_key
STRIPE_SECRET_KEY=your_secret_key
We'll use the dotenv package to load these environment variables into our application securely.
npm install dotenv
In your Node.js application code, you can load the environment variables like this:
require('dotenv').config();
const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY);
By using environment variables, you keep your API keys safe and prevent accidental exposure.
Creating an Express Route for Payments
To handle payments, we'll set up an Express route in our Node.js application. We'll use the express
package for building our web server and the stripe
package for interacting with the Stripe API.
Here's an example app.js
file with a basic setup:
const express = require('express');
const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY);
const app = express();
app.use(express.json());
// Define your route for processing payments
app.post('/create-payment-intent', async (req, res) => {
try {
const { amount } = req.body;
// Create a PaymentIntent using the Stripe API
const paymentIntent = await stripe.paymentIntents.create({
amount: amount,
currency: 'usd',
});
res.json({ clientSecret: paymentIntent.client_secret });
} catch (error) {
console.error('Error processing payment:', error);
res.status(500).end();
}
});
// Set up your server to listen on a specific port
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
In this code:
- We create an Express app.
- We define a route,
/create-payment-intent
, to handle payment requests. - Inside the route, we use the Stripe API to create a PaymentIntent with the specified
amount
andcurrency
. - The PaymentIntent's
client_secret
is sent back to the client, allowing it to complete the payment.
This is a basic example. You can customize the route and payment process according to your application's needs.
Creating a Payment Form
To collect payment information from users, you'll need a payment form in your application. Here's a simple example of an HTML form for collecting card information:
<html>
<head>
<title>Stripe Payment</title>
</head>
<body>
<form id="payment-form">
</form>
<script src="https://js.stripe.com/v3/"></script>
<script src="/client.js"></script>
</body>
</html>
This form includes a <div>
with the ID card-element
, which is where the Stripe.js library will inject the card input field.
Handling Client-Side Logic
For handling client-side logic, you'll need JavaScript code to interact with the Stripe.js library. Create a client.js
file in your project:
document.addEventListener('DOMContentLoaded', function () {
var stripe = Stripe(process.env.STRIPE_PUBLISHABLE_KEY);
var elements = stripe.elements();
var cardElement = elements.create('card');
cardElement.mount('#card-element');
var form = document.getElementById('payment-form');
form.addEventListener('submit', function (e) {
e.preventDefault();
// Use Stripe.js to create a PaymentMethod
stripe.createPaymentMethod({
type: 'card',
card: cardElement,
}).then(function (result) {
if (result.error) {
console.error(result.error.message);
} else {
// Send the PaymentMethod ID to your server for further processing
fetch('/create-payment-intent', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ amount: 2000 }), // Adjust the amount as needed
}).then(function (res) {
return res.json();
}).then(function (data) {
// Use the client secret to confirm the payment
stripe.confirmCardPayment(data.clientSecret).then(function (result) {
if (result.error) {
console.error(result.error.message);
} else {
console.log('Payment successful!');
}
});
});
}
});
});
});
In this client-side code:
- We load the Stripe.js library and create an instance of Stripe using the publishable key.
- We create a card input field using Stripe Elements and mount it to the
card-element
<div>
. - We handle the form submission, use Stripe.js to create a PaymentMethod, and send the PaymentMethod ID to the server for further processing.
Conclusion
Integrating Stripe into your Node.js application is a significant step toward providing a seamless and secure payment experience for your customers. In this comprehensive guide, you've learned how to set up your Node.js application, configure Stripe with your API keys, create an Express route for payments, and build a payment form.