
Step 1: Get Your Stripe Keys
Log in to Stripe
Go to dashboard.stripe.com and sign in or create a free account.
Go to Developers → API Keys
In the top-right corner, click Developers, then select API keys from the left menu.
Step 2: Configure Stripe in the Dashboard
Edit or create a payment type for Stripe
Click Edit on an existing online payment type, or create a new one (e.g. Code:
STRIPE, Name: Online Payment).Add the Stripe processor
In the Processors section at the bottom of the edit form, select Stripe from the dropdown and click Add.
Enter your credentials
- Secret Key — paste your Stripe secret key here.
- Webhook Secret — leave this for now and complete Step 3 below.
Step 3: Set Up the Stripe Webhook
The webhook ensures orders are confirmed even if a customer closes their browser before the confirmation redirect completes. Without the webhook, a small percentage of successful payments may not create an order in your dashboard.Go to Stripe → Developers → Webhooks
In the Stripe Dashboard, click Developers → Webhooks → Add endpoint.
Enter your endpoint URL
YOUR_TENANT with your tenant domain name (the slug in your dashboard URL).Step 4: Test the Integration
- Generate a QR code for a table (see QR Setup).
- Scan it with your phone.
- Add an item and proceed to checkout.
- Use Stripe’s test card:
4242 4242 4242 4242, any future expiry (e.g.12/26), any 3-digit CVC. - Confirm the payment succeeds in Stripe Dashboard → Payments.
- Confirm the order appears in your DuitPOS dashboard.
Frequently Asked Questions
A customer's payment failed — what do I check?
A customer's payment failed — what do I check?
Go to your Stripe Dashboard → Payments and find the payment attempt. The failure reason is shown there (e.g. card declined, insufficient funds, incorrect CVC). Share the decline reason with the customer and ask them to retry with a different card or payment method. See also Payment Issues.
The webhook is not firing — what do I check?
The webhook is not firing — what do I check?
In Stripe Dashboard → Developers → Webhooks, click on your endpoint and check the Recent Deliveries tab. Failed deliveries show the HTTP response code and error. Common issues: (1) The endpoint URL is incorrect or your server is not publicly reachable. (2) The webhook secret does not match. (3) The wrong events are selected — confirm both
checkout.session.completed and checkout.session.expired are added.Do I need a separate Stripe account for each location?
Do I need a separate Stripe account for each location?
No. One Stripe account covers all locations under your DuitPOS tenant. Payments from all locations settle to the same bank account.
What happens if a customer pays but the webhook fails to arrive?
What happens if a customer pays but the webhook fails to arrive?
DuitPOS has a fallback confirmation path — when the customer is redirected back after payment, the system verifies the payment with Stripe directly. The webhook is a safety net for cases where the customer closes their browser before the redirect. Both paths are idempotent — only one order is ever created per payment, even if both paths fire.
Related
QR Code Setup
Generate and place QR codes for your tables
Payment Types
Manage all payment methods
Payment Issues
Troubleshoot failed payments
Reports
View online payment revenue in reports