In today’s digital landscape, a smooth and secure payment experience is crucial for any web
application. Stripe, a leading payment gateway, simplifies the process of accepting online
payments. This blog post guides you through integrating Stripe payments into your React
application, empowering you to accept credit card payments with ease.
Prerequisites:
- AReactproject set up.
- AStripe account (you can create a free test account).
Steps to Integration:
- Install Stripe.js:
Begin by installing the Stripe.js library using npm or yarn:
In terminal
npm install @stripe/stripe-js @stripe/react-stripe-js
- Obtain Your Stripe Keys:
Log in to your Stripe dashboard and navigate to the “Developers” section. Obtain your Publishable key (used for client-side integration) and your Secret key (used for server-side communication– keep this secret!). - Create the Payment Form Component:
Create a React component to handle the payment form and user interaction:
import React, { useState } from 'react';
import { Elements, CardElement, useStripe, useElements } from
'@stripe/react-stripe-js';
const YOUR_PUBLISHABLE_KEY = 'YOUR_STRIPE_PUBLISHABLE_KEY';
//
Replace with your publishable key
const PaymentForm = () => {
const [cardError, setCardError] = useState(null);
const stripe = useStripe();
const elements = useElements();
const handleSubmit = async (event) => {
event.preventDefault();
if (!stripe || !elements) {
// Stripe.js has not loaded yet. Make sure to disable submit
button while loading
return;
}
const result=await
stripe.confirmCardPayment(YOUR_BACKEND_ENDPOINT,{
payment_method:{
card:elements.getElement(CardElement),
},
});
if(result.error){
console.error(result.error.message);
setCardError(result.error.message);
}else{
//Paymentsuccessful!Handletheresponsefromyourbackend
(e.g.,showsuccessmessage)
console.log('Paymentsuccessful!',result);
}
};
return(
<Elementsstripe={YOUR_PUBLISHABLE_KEY}>
<formonSubmit={handleSubmit}>
<CardElementonChange={(event)=>
setCardError(event.error)}/>
<buttontype="submit"disabled={!stripe}>
Pay
</button>
{cardError&&<div>{cardError}</div>}
</form>
</Elements>
);
};
exportdefaultPaymentForm;
- ThiscodesnippetcreatesaPaymentFormcomponent.
- ItutilizestheElementsandCardElementcomponentsfrom@stripe/react-stripe-jsto
renderthepayment form. - ThehandleSubmit functionistriggeredwhentheformissubmitted.
- Itusesthestripe.confirmCardPaymentmethodtoprocessthepaymentontheStripe
serverviayourbackendendpoint(explainedlater). - Errorhandlingisincludedtodisplayanyissuesencounteredduringpaymentprocessing
- WrapYourAppwithElements:
WrapyourmainapplicationcomponentwiththeElementscomponent from
@stripe/react-stripe-js,passingyourPublishablekey:
importReactfrom'react';
importPaymentFormfrom'./PaymentForm';
functionApp(){
return (
<Elements stripe={YOUR_PUBLISHABLE_KEY}>
<PaymentForm />
</Elements>
);
}
export default App;
- Set Up aBackend Endpoint (Optional):
While Stripe.js handles client-side communication, you might want a backend server to
receive payment confirmation and manage your application’s logic. You can create a
server-side endpoint using Node.js, Express, and the Stripe Node.js library to handle the
following:- Receiving the payment confirmation from Stripe.js.
- Communicating with the Stripe API using your Secret key.
- Validating the payment and updating your application’s data accordingly.
Remember:
- Replace YOUR_STRIPE_PUBLISHABLE_KEY with your actual Stripe Publishable key and YOUR_BACKEND_ENDPOINT with the URL of your backend endpoint if you choose to implement one.
- Ensure your backend server is secure and handles your Secret key with utmost care.
**Testing Your Integration
Sources - https://stackoverflow.com/questions/61046958/using-stripe-js-react-in-chrome-extension-failure
- https://stackoverflow.com/questions/68718332/stripe-v1-payment-intents-id-confirm-returns-http
400-received-unknown-parame