Accept payments online

Use a hosted Stripe Payment Link for a simple offer. Begin in a sandbox. A custom order database and branded email service are optional extensions for more advanced fulfillment.

Categories: checkout, billing, monetize, sell

Editorial review: August 2026

A reliable payment stack for an online product

Stripe owns checkout and payment state, Supabase stores the application’s order and entitlement records, and Resend delivers transactional email. The critical integration is the signed Stripe webhook: the success page improves the customer experience, but only a verified server-side event should grant access, mark an order paid, or trigger a receipt.

Best for

  • SaaS products, digital goods, and small online businesses launching one-time or subscription payments
  • Teams already using Supabase that want payment state connected to users, orders, or entitlements
  • Founders who want a hosted or embedded checkout without storing card details themselves

Consider another approach when

  • Marketplaces that need multi-party payouts, onboarding, and connected-account compliance
  • Businesses that require a merchant-of-record provider to own sales-tax collection and remittance
  • Offline point-of-sale or regulated payment flows that need a specialist implementation review

What each payment-stack tool owns

ToolRoleChoose it forWatch for
StripeCheckout, payment methods, subscriptions, and refundsCreating Checkout Sessions or Payment Links and receiving the authoritative payment lifecycle events.Never trust a browser redirect as proof of payment. Verify webhook signatures and handle repeated or delayed events safely.
SupabaseOrders, customers, entitlements, and webhook processingPersisting the product-specific state that connects a Stripe customer or payment to an application user.Keep service credentials server-side, enforce row-level security, and make webhook writes idempotent.
ResendReceipts and transactional payment emailSending branded confirmation, failure, refund, and renewal messages from a verified domain.Trigger email from durable payment state, not the success-page visit, and use idempotency to avoid duplicates.

Model payment state before building checkout

Define the product, price, currency, billing cadence, refund policy, and access rule before writing integration code. Store provider identifiers alongside your own order and user identifiers so a webhook can update the correct record without relying on an email address.

Keep the payment provider’s status and the application’s entitlement separate. A subscription can be active while an invoice is retrying, a refund can revoke only part of an order, and a customer can change email addresses. Explicit state makes those transitions auditable.

Production payment checklist

Create Checkout Sessions on a trusted server path, attach an internal order or user reference, and process signed webhook events in a short-lived endpoint. Return a successful webhook response only after the event has been validated and safely recorded.

  • Verify the Stripe signature against the raw request body before reading or writing payment data.
  • Store processed event IDs or enforce a unique provider identifier so retries cannot create duplicate orders or emails.
  • Grant access from a confirmed server-side payment event rather than from a success URL controlled by the browser.
  • Test successful payments, declines, abandoned checkout, duplicate events, refunds, and subscription cancellation.
  • Keep secret keys in server-side environment storage and expose only publishable credentials to the browser.
  • Send payment email from the recorded order state and include a support or refund path customers can understand.

Start hosted, customize only when the workflow requires it

Stripe Checkout is the sensible default when speed and payment-method coverage matter more than a fully custom form. Payment Links require even less application work. Move toward an embedded or custom experience only when the product genuinely needs contextual pricing, a specialized conversion flow, or tighter visual control.

Before launch, run the full lifecycle in test mode and then make one controlled live purchase. Confirm that the order record, entitlement, email, refund path, and support tooling all agree on the same transaction.

Tools that power the Accept payments online stack

Test your first payment link

Use a hosted Stripe Payment Link for a simple offer. Begin in a sandbox. A custom order database and branded email service are optional extensions for more advanced fulfillment.

Good fit: A simple product or service with a clear price and a fulfillment process you can handle manually.

Finished means: A test checkout completes and its successful payment appears in the Stripe test environment.

Try a sandbox checkout

This Stripe Payment Link charges a simulated $1.00 USD once. Complete the practice checkout, then follow the guide to create your own test link.

Sandbox only. No real money moves, no product is delivered, and no account access is granted. Use the test details below, never a real card.

  • Email: demo@example.com
  • Test card: 4242 4242 4242 4242
  • Expiry: 12/34. CVC: 123.
  • Name: Demo User. Address: 123 Test Street, San Francisco, CA 94103, United States.

Try the sandbox checkout

What we checked

  • Product, one-time price, and link are in a sandbox
  • Checkout session completed with payment status paid
  • Payment succeeded for $1.00 USD in test mode
  • Stripe generated a receipt URL

Tested 2026-09-06. The site owner completed checkout; Stripe’s session and payment records were independently checked through its API.

Receipt email delivery and automatic fulfillment were not tested. A receipt or success page does not provide product delivery or account access.

What this setup covers

hosted checkout · payment record · receipt settings

Before you start

Plan limits and costs

Download the offer and payment-test worksheet

Add later, only when needed

Supabase
When your application must keep its own orders or grant access. Verify signed webhooks and make fulfillment idempotent.
Resend
When you need custom transactional messages beyond Stripe’s receipt settings. Send after a verified payment event, not a browser redirect.

If something goes wrong

The payment is missing from the dashboard.
Check the environment selector: test and live records are separate. Verify the payment status rather than trusting a success URL.
No receipt arrives during testing.
Stripe directs you to send test receipts manually. Open the successful test payment, find Receipt history, and choose Send receipt from its menu. Use an address you control and check the receipt documentation if delivery fails.
Payment succeeded but app access did not change.
This minimal link flow does not provision accounts. Add a verified, idempotent webhook before selling automatic access.

Reviewed 2026-09-06. Stripe sandbox product, price, and Payment Link created by Codex. The site owner completed the test checkout; Codex verified the paid session and succeeded $1.00 USD payment through Stripe’s API. Receipt email delivery and automatic fulfillment were not tested.

Setup guide

  1. Stripe: Open a Stripe sandbox or test environment. Create your product and price, checking the currency and whether it is a one-time or recurring charge. Use the offer worksheet below to describe what the buyer receives. (Open Stripe test products)

    Check: The product and price exist in the test environment.

  2. Stripe: Create a Payment Link for that price. Review the quantity, information collected, and after-payment confirmation. Open the link and check that checkout describes the same offer as your page. (Create a test Payment Link)

    Check: The test checkout shows the correct offer, amount, and currency.

  3. Stripe: Complete checkout using a test payment method from Stripe’s testing documentation. Do not use a real card for testing. In the test dashboard, confirm the payment is successful and its amount matches the offer. (Open Stripe test payment methods)

    Check: The successful test payment is recorded; a redirect alone is not proof of payment.

  4. Stripe: Review receipt settings and write down how you will fulfill an order. To test receipt delivery, open the successful test payment in the Dashboard and send a manual receipt from Receipt history to an address you control. Before publishing a live link, activate the business and recheck the live product, price, refund information, and fulfillment process. (Review Stripe receipt settings)

    Check: You have a verified test payment and a clear live-launch checklist. No real payment is needed to complete this guide.