Why multi-method payment in Senegal in 2026
A Senegalese e-commerce site accepting only one method loses 35-55% of conversions. Distribution observed on 12 SMEs supported:
| Method | Volume share | Customer profile |
|---|---|---|
| Wave | 48-62% | Young 18-35, urban, mobile-first |
| Orange Money | 22-34% | 25-55, employees, loyal Orange |
| Cash on delivery | 8-18% | First-purchase distrustful, rural areas |
| Stripe (Visa/Mastercard cards) | 3-12% | Diaspora, B2B, purchases > 100 KFCFA |
| Bank transfer | 0-3% | B2B large orders only |
Recommended strategy: Wave + Orange Money + Stripe by default, COD optional by zone.
H2: Real fees and 2026 conditions
| Method | Merchant fees | Payout delay | Reliable webhook | KYC |
|---|---|---|---|---|
| Wave Business | 1% intra-Senegal | T+1 working day | yes (HMAC SHA256) | RC + IFU |
| Orange Money Merchant | 1-1.5% by volume | T+2 working days | yes (OM signature) | RC + IFU + deposit |
| Stripe (EUR/USD cards) | 2.9% + 0.30 EUR | T+7 (J+2 if Stripe Capital) | yes (Stripe signature) | full KYC |
| Stripe (local XOF cards) | not direct | — | — | go through local PSP (PayDunya, CinetPay) |
| PayDunya (Wave+OM+cards aggregator) | 2-3.5% | T+1 to T+3 | yes | RC + IFU |
| CinetPay (Africa multi-country aggregator) | 2-3% | T+2 to T+5 | yes | RC + IFU |
Tactical choice.
- Monthly volume < 5 M FCFA: aggregator (PayDunya or CinetPay), single integration
- Volume > 10 M FCFA: direct Wave + Orange Money integration (saves 1-2% fees) + Stripe for international
H2: Technical architecture (Next.js 14 + Prisma + webhooks)
Minimum Prisma model.
`prisma
model Order {
id String @id @default(cuid())
amount Int // in FCFA
currency String @default("XOF")
status OrderStatus @default(PENDING)
paymentMethod String // wave | orange | stripe | cod
paymentRef String? // external PSP ref
customerId String
createdAt DateTime @default(now())
paidAt DateTime?
}
enum OrderStatus {
PENDING
PAID
FAILED
REFUNDED
}
`
Server-side checkout route. Create order as PENDING, generate PSP payment URL, return to client. Client is redirected to PSP, pays, and PSP calls your webhook back.
Webhook route. Verify HMAC signature, update status=PAID, trigger email + logistics. Always idempotent (PSP may call back 2-3 times).
Need a professional website?
Kolonell builds websites that attract clients, optimized for the Sénégalese market. Free quote in 2 minutes.
Sample Wave webhook payload (simplified).
`json
{
"event": "payment.success",
"data": {
"id": "tx_AbCdEf123",
"amount": 28500,
"currency": "XOF",
"reference": "order_xyz_789",
"status": "succeeded",
"completed_at": "2026-05-21T14:32:11Z"
}
}
`
H2: Security and compliance
Non-negotiable rules.
- Webhook signature verified server-side — never trust the raw payload
- Idempotency key on payment creation — a customer clicking 3 times must not create 3 charges
- Amounts validated server-side — never accept the client amount (tamperable)
- Encrypted payment logs + restricted access (RBAC)
- PCI DSS: never store card number. Tokenize via Stripe Elements or PSP redirection
- 3D Secure activated on Stripe for all transactions > 50 KFCFA
- Rate limiting on payment endpoint (Cloudflare or Next.js middleware)
FAQ
Wave or Orange Money: which to integrate first?
Wave first in 2026: 48-62% of mobile money volume observed on SMEs, more modern API (REST + clean webhooks), flat 1% fees vs 1-1.5% for OM, faster KYC (3-7 days vs 10-21 days OM).
How much does it cost to integrate Wave + Orange Money + Stripe?
Direct integration by an experienced dev: 1.2-3.5 M FCFA for all three (including custom checkout, webhooks, minimum internal dashboard). Via aggregator (PayDunya / CinetPay): 350-850 KFCFA. Plus monthly transaction fees.
Does Stripe accept XOF?
Stripe does not process XOF directly as merchant currency. Workarounds: (1) bill in EUR/USD with displayed conversion, (2) go through local PSP (PayDunya, CinetPay) aggregating Stripe + Wave + OM, (3) open an entity outside CFA zone. Most SMEs use option 2.
How to handle cash on delivery (COD) technically?
Order created as PENDING_COD. Delivery person collects cash, scans QR on their app, marks order PAID after handing funds to HQ. Risks: customer no-pickup 8-18%, delivery person theft 0.5-2%. Mitigation: require 10-20% Wave deposit at order, delivery geolocation, delivery photo.
Webhook receiving nothing: what to check?
Checklist: (1) public webhook URL accessible (not localhost), (2) valid HTTPS (Let's Encrypt), (3) 200 response under 5s otherwise retry, (4) PSP IP whitelisted if firewall, (5) HMAC signature verified with the right secret key, (6) PSP-side merchant dashboard logs consulted (Wave / OM / Stripe all have a "webhook logs" tab).
Let's talk about your case
If you want to integrate Wave, Orange Money and Stripe on your e-commerce site, we can design the architecture and code the integration. WhatsApp +221 77 596 93 33.
Mohamed Bah
Fondateur, Kolonell
Passionate about digital and entrepreneurship in Africa, Mohamed has been helping Sénégalese businesses with their digital transformation since 2020. Founder of Kolonell, he believes every SME deserves a professional and accessible online présence.

