EVC Plus, WaafiPay, Zaad and eDahab: How Mobile Money Payment Integration Works for Websites and Apps
A practical overview for businesses and developers who want customers to pay with mobile money on a website, app or WhatsApp order, without manual checking.
Why integrate instead of checking payments by hand
Many Somali businesses still take mobile money by asking customers to send money to a merchant number and share a screenshot. Staff then check each payment by hand before confirming the order. It works at small volume, but it is slow, easy to fake with edited screenshots, and impossible to reconcile once orders grow.
An integration connects your website, app or order system directly to the payment provider. The customer approves the payment on their phone, your system receives a confirmation, and the order is marked paid automatically. No screenshots, no manual matching.
Checklist
- Count how many payments your team checks by hand each week, and how long it takes.
- Note how often payments are disputed or cannot be matched to an order.
- List where customers pay today: website, WhatsApp, in store, by invoice.
The main providers and gateways
Customers in Somalia use several wallets. Hormuud’s EVC Plus, Telesom’s Zaad, Golis’ Sahal and Somtel’s eDahab are among the most common, and each has its own merchant arrangements.
A payment gateway can cover several wallets through one connection. WaafiPay, for example, lists WAAFI, ZAAD, EVCPlus and SAHAL alongside card payments, and offers ready-made plugins for WooCommerce and Shopify. eDahab offers its own public API. Which wallets your customers use should decide which connections you need, so check that before choosing.
Checklist
- Ask your customers, or check past payments, to see which wallets they actually use.
- Contact each provider or gateway about merchant onboarding and API access.
- Confirm which wallets each gateway covers before you build anything.
How a mobile money payment flow works
Most integrations follow the same pattern. Your system sends a payment request with the amount, an order reference and the customer’s phone number. The customer receives a prompt on their phone and approves it with their PIN. The provider then tells your system whether the payment succeeded, either in the response or through a callback to your server.
The important part is what happens next. Mark an order as paid only after a confirmed success from the provider, never because the customer says they paid. Store the provider’s transaction ID with the order so every payment can be traced and reconciled later.
Checklist
- Use a unique order reference for every payment request.
- Mark orders paid only on a confirmed success from the provider.
- Store the transaction ID, amount, phone number and time with each order.
Handle failures, timeouts and refunds
Real payments fail in ordinary ways: the customer does not approve in time, the balance is too low, the network drops, or the confirmation arrives late. A good integration shows a clear message for each case and lets the customer try again without creating duplicate orders.
Plan refunds and reversals from the start: who can approve them, how they are recorded and how the customer is notified. Reconcile your records against the provider’s statement every day so differences are found while they are still easy to fix.
Checklist
- Show clear messages for declined, timed-out and pending payments.
- Prevent duplicate charges when a customer retries.
- Reconcile your payment records against the provider’s report daily.
Keep keys and customer data secure
API keys and merchant credentials give access to money. Keep them on your server, never in a mobile app or website code that anyone can download. Restrict who on your team can see them, and rotate them when staff leave or a key may have been exposed.
Collect only the customer data the payment needs, protect it in transit and at rest, and log every payment event so you can investigate problems. Test everything in the provider’s test environment before taking real money.
Checklist
- Store API keys only on the server, never in app or browser code.
- Use the provider’s test environment before going live.
- Log every payment request, response and callback with a timestamp.
Bring it together in one checkout
Customers should not need to know which provider sits behind your checkout. A good payment page lets them choose their wallet, enter their number and approve, with the same experience on the website, in the app and in a WhatsApp ordering flow.
Behind the scenes, one payment service in your system can talk to each provider, so adding a new wallet later does not mean rebuilding the checkout.
Checklist
- Offer every wallet your customers use on one payment page.
- Use the same payment service for website, app and WhatsApp orders.
- Send an automatic receipt by SMS or WhatsApp after each confirmed payment.
Frequently asked questions
Can a website accept EVC Plus payments automatically?
Yes, with merchant access and an API integration through Hormuud or a gateway that supports EVC Plus. The customer approves the payment on their phone and your system receives the confirmation automatically.
Do we need a separate integration for every wallet?
Not always. A gateway such as WaafiPay covers several wallets through one connection. Wallets the gateway does not cover, such as eDahab, need their own integration.
Is there a WooCommerce plugin for mobile money in Somalia?
WaafiPay publishes plugins for WooCommerce and Shopify. Check that a plugin is maintained and tested with your current platform version before relying on it for real payments.