- Home
- Apps
- SaaS Tools
- M-PESA Express Payment Base for Odoo
Illustrative previewA build-to-order base module that wires M-PESA Express (STK Push) into Odoo as a first-class payment provider
for both e-commerce checkout and Point of Sale.
ECOSIRE scopes, builds, installs, and supports it — this is not an off-the-shelf download.
What is M-PESA Express Payment Base for Odoo?
A build-to-order base module that wires M-PESA Express (STK Push) into Odoo as a first-class payment provider for both e-commerce checkout and Point of Sale. ECOSIRE scopes, builds, installs, and supports it — this is not an off-the-shelf download. Built to order by ECOSIRE for Odoo 17, 18, 19 — indicative price from $999.00 USD; request a quote for a scoped proposal.
Key Features
Built to order, done for you
No DIY setup — a working app, built, installed and supported by ECOSIRE.
- 1
You order
Start with a one-time build price. We scope it with you at kickoff.
- 2
We build & install
ECOSIRE builds, configures and installs it on your Odoo.
- 3
Go live + support
You go live in about one working week, with two weeks of go-live support. Defects in the code we deliver are fixed free of charge.
Technical Specifications
- Odoo Compatibility
- Odoo 17, Odoo 18, Odoo 19
- Editions
- Enterprise & Community
- License
- Licence confirmation required
- Python Requirement
- Python 3.10+
- Database
- PostgreSQL 12+
About this Product
If you collect mobile-money payments today, the reconciliation gap is where the pain lives. A customer pays on their phone, a confirmation arrives in a separate portal or by SMS, and someone re-keys the amount and reference into Odoo by hand — or worse, marks a sales order paid on trust and chases the mismatch at month-end. Odoo core ships a generic payment provider framework and a pos.payment.method, but neither speaks the STK Push (prompt-on-phone) flow natively: there is no built-in provider that initiates a push request, waits on an asynchronous result callback, verifies the operator reference, and posts the payment against the right sale.order, pos.order, or account.move automatically. That last-mile automation is exactly what teams end up doing by hand, and it is what this base module removes.
We build a proper Odoo payment provider that extends the standard payment.provider and payment.transaction models so M-PESA Express behaves like any other acquirer in your database — configurable per company, per currency, in test or live mode, with credentials stored on the provider record (encrypted) rather than hard-coded. On the e-commerce and invoice-portal side, checkout triggers an STK Push to the shopper's number; the module opens a payment.transaction in pending, and a secured controller endpoint receives the operator's asynchronous result callback, validates it (amount, currency, reference and a shared-secret/signature check), then transitions the transaction to done or error and lets Odoo's native flow confirm the order and post the journal entry. On the POS side we register a custom pos.payment.method with an OWL-based payment line UI so a cashier can send the prompt, see live push/poll status at the terminal, and cancel or retry — the session closes cleanly because the payment is a real pos.payment tied to a verified transaction, not a manual note.
Under the hood the integration is built to hold up in production. Outbound calls (access-token retrieval, STK push initiate, status query) run through a small service layer with timeout, retry and idempotency handling so a dropped network response never double-charges or double-posts; every request and callback is written to a dedicated log model for audit and dispute resolution. Access is governed by ir.model.access.csv plus record rules so only Payment/POS managers see credentials and transaction internals, and the callback controller is CSRF-exempt but signature-gated. The provider is delivered against your target Odoo line — 17.0, 18.0 or 19.0 — and respects the Community vs Enterprise split (works on Community point_of_sale and website_sale; Enterprise-only touchpoints are only wired if your edition has them). Because it is a base module, it exposes clean extension hooks (overridable methods on the transaction and provider, plus the JSON/XML-RPC surface) so future add-ons — bill/paybill vs buy-goods flows, reversals, C2B/B2C, scheduled reconciliation via an ir.cron automated action — layer on without a rewrite.
Delivery is build-to-order: nothing is pre-downloaded. After a short scoping call we confirm your Odoo version and edition, sandbox vs production credentials, the currencies and companies in scope, and whether you need POS, e-commerce, or both. We build against a staging copy of your database, run UAT with you (test-mode STK pushes end to end), then install to production with a rollback plan and hand over the git repository. Typical delivery is one working week from confirmed scope. Pricing starts from $999 (indicative, single-company base scope covering one Odoo edition and the sandbox integration); multi-company or multi-currency setups, additional flows (buy-goods vs paybill, refunds/reversals, B2C payouts), deeper localization, and historical payment data migration increase the quoted scope.
What you get
- Installable source code for your build — the module targeted to your exact Odoo version (17.0/18.0/19.0) and edition
- On-staging installation plus production install and configuration of the payment provider and POS method
- Technical documentation: models, controller endpoints, configuration fields, extension hooks, and the callback contract
- End-user and cashier guide covering checkout and POS payment flows, plus a live training session for your team
- Post-go-live support window for defect fixes and configuration adjustments after launch
- UAT on a staging copy of your database with a documented rollback plan before any production change
- Git repository handover with full commit history and README
- Credential-and-environment setup checklist (sandbox vs production) so your team can rotate keys safely
Who this is for
Odoo-run retailer with a physical counter
Runs Point of Sale in Odoo and wants cashiers to trigger a phone prompt and see it confirm at the terminal, so shift close reconciles without manual mobile-money entries.
Online store or service business on `website_sale`
Sells via Odoo e-commerce or the invoice portal and needs checkout to push a payment prompt, auto-confirm the order on a verified callback, and post the journal entry cleanly.
Finance / accounting manager
Owns month-end and wants every mobile-money receipt matched to its order and journal entry automatically, with an auditable log for disputes instead of re-keyed references.
IT lead or Odoo partner
Needs a maintainable base provider with clean extension hooks and the RPC surface, delivered against their edition, so future flows (reversals, payouts, paybill vs buy-goods) layer on without a rewrite.
How M-PESA Express Payment Base for Odoo Compares
| Criterion | ECOSIRE | Custom Build | Competitor | Odoo Native |
|---|---|---|---|---|
| How you get it | Built to order for your database, then installed and supported by us | You brief and manage an in-house or freelance build | Instant download, then you self-configure and adapt | Nothing to install — no STK Push provider exists in core |
| STK Push + callback handling | Signature-gated callback, validation, retry and idempotency built in | Depends entirely on your developer's rigor | Often present but you inherit its assumptions and edge cases | Not available |
| POS integration | Custom `pos.payment.method` with OWL live-status payment line | Must be designed and built from scratch | May be e-commerce-only or a separate paid add-on | Only generic/manual POS payment methods |
| Version & edition fit | Targeted to your 17.0/18.0/19.0 and Community/Enterprise | Whatever you specify and test | Pinned to the versions the vendor chose to publish | Ships with your Odoo but has no such provider |
| Reconciliation & audit | Auto-posts to the source order; dedicated request/callback log model | Only if you build the logging and matching yourself | Varies; audit logging is often thin | Manual matching and re-keying |
| Extensibility | Documented hooks + RPC surface for reversals/payouts/paybill later | As clean as your own architecture | Bounded by the vendor's code you cannot see roadmap for | N/A |
| Ongoing support | Post-go-live window plus optional upgrade engagements | You own all maintenance and upgrades | Ticket-based, shared queue, no context on your setup | Community/your own team |
| Total cost shape | Indicative from $999, fixed quote after scoping | Unbounded developer time and risk | Low sticker price, hidden config/adaptation cost | Free but leaves the manual work with you |
Frequently Asked Questions about M-PESA Express Payment Base
Is this a ready-to-download app from the Odoo app store?
No. This is a build-to-order module. ECOSIRE builds it against your specific Odoo version, edition, and payment configuration, then installs and supports it. There is no instant download — you request a quotation and we scope it with you first.
How long does delivery take?
Typical delivery is one working week from confirmed scope. The clock starts once we have agreed the Odoo version and edition, sandbox and production credentials, currencies and companies in scope, and whether you need POS, e-commerce, or both. Larger multi-company or multi-flow builds sit at the upper end of that range.
How does pricing and scoping work?
Pricing starts from $999 as an indicative single-company base scope. It is not a fixed price: after a short scoping call we give you a firm fixed quote. Drivers that move the number include multi-company/multi-currency, extra flows (buy-goods vs paybill, refunds/reversals, payouts), localization depth, and any historical payment-data migration.
What about support and future Odoo updates?
Every build includes a post-go-live support window for defect fixes and configuration adjustments. Beyond that we offer ongoing support and version-upgrade work (for example moving your build from 18.0 to 19.0) as a separate engagement, since the operator's API and Odoo's payment framework both evolve.
Which Odoo versions and editions do you support?
We build against Odoo 17.0, 18.0, and 19.0. The provider and e-commerce flow work on Community (`point_of_sale`, `website_sale`); where your edition is Enterprise we only wire Enterprise-only touchpoints that actually exist in your database. We confirm your exact version and edition during scoping.
Do we need our own operator/payment credentials?
Yes. You supply your own sandbox and production credentials (consumer key/secret, shortcode, passkey). They are stored encrypted on the Odoo provider record — never hard-coded — and we run UAT against the sandbox before switching to production. We can guide your team through obtaining and rotating them.
Can it handle both POS and online checkout at once?
Yes. The base module covers a custom `pos.payment.method` for the counter and the standard `payment.transaction` flow for `website_sale`/invoice-portal checkout. You can commission one or both; the shared provider record and callback layer are reused across them.
Related Modules

Mollie Payment Gateway for Odoo
Build-to-order Mollie payment provider for Odoo — iDEAL, Bancontact, cards, Apple Pay, Klarna with webhook reconciliation and refunds.

Monetico Payment Provider for Odoo
A build-to-order Odoo payment provider that wires Crédit Mutuel / CIC / OneyBank Monetico Paiement into your eCommerce checkout and invoicing, with HMAC-SHA1 sealed forms, signature-verified server-to-server returns, installments, deferred capture, and refunds. ECOSIRE scopes, builds, installs, and supports it for your Odoo 17, 18, or 19.

MSG91 SMS Gateway (India/DLT)
India-ready MSG91 SMS for Odoo with DLT template & sender-ID compliance — transactional, promotional, OTP & bulk. Built, installed & supported by ECOSIRE.

Multi-Company Access Rights
A build-to-order Odoo security layer that gives multi-company users different access rights, menus, and record visibility per company they operate in. ECOSIRE scopes, builds, installs, and supports it for your exact org structure.
M-PESA Express Payment Base
A build-to-order base module that wires M-PESA Express (STK Push) into Odoo as a first-class payment provider for both e-commerce checkout and Point of Sale. ECOSIRE scopes, builds, installs, and supports it — this is not an off-the-shelf download.
- Custom `payment.provider` and `payment.transaction` records so M-PESA Express appears as a native Odoo acquirer, selectable per company and per currency in test or live mode
- STK Push (prompt-on-phone) initiation from `website_sale` checkout and the customer invoice portal, opening the transaction in `pending` until the operator responds
- Secured, signature-gated callback controller that receives the asynchronous result, validates amount/currency/reference, and transitions the transaction to `done` or `error`
- Custom `pos.payment.method` with an OWL payment-line UI: cashier-initiated prompt, live push/poll status, cancel and retry at the terminal