Accept One-Time Payments on Any Website With Stripe

Accept secure one-time payments on your existing website with Stripe, connect your payment button to a hosted checkout, test the full payment flow, and start accepting real payments without a custom checkout system.

Roadmap & Resources

Check What You Need to Accept Payment For

Is This the Right Fit?

Before adding Stripe, decide exactly what the customer is paying for. This Guide is designed for simple one-time payments.

Good examples include a consultation, a booking deposit, a service deposit, a fixed-price service, a digital product, an event ticket, a simple product, or a one-time fee.

IMPORTANT

If your website needs recurring monthly or yearly billing, use a Stripe Subscriptions workflow instead. Likewise, if a successful payment must automatically unlock an account, activate paid features, update credits, or change private database records, you may need a more complete server-side Stripe integration.

Check the Existing Website

Payment Readiness Audit

Identifies the framework, every existing Buy/Pay/Checkout/Deposit/Order/Purchase/Book button, any pricing section, checkout page, Stripe integration, Payment Link, server-side payment code, or payment-related env var names — determines whether a Stripe Payment Link is enough or whether something must happen automatically after payment (unlocking an account, updating a database, delivering content) — changes nothing, exposes no credentials, and recommends a Payment Link, reusing an existing integration, or a more advanced server-side setup.

Review this existing website specifically for adding a secure one-time payment with Stripe. Do not change anything yet. Identify: - the framework and project type - existing Buy, Pay, Checkout, Deposit, Order, Purchase, or Book buttons - existing pricing or product sections - any checkout or payment page - any existing Stripe integration - Stripe libraries or SDKs - existing Stripe Payment Links - server-side payment code - payment-related API routes - payment-related environment variables — names only - success or thank-you pages - cancellation or return pages - any existing order, booking, or payment-confirmation logic Determine whether the requirement can be handled safely with a Stripe Payment Link. A Payment Link is appropriate if the intended flow is essentially: Customer chooses a fixed product/service → clicks Pay → completes a secure Stripe-hosted checkout → receives confirmation Also determine whether anything must happen automatically after payment, such as: - unlocking an account - granting access to a paid feature - updating a private order or booking database - delivering protected content - adding credits - changing a user's subscription or account status If any of those requirements make a simple Payment Link insufficient, explain why before implementing anything. Do not expose Stripe secret keys or other private credentials. Do not change anything. Finish with: **Recommended payment setup:** 1. Stripe Payment Link 2. Existing Stripe integration should be reused 3. A more advanced server-side Stripe integration is required Then briefly explain why.

Create Your One-Time Payment in Stripe

Create the Product or Service

Open your Stripe Dashboard. Create or select the product or service the customer will pay for.

Stripe Dashboard

Create or select the product/service to charge for.

https://dashboard.stripe.com

Example

Website Consultation — $99

or:

Example

Booking Deposit — $50

IMPORTANT

Make sure the payment is configured as a one-time price, not recurring.

Create the Payment Link

Create a Stripe Payment Link for that product. Review:

- Product/service name

- Amount

- Currency

- Product image if useful

- Customer email collection

- Billing information if required

- Payment methods

- Confirmation behavior

Stripe Docs

How to create a payment link.

https://docs.stripe.com/payment-links/create

NOTE

Only collect information you actually need. For a simple service payment, the Stripe checkout may only need the customer's payment details and email.

Decide What Happens After Payment

Choose a simple post-payment experience.

For example: Payment → Stripe confirmation → customer returns to a Thank You page.

Example

/thank-you

If the website already has an appropriate page like that, you can use it. Otherwise, the Stripe-hosted confirmation may be enough for a very simple setup.

Keep Private Stripe Credentials Out of the Website

For this workflow, the website generally only needs the public Stripe Payment Link.

IMPORTANT

The website does not need your Stripe secret key, webhook signing secret, account password, or other private Stripe credentials.

Example

https://buy.stripe.com/...

Copy the correct link and keep it ready for the next step.

Connect Stripe to the Website

Reuse the Existing Button

Now connect the existing website CTA to the Stripe Payment Link. Whenever possible, reuse the button that is already part of the design.

For example: Pay Deposit, Buy Now, Pay Now, Purchase, or Book & Pay.

Connect the Payment Link

Connect the Stripe Payment Link

Connects the existing payment CTA to the provided Stripe Payment Link, preserving the design, matching the displayed price/currency, and working on desktop, mobile, and keyboard — never exposes a secret key, never installs the Stripe SDK or a custom card form, never adds auth/database/webhooks unless genuinely needed, reuses an existing integration if one already works, runs the production build, and reports every file changed plus Payment integration: READY or NOT READY.

Connect this existing website to the following Stripe one-time Payment Link: [YOUR STRIPE PAYMENT LINK] First inspect the current pricing, product, service, booking, and payment-related UI. Preserve the existing design. Requirements: - reuse the existing payment CTA where appropriate - connect only the intended button or buttons - use the exact Stripe Payment Link I provided - make it clear what the customer is paying for - make sure the displayed price and currency match the Stripe checkout - make the payment CTA work on desktop and mobile - preserve keyboard accessibility - remove or replace broken placeholder checkout links only where relevant Do not: - expose a Stripe secret key in frontend code - install the Stripe SDK if a normal Payment Link already solves the requirement - build a custom credit-card form - collect card details directly on this website - create unnecessary API routes - add authentication - add a database - add webhooks unless the project genuinely needs automatic post-payment processing - redesign unrelated sections If this project already contains a working Stripe payment integration, reuse it rather than creating a duplicate implementation. Run the production build after making the change. Then report: - every file changed - every payment CTA connected - the final amount/currency shown by the website - whether any old payment integration remains Finish with: **Payment integration: READY / NOT READY**

Check the Customer Journey

The website and Stripe checkout should tell the customer the same thing. For example, a website that says "Website Consultation — $99" should not open a Stripe checkout showing "General Service — $149". Make sure the:

Product/service matches

Price matches

Currency matches

Payment purpose is clear

Test the Payment & Go Live

Test the Checkout

Do not consider the payment setup complete simply because the Stripe page opens. Test the complete flow before sending real customers through it. Use Stripe's test environment while configuring the payment flow whenever appropriate. Start from the website itself.

Open the relevant product, service, or pricing section. Click the payment button. Confirm the correct Stripe checkout opens. Confirm the product/service name. Confirm the amount. Confirm the currency. Complete a test payment. Verify the successful payment appears correctly in Stripe. Check the confirmation experience. Confirm any return or Thank You page works correctly.

Check What Happens After Payment

For many small businesses, this simple flow is enough: customer pays → Stripe confirms payment → business receives the payment → business handles the next step manually. For example, a consultation payment means you manually schedule the customer, and a deposit means the business confirms the booking.

NOTE

You do not need to build automation merely because Stripe supports it. However, if your website promises something automatically after payment, verify that a Payment Link alone can actually provide it.

Run the Final Production-Readiness Audit

One-Time Payment Production Audit

Verifies every payment CTA points to the correct Payment Link, no broken/placeholder URLs, the displayed product, amount and currency match Stripe, the checkout is one-time (not an accidental subscription), desktop/mobile/confirmation all work, no exposed secret keys or unnecessary SDK/API routes/backend, no leftover duplicate integration, and the production build succeeds — also flags when automatic fulfillment needs more than a Payment Link, never weakens security, never deploys, and answers Payment status: READY or NOT READY.

Run a final production-readiness audit for this one-time Stripe payment integration. Verify: - every intended payment CTA points to the correct Stripe Payment Link - there are no broken or placeholder payment URLs - the website displays the correct product/service - the displayed amount matches Stripe - the displayed currency matches Stripe - the Stripe checkout represents a one-time payment rather than an unintended recurring subscription - payment buttons work on desktop - payment buttons work on mobile - the confirmation or Thank You experience works - no Stripe secret keys or private credentials are exposed in frontend code - no unnecessary Stripe SDK, API route, custom checkout, or payment backend was added - no old duplicate payment integration remains where it could confuse customers - the production build succeeds - there are no important browser/runtime errors Also determine whether anything must happen automatically after a successful payment. If automatic fulfillment, access control, database updates, account activation, credits, subscriptions, or another trusted server-side action is required, clearly explain that a simple Payment Link is not enough and identify what additional integration would be needed. Do not weaken payment security. Do not deploy anything automatically. Finish with: **Payment status: READY / NOT READY** If NOT READY, list only what must be fixed before accepting real payments.

Switch to Real Payments

Once testing is complete, make sure the website uses the intended live Stripe Payment Link rather than a test payment link. Then check the flow one more time from the live website: Website → Pay → Stripe Checkout → Confirmation. If appropriate, complete a small real payment yourself and verify:

The correct amount was charged

Stripe recorded the payment

The customer confirmation works

The business receives the information needed to fulfill the purchase

Accepting Real Payments

Your website can now accept secure one-time payments without requiring a custom checkout backend.

When This Guide Is Not Enough

Use a More Advanced Stripe Integration If You Need

- Monthly or yearly subscriptions

- Free vs Pro accounts

- Automatic feature unlocking

- User-specific purchases

- Automatic order fulfillment

- Credits or usage balances

- Subscription upgrades or cancellations

- A customer billing portal

- Trusted database updates after payment

- Complex checkout logic

IMPORTANT

For those cases, payment must be verified securely on the server rather than treating a browser redirect as proof that someone paid.