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. One-time license from $249.00 USD for Odoo 17, 18, 19 — includes 12 months of updates and support.

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.
No payment now. This sends a quote request to our team — we'll follow up by email with pricing and next steps.
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.
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.
Idempotent callbacks: every IPN and return handler is de-duplicated by OrderTrackingId so a repeated or replayed notification never double-confirms an order or double-posts an invoice.
Full and partial refunds initiated from Odoo against the original Pesapal transaction, with the refund state written back to the payment.transaction and accounting entries.
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 2 to 4 weeks depending on scope (number of currencies, subscription/recurring needs, and any custom reconciliation rules).
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.
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.
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.
Buy the license on ecosire.com and download the Pesapal Payment Gateway for Odoo module ZIP from your account dashboard.
Extract the ZIP into your Odoo custom addons folder on the server (or upload via Apps > Install from file on Odoo.sh / runbot).
Activate Developer Mode, open Apps, click Update Apps List, search for Pesapal Payment Gateway for Odoo, and press Install.
Open the new menu, paste your ECOSIRE license key, connect any external credentials (Shopify, Amazon, Stripe, etc.), and save.
Run the built-in connection test, sync your first 10 records, and schedule the recurring cron. Contact support if anything fails.
| 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 | |
| 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 | |
| Full & partial refunds from Odoo | Yes, via Pesapal refund endpoint, state written back | Extra scope you must specify and build | Often absent or manual | |
| 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 | |
| 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 | |
| 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 | |
| Time to a working, reconciled checkout | 2–4 weeks 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 |
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 2 to 4 weeks 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.
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.
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.
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.
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.
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.
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.
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.