Checkout Gateways — Sell & Get Paid on WhatsApp

This is the complete, start-to-finish guide to selling on WhatsApp with WaDesk: create your store, add products one by one, connect your own payment gateway, and take a real in-chat payment — across 30+ providers (Stripe, Razorpay, Paystack, Flutterwave, PayU and more). The money settles into your own gateway account, no card data ever touches WhatsApp or WaDesk, and it works on both the WhatsApp Cloud API and the Unofficial API.

Follow the steps in order. Store → Products → Gateway keys → Webhook → Send checkout. Each step below is a screen in WaDesk, with every field explained. If you only want the payments part, jump to Step 3.

How the whole thing fits together

  1. You build a store (a storefront + products).
  2. A customer orders — from your storefront page, from a chat with your AI/agent, or you add the order by hand.
  3. You add your gateway keys once, and for any order you send a checkout link.
  4. The customer pays on the gateway's secure page.
  5. WaDesk marks the order paid, sends the customer a receipt, and syncs the status back to WooCommerce/Shopify if the order came from there.

Before you start

  • Connect a WhatsApp number. Open Devices and connect a number (Cloud API or Unofficial API). See Connecting a Channel. Checkout works on either engine.
  • Have a gateway account. Sign up with the provider you want (for example Stripe, Razorpay, Paystack) and be able to reach its API keys page.
  • A public domain is needed for automatic payment confirmation (see Step 4). You can still test on a local address using the gateway's forwarding tool.

Step 1 — Set up your store (Storefront)

Go to Store → Storefront. This is your public shop page. Fill in:

  • Enabled — turn the storefront on so its public URL works.
  • Store URL (slug) — the address of your shop, e.g. your-domain/s/my-shop. Choose a short, readable slug. (You can also connect a custom domain.)
  • Currency — the currency all prices and the checkout total use (e.g. INR, USD, KES). Set this before adding products so prices are consistent.
  • Branding — logo, brand colour, theme, hero text and footer text, so the shop looks like yours.
  • Shipping — an optional flat shipping fee, a “free above” threshold, and a shipping note.
  • Cart recovery (optional) — automatically message customers who abandon their cart after a delay.

Click Save. Use Open (top of the store sidebar) to preview the live shop, or Copy to grab its public link.

Set the currency first. Products inherit the store currency, and the checkout total is charged in it — changing currency later means re-checking your prices.

Step 2 — Add your products (one by one)

Go to Store → Products → Add product (the + Add product button). Fill in one product, Save, then repeat for the next. Every field:

  • Name (required) — the product title customers see, e.g. “Complete Business Growth Package”.
  • Price (required) — the selling price in your store currency. Enter the whole amount, e.g. 10000 for ₹10,000.
  • Compare-at price (optional) — a higher “was” price shown struck-through to signal a discount.
  • SKU (optional) — your internal product code (also used as the item reference when syncing to a catalog).
  • Category and Tags (optional) — help organise and filter products.
  • Description — the short summary; the rich body is the longer detail shown on the product page.
  • Image — upload a photo (or paste an image URL). Good images sell — use a clear, square image.
  • Stock quantity and In stock — how many you have and whether it's available to buy.
  • Weight (optional) — used for shipping if you price by weight.
  • Status — set to Active to publish it to the storefront (Draft keeps it hidden).
  • Sort order (optional) — controls where it appears in the list.

Click Save. The product now shows under Store → Products and on your live storefront. Repeat Add product for each item you sell.

Zero-decimal currencies (e.g. IDR, JPY) are handled automatically — enter the whole amount and WaDesk formats it correctly on the shop and at checkout.

Step 3 — Add your checkout gateway keys

Go to Store → Checkout gateways. You'll see every supported provider. For the one you use:

  1. Expand the gateway (for example Stripe). Each field is labelled with the exact key that gateway expects:
    • Stripe — Secret key (sk_live_… / sk_test_…) and, for confirmation, the Webhook secret (whsec_…).
    • Razorpay — Key ID (rzp_…), Key secret, and optional Webhook secret.
    • Paystack / Flutterwave — Public key and Secret key (Flutterwave also has an optional webhook hash).
    • Every other gateway shows its own required fields with a hint.
  2. Paste the keys from your gateway dashboard. Choose Live or Test mode, and tick Active.
  3. Click Save. Keys are stored encrypted. To change one later, edit just that field — a blank field keeps its saved value.

You can enable as many gateways as you like and pick one per order.

Test first. Use the gateway's Test keys and Test mode, and later pay with a test card (Stripe: 4242 4242 4242 4242, any future date, any CVC) to confirm the whole flow before going live.

Step 4 — Connect the webhook (so payments confirm)

The webhook is how your gateway tells WaDesk a payment succeeded — this is what marks the order paid and sends the receipt. On each gateway's card, WaDesk shows a Webhook URL.

  1. Copy the shown Webhook URL — it looks like https://your-domain/wa/checkout/webhook/<gateway>.
  2. In your gateway's dashboard, add it as a webhook endpoint (Stripe: select the checkout.session.completed event).
  3. Copy the gateway's webhook signing secret back into that gateway's card in WaDesk and Save.
The webhook must be reachable from the internet. On a live public domain it just works. If you are testing on a local or LAN address (for example 192.168.x.x), gateways cannot reach it — use the gateway's local forwarding tool while testing (for Stripe: stripe listen --forward-to your-address/wa/checkout/webhook/stripe), or test on your public domain.

Step 5 — Get an order

An order can arrive three ways — all of them show under Store → Orders:

  • From your storefront. A customer opens your shop link, adds products to the cart, enters their name/phone, and places the order.
  • From a chat. Your AI assistant or an agent captures the order during a WhatsApp conversation.
  • Manually. You create the order yourself for a customer.

Open Store → Orders to see them, filter by status (New, Pending, Paid, …), and open any order for its full detail.

Step 6 — Send the checkout link

  1. Open the order under Store → Orders.
  2. In the Send checkout (hosted pay link) box, choose a gateway from the dropdown and click Send checkout link.
  3. WaDesk creates a secure payment page on that gateway for the exact order total, WhatsApps the link to the customer, and saves it on the order's Payment link field.

You can also trigger this automatically from a Flow or the AI order assistant, so the pay link goes out without an agent doing it by hand.

Step 7 — Customer pays, order is confirmed

  1. The customer taps the link and pays on the gateway's secure page (cards, UPI, mobile money, wallets — whatever that gateway supports).
  2. The gateway notifies WaDesk (the webhook from Step 4), WaDesk verifies it, and the order flips to Paid.
  3. The customer automatically receives a “Payment received” receipt on WhatsApp, and the order status is pushed back to WooCommerce/Shopify if it originated there.

That's the full loop — browse, order, pay, and confirm — largely inside WhatsApp.

Supported gateways

Configure any of these with your own keys. Which payment methods appear depends on the gateway and your country.

  • Global cards & wallets: Stripe, PayPal, Braintree, 2Checkout, Square, Mollie, Paddle, Lemon Squeezy, Authorize.Net, Skrill.
  • India: Razorpay, PayU, Paytm, PhonePe, Cashfree, Instamojo.
  • Africa: Paystack, Flutterwave (cards, mobile money incl. M-Pesa), CinetPay.
  • South-East Asia: Midtrans, Xendit, Duitku.
  • Middle East & Türkiye: Tap Payments, HyperPay, iyzico, PayTR.
  • Latin America: Mercado Pago.
  • Bangladesh: SSLCommerz.
  • Crypto: Coinbase Commerce.
  • Offline: Bank Transfer and Offline / Cash for manually-settled orders.

Troubleshooting

  • “Send checkout link” isn't showing on the order. No gateway is configured yet — the order shows “Add gateway keys”. Finish Step 3 first, then refresh the order.
  • Customer paid but the order still says New. The confirmation webhook didn't reach your server. On a public domain, re-check the webhook endpoint and secret in Step 4. On a local/LAN address, use the gateway's forwarding tool.
  • “Add your <gateway> API keys first.” The chosen gateway has no saved keys, or it's set to inactive. Add/activate it under Checkout gateways.
  • The pay page shows the wrong amount. Check the product prices and the store currency (Step 1) — the checkout total is the order total in your store currency.
  • “Request payment on WhatsApp” does nothing. That is the separate WhatsApp Pay button (Meta-native, India + Cloud API only) — not this feature. Use Send checkout link for gateway checkout.

Requirements & caveats

  • You need an account with the gateway and its API keys. Payments settle into your gateway account.
  • The webhook URL must be publicly reachable for orders to auto-confirm and receipts to send.
  • This is separate from WhatsApp Pay (Meta's native, region-locked payment). Use Checkout Gateways when you need a global provider or a non-Cloud-API number.

Plan availability

The Store/commerce module — storefront, products, orders and checkout gateways — depends on your plan being enabled for your workspace.

WaDesk Documentation