menu-MENAmenu-MENA
HomePricingBlogContact UsGet Started
The menu-MENA admin dashboard sidebar open on the Operations section, with the Payments page still loading after switching to Test Restaurant

Accepting Card and Wallet Payments on Your Menu

Ordering & Payments

By menu-MENA Team

Published on September 4, 2026


Why this exists

Most of the "digital menu" pitch in Egypt stops at a guest reading a menu and sending an order over WhatsApp. That gets an order to your kitchen. It doesn't get money into your account before the food goes out, which is the actual friction for anyone running delivery, a kiosk, or a business that's been burned once too often by a cash order that never shows up. menu-MENA's answer is a Paymob integration built on Paymob's classic Accept flow, the same handshake Paymob's own SDKs use: authenticate with an API key, register an order, mint a payment key, then hand the guest a hosted page to pay on.

It's real infrastructure sitting behind the Payments item in your admin sidebar: the checkout route, the credential storage, the webhook verification, all built and live, not a feature waiting on a roadmap.

How a payment actually happens

The flow starts exactly where every menu-MENA order starts: a guest builds a cart on your public menu and sends it as a WhatsApp order. Nothing about that changes.

What's new is what you can do with that order once it lands on your Orders board. If Paymob is connected, a payment icon shows up next to any order that isn't already marked paid. Tap it and menu-MENA:

  1. Reads the order's total from what's actually stored on the order, not from anything a request could hand it a different number for.
  2. Registers that amount with Paymob under your merchant account.
  3. Copies a payment link straight to your clipboard.

You paste that link back into the same WhatsApp thread the order came from. The guest taps it, lands on Paymob's own hosted page, and pays by card or wallet. Your storefront never renders a card field and never touches card data.

The order's payment status updates to "pending" the moment you generate a link, then flips to Paid, Failed, or Refunded once Paymob's webhook reports back. You don't refresh anything to see it change.

Setting it up

Everything lives on the Payments page under Settings, and only the owner account can open it. A manager who tries gets redirected straight back to the dashboard, the same way staff permissions get enforced everywhere else, and this specific gate is checked on the server too, not just hidden from the menu.

You'll need four things off your Paymob dashboard: an API key, an integration ID, an iframe ID, and an HMAC secret. Type them into the matching fields and save. Leave one out at first and menu-MENA still stores what you gave it, but the "enabled" switch stays off until all four are present. There's no half-configured checkout that can accidentally go live.

A "Test connection" button checks that your API key actually works before you commit to anything further. It's deliberately an auth-only check: it doesn't register a dummy order with Paymob on every click, because that would leave junk test orders sitting in your Paymob dashboard every time you poke the button. A test mode toggle sits right next to it, for running the whole flow against Paymob's sandbox before a single real payment goes through.

The page also prints a callback URL, one per restaurant, that you paste into your integration's settings on Paymob's side. That's the address Paymob calls to tell menu-MENA a payment actually went through.

What keeps it honest

A few details worth knowing if you're the type who asks "but what if":

  • Every callback from Paymob is checked against your HMAC secret before menu-MENA trusts a single field in it. An unsigned or wrongly signed callback gets a flat rejection and changes nothing.
  • The currency charged comes from your own theme settings, not from the order itself, so a tampered order can't quietly switch what currency gets billed.
  • If Paymob reports an amount that doesn't match what was requested, the payment gets flagged instead of marked paid. A partial capture or a partial refund never gets rounded up into a false "paid" on your board.
  • A payment link stays reusable for about 45 minutes before menu-MENA mints a fresh one, so tapping the icon twice on the same order doesn't register two orders with Paymob.

None of that is visible day to day. It just means the numbers on your Orders board match what actually landed in your Paymob account.

Is this the right fit for you

If your restaurant already runs on cash-on-delivery and a phone call to confirm, this closes a real gap: WhatsApp orders that used to end in "cash when it arrives" can now end in a link that settles before the order leaves the kitchen. If you run entirely in-person with cash at the table, you'll probably never open this page, and that's fine too. It stays off until you turn it on, and nothing about your menu or your ordering flow changes for a restaurant that never touches Payments settings.

Frequently Asked Questions

Staff acts first. A guest builds their order in the menu's cart and sends it over WhatsApp like any other order. On your Orders board, a payment icon appears next to that order once Paymob is connected. Tap it and menu-MENA registers the order with Paymob and copies a payment link to your clipboard, ready to paste back into the same WhatsApp thread. There's no card form sitting on your public menu page.

Whatever your Paymob merchant account is set up to accept: cards and the mobile wallets Paymob processes for Egypt. That's controlled on Paymob's side by your integration, not by menu-MENA.

Four values off your Paymob dashboard: an API key, an integration ID, an iframe ID, and an HMAC secret. All four go into the Payments page in your admin settings. Leave one blank and the enable switch simply won't flip on, so you can't go live half-configured.

Egypt is the default and the market this was built for, but Paymob also runs separate stacks for the UAE, Saudi Arabia, Oman and Pakistan. A region selector on the Payments page points your account at whichever one matches your Paymob merchant account.

Only the owner account can open the Payments page or see any credential fields. A manager account gets redirected straight back to the dashboard, and the same rule is enforced on the server, not just hidden in the interface.

menu-MENA won't mark the order paid. The amount and currency on the callback are checked against what was actually requested, and a mismatch, like a partial capture or a partial refund, gets flagged for you to reconcile by hand instead of silently accepted as a full payment.