Next Restaurant 6.1.0: move your data in, run payroll, and connect other systems Next Inventory 6.2.0: a REST API and webhooks for your other systems Next DB 6.1: Auto-Updating Tables, Printing, Phone Layout and SEO Next Task 6.0.0: a task manager for Joomla Next Inventory 6.1.1: smoother Check Out, no more list limits, and much faster PHP2Shell: Is Your Joomla Site Safe? What to Do Today Introducing Next Boards: Kanban project and task boards for Joomla Building the Future of Joomla Extensions
NextSoftware

Stripe

Card, wallet and local payment methods through Stripe Checkout: the guest is sent to Stripe's hosted payment page, comes back to your site, and a webhook confirms the payment even if they never do. Available from 6.1.0 on the storefront, QR tables and the POS (as a pay link).


How the flow works

  1. The guest chooses Stripe at checkout, on a QR table, or scans a pay link at the till.
  2. They are sent to Stripe's hosted payment page. Card details are entered there, on Stripe's side: they never touch your server.
  3. On return, the payment is checked server-side with Stripe before the order is settled.
  4. Independently, Stripe's webhook confirms the payment, so the order still settles if the guest never comes back: closed tab, lost signal, flat battery.

Methods that take time to clear (some bank debits, for example) show as pending and settle when Stripe confirms them. A checkout page left unpaid expires after an hour; the guest can simply start again.


Setting it up

1. Create the gateway

Payment Gateways → New → Stripe, then fill in:

Field Value
Secret key From your Stripe dashboard, under Developers → API keys.
Publishable key Optional. The hosted checkout only needs the secret key.
Webhook signing secret The whsec_… secret of the webhook endpoint you create in step 2.
Statement descriptor What the guest sees on their bank statement, up to 22 characters.

Start in sandbox mode with test keys (sk_test_…). A sandbox gateway refuses live keys and a live gateway refuses test keys, so a test setup can never charge a real card by mistake.

2. Register the webhook at Stripe

In the Stripe dashboard, Developers → Webhooks → Add endpoint:

  • Endpoint URL: https://your-site/index.php?option=com_nextrestaurant&format=json&task=storefront.paymentWebhook&provider=stripe
  • Events:
    • checkout.session.completed
    • checkout.session.async_payment_succeeded
    • checkout.session.async_payment_failed
    • checkout.session.expired
    • charge.refunded

Copy the endpoint's signing secret into the gateway's Webhook signing secret.

The webhook is optional, but recommended. Without it, payments still complete when the guest comes back to your site, but a guest who never returns is not settled automatically, and refunds made in the Stripe dashboard are not recorded in Next Restaurant.

3. Test

  1. Place a test order and pay with Stripe's test card 4242 4242 4242 4242.
  2. Confirm the order settled in Payments with a Stripe reference.
  3. Refund part of it from the payments ledger and check it appears in the Stripe dashboard.
  4. Pay another test order and close the browser on Stripe's page after paying. The order should settle shortly afterwards through the webhook.

4. Go live

Switch the gateway to live, enter the live secret key, create the live webhook endpoint with the same events, enter its signing secret, and run one small real payment.


At the POS, choose the Stripe gateway as the payment method and a Scan to pay dialog shows a QR code. The guest scans it with their phone camera and pays on their own phone; the screen updates by itself when they are done. Check now asks Stripe straight away, and Copy link lets you send the link instead. See Payments.


Refunds

Refunds from the payments ledger or the POS go back to the original Stripe payment, in part or in full. A refund made in the Stripe dashboard is recorded in Next Restaurant through the webhook. Either way each refund is recorded once, never twice.


Requirements

  • A Stripe account.
  • HTTPS on your site.
  • A publicly reachable site for the webhook. On a local install, payments complete only when the guest returns to your site.

What is stored on your site

Stripe's checkout and payment references, the amount, the currency and the status. No card data.

Your keys are held in the gateway configuration and are never sent to the browser. Re-entering a secret when editing the gateway is expected.

Webhooks are verified on your server with the signing secret, rejecting forged or replayed events.


Troubleshooting

Symptom Cause
"This Stripe gateway is in sandbox mode but holds live keys" (or "is live but holds test keys") The keys and the gateway's mode disagree: use sk_test_ keys in sandbox and sk_live_ keys live
Guest paid but the order is unsettled The webhook is not arriving and the guest did not return: check the endpoint URL and events
Webhook rejected The signing secret in the gateway is not the one of this endpoint (each endpoint, test and live, has its own)
Dashboard refund missing in Next Restaurant charge.refunded is not among the endpoint's events, or no signing secret is set
Stripe is not offered at checkout The gateway is not published, or the Online Payments app is switched off

See also

All Extensions