Skip to main content
Billplz & ToyyibPay FPX Gateway for Odoo (Malaysia) — A build-to-order Odoo payment provider that adds Malaysian FPX online-b — 1/1Illustrative preview

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.

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

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
Idempotent `_handle_notification` reconciliation so webhook and browser redirect can't double-confirm a transaction
Scheduled `ir.cron` re-poll of transactions stuck `pending` past a threshold (FPX settles asynchronously)
MYR-aware amounts: sen conversion and 2-decimal validation to prevent rounding drift between Odoo and the gateway
Refund support wired to the provider refund endpoint from the invoice/transaction, keeping `account.move` consistent
Sandbox/production environment toggle with encrypted API-key and collection/category-ID fields on the provider record
FPX bank-selection handled on the gateway's hosted page — no PCI card data touches your Odoo server
Security via `ir.model.access.csv` + record rules; provider secrets are never exposed in QWeb views or logs
Full gateway request/response audit logging for dispute and reconciliation trails
OWL/XML configuration views for keys, collection/category IDs, and environment plus buyer-facing payment status pages
Reachable over XML-RPC/JSON-RPC so external storefronts or middleware can drive Odoo transactions
Built and tested against your exact Odoo 17.0 / 18.0 / 19.0 and Community vs Enterprise edition

Built to order, done for you

No DIY setup — a working app, built, installed and supported by ECOSIRE.

  1. 1

    You order

    Start with a one-time build price. We scope it with you at kickoff.

  2. 2

    We build & install

    ECOSIRE builds, configures and installs it on your Odoo.

  3. 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

CriterionECOSIRECustom BuildCompetitorOdoo Native
FPX online banking supportNative FPX via Billplz/ToyyibPay across all Odoo pay flowsPossible but you design the whole provider from scratchVaries; often single-gateway and version-lockedNone — no FPX in Odoo core
Webhook + redirect reconciliationIdempotent dual-path handler + cron re-poll for pendingYou must build and test the state machine yourselfUsually redirect-only; async settlement often unhandledOnly generic providers; no FPX callback logic
Odoo version fit (17/18/19)Built and tested against your exact version + editionDepends on your team's Odoo depthOften lags a major version; upgrade gaps commonN/A
MYR / sen handlingSen conversion + 2-decimal validation, rounding-safeMust implement and verify amount mathInconsistent; rounding bugs reportedGeneric currency only, no gateway mapping
Refund supportProvider refund endpoint wired to account.moveExtra scope to build and reconcileOften manual or absentNo FPX refund path
Fit to your processScoped to your flows, delivered on staging with UATFully bespoke but slower and higher riskGeneric; you adapt to the moduleN/A
Support & handoverPost-go-live window + git repo + docs + trainingWhatever your contractor agrees toTicket queue; response variesCommunity forums only
Time to liveone working week from confirmed scope, build-to-orderOften months for a robust providerInstant install but integration/debug time afterNot 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.

Request a quote

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

Request a Quotation

Tell us about your Billplz & ToyyibPay FPX Gateway requirements and we'll send pricing, licensing options and a tailored proposal — usually within one business day.

No payment now. This sends a quote request to our team — we'll follow up by email with pricing and next steps.