Never fulfil a pending Fawry order
The code is a promise to pay, not a payment. Work from paid status only.
Integrations / Payments
Fawry is how a large share of Egypt pays online without a card. Here is how to accept it on a Shopify store and reconcile the cash-at-outlet payments without fulfilling an order that has not actually been paid.
WHY THIS MATTERS
The reason Fawry matters is its reference-code cash payment: a customer checks out, receives a code, and pays cash at any Fawry outlet, ATM, or the app. That reaches the card-averse and unbanked shoppers a card-only gateway simply never sees. The catch is order flow — a Fawry order is placed as pending and only becomes paid once the cash is collected, sometimes days later. Get that state handling right and Fawry is pure incremental revenue; get it wrong and you ship goods against money that never arrives. See the wider picture in our Egypt & Saudi payment methods guide.
The same sequence we follow on client stores. Do them in order — several of the later steps depend on decisions made in the earlier ones.
You can take Fawry through FawryPay directly, or enable it inside Paymob alongside cards, wallets and instalments. For most stores Paymob is the simpler single integration — see the Paymob setup guide. Go direct only if you have a specific reason to.
Fawry approval needs business documents and takes real calendar time. Start it in week one, not launch week — payment approval is the most common cause of a slipped regional go-live.
Add the gateway to Shopify checkout and switch on the Fawry reference-code method plus cards and wallet. Confirm the Fawry option actually appears at checkout on a real device before you go further.
A Fawry cash order lands in Shopify as pending, not paid. Do NOT auto-fulfil it. Set a payment expiry window, and make sure your fulfilment team works from paid status only — this single rule prevents the most expensive Fawry mistake.
Place a test order, generate a Fawry code, complete the payment, and confirm the order flips from pending to paid in Shopify with the right status. Then test an expired, unpaid code and confirm it cancels cleanly.
Put clear instructions on the order-confirmation page and email — where to pay, how long the code lasts. Sending the code and a reminder over WhatsApp measurably lifts completion; see the WhatsApp integration guide.
Fawry settlement and fees will not line up with Shopify order dates by default. Decide with finance how payouts map to orders before you have a thousand of them.
The three things that separate a working setup from a default one — drawn from the stores we ship, not from the documentation.
The code is a promise to pay, not a payment. Work from paid status only.
An open-ended pending order is inventory you cannot sell to anyone else.
A reminder to go pay the code is the cheapest completion lift you will find.
We set this up on every store we build, and we do it as standalone work too. Start with a free audit — we will tell you what is worth changing before you spend anything.
What clients ask us about this integration before we set it up.
No — you can integrate FawryPay directly. But most stores enable Fawry through Paymob because one integration then covers Fawry plus cards, wallets and instalments, which is less to maintain.
Only after the customer pays the reference code at an outlet, then on Fawry's settlement cycle. Until the code is paid the Shopify order stays pending — treat it as unpaid and do not fulfil it.
The code expires and the order should be cancelled automatically if you set an expiry window. Nothing ships, because you fulfil on paid status only.