Documentation Index
Fetch the complete documentation index at: https://billing-docs.razi.ai/llms.txt
Use this file to discover all available pages before exploring further.
Overview
The Payment component is designed to handle the payment process using Stripe. It initializes the Stripe instance, creates a payment intent, and displays the embedded checkout form. The component manages loading states, errors, and integrates with the EmbeddedCheckoutForm component to complete the payment.
Import
import Payment from './path/to/Payment';
Usage
import React from 'react';
import Payment from './components/Payment';
const PaymentPage = () => {
return (
<div>
<h1>Checkout</h1>
<Payment />
</div>
);
};
export default PaymentPage;
Component Code
import React from 'react';
import { Elements } from '@stripe/react-stripe-js';
import useCreatePaymentIntent from "@/billing-ui/hooks/useCreatePaymentIntent";
import { useBillingContext } from "@/billing-ui/context/BillingContext";
import LoadingSpinner from "@/billing-ui/components/ui/LoadingSpinner";
import Config from "@/billing-ui/config";
import EmbeddedCheckoutForm from "@/billing-ui/components/core/EmbeddedCheckoutForm";
import { loadStripe } from "@stripe/stripe-js";
const Payment = () => {
const stripePromise = loadStripe(String(Config.STRIPE_PUBLIC_KEY), {
apiVersion: '2024-06-20',
betas: ['elements_customers_beta_1'],
});
const { selectedPlan, user, userToken } = useBillingContext();
if (!selectedPlan) return <div className="text-red-500">Please Select A Plan Before Proceeding With The Checkout!</div>;
const { clientSecret, paymentIntent, customerOptions, loading, error } = useCreatePaymentIntent({
amount: Number(selectedPlan?.price) || 0,
currency: String(selectedPlan?.currency),
planCode: selectedPlan.code
}, String(userToken));
if (loading) return <LoadingSpinner />;
if (error) return <div className="text-red-500">{error}</div>;
const appearance = {
theme: 'stripe',
variables: {
colorPrimary: '#0570de',
colorBackground: '#ffffff',
colorText: '#30313d',
colorDanger: '#df1b41',
fontFamily: 'Ideal Sans, system-ui, sans-serif',
spacingUnit: '2px',
borderRadius: '4px',
}
};
const loader = 'auto';
return (
<>
{clientSecret && stripePromise && (
<Elements
stripe={stripePromise}
options={{
clientSecret: clientSecret!,
loader,
appearance,
customerOptions
}}
>
<EmbeddedCheckoutForm paymentIntent={paymentIntent} />
</Elements>
)}
</>
);
}
export default Payment;
Customization
The Payment component can be customized in various ways to fit different requirements:
- Styles and Classes: Modify the CSS classes and styles to change the appearance of the component.
- Stripe Appearance: Customize the Stripe Elements appearance by modifying the
appearance object.
- Error Handling: Implement custom error handling logic to display more detailed error messages or retry mechanisms.
- Loading States: Customize the loading spinner or add additional loading indicators as needed.
Example Customization
const CustomizedPayment = () => {
const customAppearance = {
theme: 'flat',
variables: {
colorPrimary: '#000000',
colorBackground: '#f0f0f0',
colorText: '#333333',
colorDanger: '#ff0000',
fontFamily: 'Arial, sans-serif',
spacingUnit: '4px',
borderRadius: '8px',
}
};
return (
<Payment appearance={customAppearance} />
);
};
export default CustomizedPayment;
Usage Guide
- Import and Use: Import the
Payment component into your page or parent component and include it in the JSX.
- Handle Loading and Errors: Ensure to handle loading states and errors appropriately to provide a good user experience.
- Customization: Leverage the customization options to fit the component into your application’s design and functionality requirements.
Placeholder for Images
