- Home
- Apps
- SaaS Tools
- Billplz & ToyyibPay FPX Gateway for Odoo (Malaysia)
Illustrative previewA build-to-order Odoo payment provider that adds Malaysian FPX online-banking and card checkout through Billplz
and ToyyibPay, with signed webhook plus redirect reconciliation, MYR localization, and refund support.
ECOSIRE scopes, builds, installs, and supports it for you.
What is Billplz & ToyyibPay FPX Gateway for Odoo (Malaysia)?
A build-to-order Odoo payment provider that adds Malaysian FPX online-banking and card checkout through Billplz and ToyyibPay, with signed webhook plus redirect reconciliation, MYR localization, and refund support. ECOSIRE scopes, builds, installs, and supports it for you. 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
Malaysian SMEs selling on Odoo eCommerce, the customer portal, or via sales-order payment links keep losing checkouts because Odoo core ships no FPX option — the online banking rail that most Malaysian buyers actually trust. The stock payment module only carries generic providers (Stripe, PayPal, wire transfer, and a demo acquirer), none of which speak to Maybank2u, CIMB Clicks, or the other ~40 FPX participating banks. Buyers bounce at the last step, and finance ends up chasing manual bank-in slips and matching them against sales orders by hand. This is exactly where native Odoo runs out of road: there is no payment.provider record type for FPX, no state machine that understands Billplz bill callbacks or ToyyibPay category/bill flows, and no MYR-aware reconciliation.
We build a proper Odoo payment provider add-on that plugs into the standard payment framework so it behaves like a first-class acquirer everywhere Odoo already renders a pay button — website checkout, /my portal invoices, subscription renewals, and sales-order payment links. Technically, the module defines a new provider in payment.provider (code = 'billplz_toyyibpay'), extends payment.transaction with the compute/state logic for both gateways, and stores API keys, collection/category IDs, and the sandbox/production toggle as encrypted provider fields. On checkout it creates a Billplz bill (or ToyyibPay bill under a configured category) via the gateway REST API, redirects the buyer to the hosted FPX bank-selection page, and then reconciles the result through two independent paths: the server-to-server signed webhook (X-Signature / HMAC verification against your secret) and the browser redirect return. Both funnel into one idempotent _handle_notification handler so a transaction is never double-confirmed and a dropped redirect still settles from the webhook. Access is locked down with ir.model.access.csv plus record rules, provider secrets never render in QWeb, and every gateway call is logged for audit.
Beyond the happy path, we build the parts that make it production-grade in Malaysia: MYR currency and 2-decimal amount handling (gateways transact in sen, so amounts are converted and validated to avoid rounding drift), FPX-specific failure/pending states mapped to Odoo's pending/done/cancel/error transaction states, and refund support wired to the provider's refund endpoint from the invoice/transaction so accounting stays consistent. We add configuration views (OWL/XML) for keys and environment, an automated action or scheduled ir.cron to re-poll any transaction left pending past a threshold (FPX can settle asynchronously), and clean confirmation email/receipt behavior. Where you need it, transactions and provider status are reachable over the XML-RPC/JSON-RPC API so an external storefront or middleware can drive Odoo as the system of record. It targets Odoo Community and Enterprise on 17.0, 18.0, and 19.0 — the payment framework differs across those majors, so we pin and test against your exact version.
Because this is build-to-order, nothing is a black-box download. We start with a short scoping call to confirm which gateway(s) you use (Billplz, ToyyibPay, or both), your Odoo version and edition, sandbox credentials, and which sales flows must accept FPX. We then build against your requirements, deliver on a staging database for UAT, and go live only after you sign off — typical delivery is one working week from confirmed scope. You receive the full installable source, a git repository handover, and a post-go-live support window so the reconciliation keeps working after real money starts flowing.
What you get
- Installable Odoo module source code built for your exact version (17.0 / 18.0 / 19.0) and edition
- Installation and configuration on your environment, including sandbox-to-production credential setup for Billplz/ToyyibPay
- Technical documentation: provider fields, webhook endpoint, reconciliation flow, and cron behavior
- End-user guide plus a live training session for finance/ops on payments, pending states, and refunds
- UAT on a staging database with a documented test plan and a rollback plan before go-live
- Post-go-live support window for defect fixes and reconciliation issues after real transactions start
- Git repository handover with full commit history and README
- FPX/gateway configuration handbook covering test bank credentials and go-live checklist
Who this is for
Malaysian eCommerce SME owner
Runs an Odoo website store and is losing checkouts because buyers can't pay by FPX online banking. Needs Maybank2u/CIMB Clicks-grade coverage at checkout without switching platforms.
Finance / accounts manager
Tired of matching manual bank-in slips to sales orders. Wants FPX payments auto-reconciled into Odoo, refunds handled in-system, and a clean audit trail per transaction.
Odoo administrator / IT lead
Owns the Odoo instance and needs a provider that installs cleanly, respects access rules, survives version upgrades, and exposes transactions over the JSON-RPC/XML-RPC API for their stack.
Subscription / services business
Bills recurring MYR invoices through the customer portal and needs FPX (plus cards) accepted on portal invoice payment links with reliable webhook settlement.
How Billplz & ToyyibPay FPX Gateway for Odoo (Malaysia) Compares
| Criterion | ECOSIRE | Custom Build | Competitor | Odoo Native |
|---|---|---|---|---|
| FPX online banking support | Native FPX via Billplz/ToyyibPay across all Odoo pay flows | Possible but you design the whole provider from scratch | Varies; often single-gateway and version-locked | None — no FPX in Odoo core |
| Webhook + redirect reconciliation | Idempotent dual-path handler + cron re-poll for pending | You must build and test the state machine yourself | Usually redirect-only; async settlement often unhandled | Only generic providers; no FPX callback logic |
| Odoo version fit (17/18/19) | Built and tested against your exact version + edition | Depends on your team's Odoo depth | Often lags a major version; upgrade gaps common | N/A |
| MYR / sen handling | Sen conversion + 2-decimal validation, rounding-safe | Must implement and verify amount math | Inconsistent; rounding bugs reported | Generic currency only, no gateway mapping |
| Refund support | Provider refund endpoint wired to account.move | Extra scope to build and reconcile | Often manual or absent | No FPX refund path |
| Fit to your process | Scoped to your flows, delivered on staging with UAT | Fully bespoke but slower and higher risk | Generic; you adapt to the module | N/A |
| Support & handover | Post-go-live window + git repo + docs + training | Whatever your contractor agrees to | Ticket queue; response varies | Community forums only |
| Time to live | one working week from confirmed scope, build-to-order | Often months for a robust provider | Instant install but integration/debug time after | Not applicable |
Frequently Asked Questions about Billplz & ToyyibPay FPX Gateway
How long until it's live?
This is build-to-order, not an instant download. After a scoping call to confirm your gateway(s), Odoo version, and sales flows, typical delivery is one working week from confirmed scope. We build against your requirements, deliver on a staging database for UAT, and go live only after you sign off.
Do you support both Billplz and ToyyibPay, or just one?
Both. You can enable Billplz, ToyyibPay, or both as separate `payment.provider` records. Billplz uses its bill/collection API and ToyyibPay uses its category/bill API; the module normalizes both into Odoo's standard payment transaction flow.
Which Odoo versions and editions does it work with?
Odoo 17.0, 18.0, and 19.0, on Community or Enterprise. The `payment` framework changes between majors, so we pin and test against your exact version and edition rather than shipping a one-size build.
What happens if the buyer closes the browser before the redirect completes?
The transaction still settles. We reconcile from two independent paths — the signed server-to-server webhook and the browser redirect — into one idempotent handler, plus a scheduled `ir.cron` re-polls any transaction left pending. A dropped redirect does not lose the payment.
Can it issue refunds?
Yes. Refunds are wired to the gateway's refund endpoint and triggered from the invoice/transaction in Odoo, so the refund is reflected in your `account.move` records and the audit log stays consistent.
What do I get for support and updates after go-live?
You get a post-go-live support window for defect fixes and reconciliation issues once real transactions start, plus a full git repository handover so you own the source. Version upgrades or new features beyond the delivered scope are quoted separately.
Is card data or PCI scope on my Odoo server?
No. FPX bank selection and any card entry happen on the gateway's hosted page. Your Odoo server only exchanges API calls and verified webhooks, so no raw card data touches your infrastructure.
Related Modules

Belgium Peppol E-Invoicing
Send structured B2B invoices over the Peppol network for Belgium directly from Odoo, with tax mapping driven by your own master data and a full rejection-and-correction workflow. ECOSIRE builds, installs and supports it for your exact Odoo version after a scoping call.

Biometric Attendance Push Bridge for Odoo
A build-to-order Odoo module that receives attendance punches and user records pushed directly from biometric time clocks and turns them into clean hr.attendance data. ECOSIRE scopes, builds, installs, and supports it for your instance.

BPMN Workflow Designer
A build-to-order visual BPMN 2.0 workflow builder for Odoo that lets your team design multi-level approvals and conditional routing without writing XML or Python. ECOSIRE scopes, builds, installs, and supports it on your Odoo 17, 18, or 19 database.
Billplz & ToyyibPay FPX Gateway
A build-to-order Odoo payment provider that adds Malaysian FPX online-banking and card checkout through Billplz and ToyyibPay, with signed webhook plus redirect reconciliation, MYR localization, and refund support. ECOSIRE scopes, builds, installs, and supports it for you.
- New `payment.provider` record with `code='billplz_toyyibpay'` so FPX appears natively in website checkout, `/my` portal, and sales-order payment links
- Dual-gateway support — Billplz (bill API) and ToyyibPay (category/bill API) selectable per provider record, or run both side by side
- Extends `payment.transaction` with a gateway-specific state machine mapping FPX outcomes to Odoo `draft`/`pending`/`done`/`cancel`/`error` states
- Signed server-to-server webhook: HMAC/X-Signature verification against your gateway secret before any transaction state change
