A build-to-order Odoo payment provider that connects checkout, invoicing and subscriptions to DPO Group so African merchants can take card, mobile-money and bank payments in local currencies. ECOSIRE scopes, builds, installs and supports it — it is not an instant apps.odoo.com download. Built to order by ECOSIRE for Odoo 17, 18, 19 — indicative price from $249.00 USD; request a quote for a scoped proposal.

A build-to-order Odoo payment provider that connects checkout, invoicing and subscriptions to DPO Group so African merchants can take card, mobile-money and bank payments in local currencies. ECOSIRE scopes, builds, installs and supports it — it is not an instant apps.odoo.com download.
No payment now. This sends a quote request to our team — we'll follow up by email with pricing and next steps.
Merchants across Africa lose sales at checkout because Odoo core ships no DPO Group integration. Out of the box, payment only wires the generic providers (Stripe, PayPal, Adyen, wire transfer, demo), none of which cover the DPO reality of pan-African cards plus mobile money (M-Pesa, MTN MoMo, Airtel Money, Tigo Pesa) settled in KES, TZS, UGX, ZMW, GHS, RWF, ZAR and more. Teams end up reconciling DPO settlements by hand against Odoo invoices, or bolting a half-finished script onto sale/account that breaks on the next upgrade. The gap is not a config toggle — it is a real payment.provider implementation Odoo does not include.
New `payment.provider` with `code='dpo'`, split test/live credentials (Company Token, service IDs, endpoint) stored as encrypted fields on the provider form
`payment.transaction` extended to call DPO's XML/Direct API: `createToken` to open, hosted `payURL` redirect, `verifyToken` for authoritative final state
Card, mobile money (M-Pesa, MTN MoMo, Airtel Money, Tigo Pesa) and bank rails routed through one transaction via a per-currency DPO service-type map
Multi-currency pan-African support (KES, TZS, UGX, ZMW, GHS, RWF, NGN, ZAR and more) with per-country service selection
Server-side notification controller re-verifies every payment with `verifyToken` — the browser redirect is never trusted to set `done`
State machine wired to Odoo natives: `_set_pending`/`_set_done`/`_set_canceled` auto-post `account.payment`, confirm the SO and validate the invoice
ECOSIRE builds a proper DPO provider as a first-class Odoo module. We add a payment.provider record with code='dpo', its own __manifest__.py declaring the payment (and payment_custom) dependencies, and a models.Model layer that extends payment.transaction to speak DPO's XML/Direct API — createToken to open a transaction, the hosted payURL redirect for the customer, and verifyToken to confirm the final state. Provider credentials (Company Token, service IDs, endpoint, currency map) live on the provider form as encrypted fields, split cleanly between test and live so you can validate on staging before go-live. Card, mobile-money and bank rails are all routed through the same transaction, with a per-currency service-type map so each country charges the right way.
Technically, the money path is event-driven, not screen-scraped. A controller route receives DPO's redirect and back-channel notification, we re-verify server-side with verifyToken (never trusting the browser round-trip), and the transaction is moved through _set_pending, _set_done or _set_canceled so Odoo's own state machine posts the payment, confirms the sale order and validates the invoice via account.move. Idempotency is enforced on the DPO transaction reference so a retried webhook cannot double-post. For subscriptions, we store the DPO token against the customer and drive tokenized recurring charges from a scheduled ir.cron automated action, so sale.subscription/recurring invoices settle without re-prompting the cardholder. Access is locked down with ir.model.access.csv plus record rules on the provider and transaction data, and every state change is written to the chatter and to download/audit logs for reconciliation. Where you need branded proof of payment, we ship a QWeb report and expose the transaction over the standard XML-RPC/JSON-RPC API for your finance tooling.
Because this is build-to-order, you are not downloading a frozen zip and hoping it fits. We start from a short scoping call to confirm your DPO service configuration, the exact countries and currencies, whether you need mobile money and/or recurring, and which Odoo edition and version you run — the module is delivered targeting your Odoo 17.0, 18.0 or 19.0 database and works on both Community and Enterprise (Enterprise adds the accounting-automation and subscription niceties; on Community we wire the equivalents against account and cron). Typical delivery is 2 to 4 weeks from confirmed scope. You receive installable source, a staging UAT with a rollback plan, documentation, a training session and a post-go-live support window — and the full git repository, so the code is yours.
Already collects card and mobile-money payments through DPO Group and wants those same rails inside Odoo eCommerce and invoicing, in local currency, without manual reconciliation.
Sells across Kenya, Tanzania, Uganda, Ghana or Zambia from one Odoo database and needs per-country currency and mobile-money routing under a single provider configuration.
Wants every DPO settlement to reconcile automatically against the matching `account.move`, with idempotent webhooks, an audit trail and QWeb receipts, instead of a spreadsheet at month-end.
Runs recurring billing and needs tokenized DPO charges driven from a scheduled cron so renewals settle without re-prompting the cardholder each cycle.
Buy the license on ecosire.com and download the DPO Pay 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 DPO Pay 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 |
|---|---|---|---|---|
| DPO Group support in Odoo | Purpose-built `payment.provider` with `code='dpo'` | You build the provider yourself from scratch | Varies; many listings are thin or unmaintained | |
| Fit to your version / edition | Built for your exact 17/18/19 on Community or Enterprise | Whatever you scope and can maintain | Often one version; upgrade at your risk | |
| Mobile money + multi-currency | Per-currency service map across pan-African rails | Possible but you design the whole mapping | Frequently cards-only or single-country | |
| Webhook verification & reconciliation | Server-side `verifyToken`, idempotent, `account.move` matching | Must be built and hardened by you | Inconsistent; some trust the browser redirect | |
| Tokenized recurring billing | DPO token + `ir.cron` scheduled charges | Significant extra build effort | Rarely included | |
| Testing & rollback | Staging UAT with sandbox DPO + rollback plan | Depends on your own QA discipline | Install-and-hope, no UAT included | |
| Ownership & support | Full git handover + post-go-live support window | You own it and you support it | Vendor-locked; support quality varies | |
| Total cost & risk | Fixed build-to-order scope, expert-built | Unpredictable dev time and maintenance | Low sticker price, high integration risk |
No. DPO Pay Gateway for Odoo is build-to-order. ECOSIRE builds it against your specific Odoo version and DPO configuration, tests it on staging, then installs and supports it. It is not an instant apps.odoo.com download, and we never claim a same-day download.
Typical delivery is 2 to 4 weeks from confirmed scope. The timeline starts once we have agreed the countries, currencies, rails (cards / mobile money / recurring), your Odoo edition and version, and your DPO service credentials during the scoping call. Tighter scopes finish faster; heavy multi-country or subscription requirements sit at the upper end.
We build for Odoo 17.0, 18.0 or 19.0 on both Community and Enterprise. Enterprise gives you the richer accounting-automation and subscription features natively; on Community we wire the equivalent flows against `account` and `ir.cron`. We target one version per delivery unless you ask for more.
All rails — cards, mobile money (M-Pesa, MTN MoMo, Airtel Money, Tigo Pesa) and bank — run through one `payment.transaction` using a per-currency DPO service map, so each country settles in its own currency (KES, TZS, UGX, ZMW, GHS, RWF, ZAR and others) with the correct DPO service type. The exact list is confirmed against your DPO account during scoping.
Every payment is verified server-side with DPO's `verifyToken` on the notification, never on the browser redirect. Transactions are idempotent on the DPO reference, so a retried webhook cannot post twice, and confirmed payments flow through Odoo's native state machine to post the `account.payment` and validate the invoice, with a reconciliation view matching DPO settlements to `account.move` lines.
Delivery includes a post-go-live support window for defect fixes and configuration changes. Because you receive the full git repository, your team (or ECOSIRE under a support agreement) can maintain and extend it. Version upgrades — for example carrying it to a newer Odoo release — are quoted separately as a follow-on engagement.
Yes. We store the DPO payment token against the customer and drive tokenized recurring charges from a scheduled `ir.cron` automated action, so subscription and recurring invoices settle without re-prompting the cardholder. This is confirmed as in-scope during the scoping call since it affects the build.
A build-to-order Odoo payment provider that connects checkout, invoicing and subscriptions to DPO Group so African merchants can take card, mobile-money and bank payments in local currencies. ECOSIRE scopes, builds, installs and supports it — it is not an instant apps.odoo.com download.