Every payment integration tutorial assumes the same thing. Stripe, sandbox keys, instant webhooks, clean docs.
M-Pesa is the payment rail over 30 million people in Kenya use every day. I've now wired it into six different production apps. The official docs will get you a working sandbox demo in an afternoon. They will not prepare you for what actually breaks in production.
Here's what nobody tells you upfront.
The sandbox lies to you
Sandbox callbacks are fast and predictable. Production callbacks are not. I've seen STK push callbacks arrive 40 seconds after the user already gave up and closed the tab. Your UI has to account for this. Don't build a payment flow that assumes a callback within 3 seconds, because in production, it sometimes just doesn't work that way.






