- Home
- Apps
- SaaS Tools
- Pesapal Payment Gateway for Odoo
Illustrative previewAccept cards and M-Pesa/Airtel mobile money on Odoo eCommerce via Pesapal API v3,
with IPN reconciliation and refunds. Built and supported by ECOSIRE.
What is Pesapal Payment Gateway for Odoo?
Accept cards and M-Pesa/Airtel mobile money on Odoo eCommerce via Pesapal API v3, with IPN reconciliation and refunds. Built and supported by ECOSIRE. 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
Pesapal is the checkout backbone for thousands of Kenyan, Ugandan, and Tanzanian merchants — but Odoo ships no native Pesapal connector, so East-African stores are stuck bouncing customers to hosted links or manually reconciling M-Pesa confirmations against sales orders. This build-to-order module wires Pesapal directly into Odoo's native payment framework so cards, M-Pesa, and Airtel Money flow straight through your Odoo eCommerce, Sales, and Invoicing.
ECOSIRE designs, builds, installs, and supports this as a purpose-built Odoo add-on for your instance — not an instant apps.odoo.com download. We register a new payment provider (payment.provider) that speaks Pesapal API v3, submits an OAuth-authenticated SubmitOrderRequest, and redirects the buyer into the Pesapal iframe or hosted page. When money moves, Pesapal's IPN (Instant Payment Notification) hits a dedicated controller route in your instance; the module verifies the notification, calls GetTransactionStatus server-to-server to confirm the outcome, and drives the linked payment.transaction to done, cancel, or error — which in turn confirms the sales order and posts the invoice through Odoo's standard flow. No more copy-pasting confirmation codes.
Because it is built on Odoo's own payment abstraction (payment.provider, payment.transaction, payment.token), everything downstream just works: the eCommerce checkout, the customer portal "Pay Now" button, subscription/recurring invoices, the accounting reconciliation screen, and multi-company setups. We ground the build in real Odoo primitives — the provider and its credentials live in a model extending payment.provider with encrypted secret fields; access is locked down with ir.model.access.csv and record rules; the checkout button and provider form are OWL/QWeb views; and every callback is idempotent so a duplicated IPN never double-posts an invoice.
The connector is multi-currency aware for the East-African corridor (KES, UGX, TZS, plus USD where your Pesapal account is enabled), maps Pesapal status codes to Odoo transaction states, supports full and partial refunds via the Pesapal refund endpoint back onto the original transaction, and writes a clean audit trail of every request and callback for dispute resolution. It runs on Odoo 17, 18, and 19, on both Community and Enterprise, and is delivered with sandbox-tested go-live, documentation, and a support window.
You buy an outcome: a working, reconciled Pesapal checkout in your own Odoo — configured, tested against Pesapal sandbox, and switched to production with us on the call. Typical delivery is one working week depending on scope (number of currencies, subscription/recurring needs, and any custom reconciliation rules).
What you get
- The complete, installable Odoo module (a proper addon with __manifest__.py, models, controllers, views, and security) targeting your Odoo major version (17, 18, or 19).
- Configuration of the Pesapal provider in your instance: consumer key/secret, IPN URL registration, currency setup, and the enabled payment methods, done with you.
- Sandbox validation: end-to-end test transactions (card + mobile money) against Pesapal sandbox, plus a supervised switch to live with a first real production payment verified.
- IPN and refund runbook: a short written guide covering how notifications reconcile, how to issue full/partial refunds, and how to read the transaction audit log.
- Admin and finance training: a walkthrough (live session + recording) for your team on taking payments, reconciling, refunding, and troubleshooting failed transactions.
- Source code handover with inline documentation and a README, delivered to your repository or as a versioned archive that you own.
- A post-go-live support window (bug fixes and configuration help) and a documented path for updates when Pesapal's API or your Odoo version changes.
Who this is for
Kenyan eCommerce merchant on Odoo Website
Runs an Odoo Website/eCommerce store in Nairobi and needs M-Pesa STK-push and card payments to complete at checkout without redirecting buyers to a bare hosted link or manually matching confirmation codes to sales orders.
Ugandan/Tanzanian finance manager
Handles reconciliation across UGX/TZS and USD in Odoo Accounting and wants every Pesapal payment to auto-post to the right invoice, with refunds issued from Odoo and a clean audit trail for disputes — not a spreadsheet of wallet SMS confirmations.
East-African Odoo partner or in-house developer
Implements Odoo for regional clients and needs a proper, maintainable Pesapal add-on built on payment.provider/payment.transaction that survives version upgrades, rather than a fragile one-off script bolted onto checkout.
How Pesapal Payment Gateway for Odoo Compares
| Criterion | ECOSIRE | Custom Build | Competitor | Odoo Native |
|---|---|---|---|---|
| Pesapal API v3 support (cards + M-Pesa/Airtel) | Full connector: OAuth, SubmitOrderRequest, GetTransactionStatus | Possible but you build and test every call yourself | Varies; many list only cards or are outdated to older API | No — Odoo core has no Pesapal provider at all |
| IPN reconciliation into payment.transaction | Dedicated verified, idempotent IPN controller drives Odoo states | Must design the callback route and de-duplication logic | Sometimes; quality and idempotency unknown until tested | No |
| Full & partial refunds from Odoo | Yes, via Pesapal refund endpoint, state written back | Extra scope you must specify and build | Often absent or manual | No |
| Multi-currency East Africa (KES/UGX/TZS/USD) | Validated per order against your Pesapal account | You implement and test each currency | Frequently single-currency or KES-only | No |
| Built for your exact Odoo version (17/18/19, CE/EE) | Yes — built and tested on your version and edition | Yes, but full effort is on you | Often lags newest Odoo; may not fit your edition | Payment framework exists, but no Pesapal binding |
| Installation, sandbox-to-live, training & support | ECOSIRE installs, tests in sandbox, goes live with you, supports | Your team owns install, testing, and all support | Download only; you self-install and self-support | N/A |
| Time to a working, reconciled checkout | one working week build-to-order, delivered working | Weeks to months of in-house dev and QA | Fast to install but hours of integration/debugging if it fits | Not achievable without custom work |
Frequently Asked Questions about Pesapal Payment Gateway
How long until it's live, and is this an instant download?
This is a build-to-order module, not an instant apps.odoo.com download. ECOSIRE builds, configures, and installs it on your instance. Typical delivery is one working week depending on scope — the number of currencies, whether you need recurring/subscription payments, and any custom reconciliation rules. We validate against Pesapal sandbox first, then switch to production with you on a call.
How do you handle updates, Odoo upgrades, and support after go-live?
Every purchase includes a post-go-live support window for bug fixes and configuration help. You receive the full source code, so you own it. When Pesapal changes API v3 or you upgrade Odoo (for example 18 to 19), we offer a maintenance path to keep the connector compatible — the payment framework differs slightly between 17, 18, and 19, and we handle those deltas.
Which payment methods and currencies are supported?
Cards (Visa/Mastercard) plus mobile money — M-Pesa (Safaricom), Airtel Money, and other Pesapal-supported wallets — through the Pesapal checkout. Currencies cover the East-African corridor: KES, UGX, TZS, and USD where your Pesapal merchant account is enabled. We validate the order currency before submitting to Pesapal.
How does reconciliation actually work — will I still match payments by hand?
No. The module registers an IPN (Instant Payment Notification) URL with Pesapal. When a payment settles, Pesapal calls a dedicated controller route in your Odoo, the module calls GetTransactionStatus server-to-server to confirm the real outcome, then drives the linked payment.transaction to done — which confirms the sales order and posts the invoice through Odoo's standard flow. Callbacks are idempotent, so a duplicated notification never double-posts.
Does it work with Odoo Community, and with the customer portal, not just eCommerce?
Yes. It's built on Odoo's native payment framework (payment.provider, payment.transaction), so it works on both Community and Enterprise across Odoo 17, 18, and 19. Because it plugs into that framework, it also powers the customer portal 'Pay Now' button on quotations and invoices — not only the Website/eCommerce checkout.
Can customers get refunds, and are they issued from Odoo?
Yes. You can issue full or partial refunds from Odoo against the original Pesapal transaction via the Pesapal refund endpoint. The refund state is written back to the payment.transaction and reflected in your accounting entries, so your books and Pesapal stay in sync.
Is it secure — where do the API credentials live?
Credentials (consumer key/secret) are stored as encrypted secret fields on the provider record and never exposed to the browser. Access is controlled with ir.model.access.csv and record rules. The browser redirect is never trusted as proof of payment — the server-side GetTransactionStatus call is the source of truth, and every request/callback is logged for audit and dispute resolution.
Related Modules

PDF Print Preview for Odoo
A build-to-order Odoo extension that renders any QWeb PDF report inside the browser so users can preview, page through, and print without first saving a file. ECOSIRE scopes, builds, installs, and supports it for your Odoo 17/18/19 environment.

PDF Quote Builder & Branded Proposals
Turn Odoo quotations into branded, multi-page PDF proposals with cover pages, dynamic pricing blocks and e-signature.

PhonePe Payment Gateway for Odoo
Build-to-order PhonePe payment provider for Odoo — UPI intent, cards, netbanking, X-VERIFY signing, webhook reconciliation & refunds in INR.

Pipedrive CRM Connector
Build-to-order Odoo module that imports and syncs Pipedrive deals, persons and organizations into Odoo CRM — built and installed by ECOSIRE.
Pesapal Payment Gateway
Accept cards and M-Pesa/Airtel mobile money on Odoo eCommerce via Pesapal API v3, with IPN reconciliation and refunds. Built and supported by ECOSIRE.
- Native Odoo payment provider: a new record extending payment.provider so Pesapal appears alongside other methods in Settings and at eCommerce checkout, no external redirect gymnastics.
- Pesapal API v3 connector with OAuth request-token auth, SubmitOrderRequest order submission, and GetTransactionStatus server-to-server confirmation before any order is marked paid.
- Cards plus mobile money in one flow: Visa/Mastercard and M-Pesa (Safaricom), Airtel Money and other Pesapal-supported wallets, presented through the Pesapal iframe or hosted checkout.
- IPN reconciliation: a dedicated /payment/pesapal/ipn controller route receives Instant Payment Notifications, verifies them, and reconciles each against its payment.transaction automatically.