Blog
Connecting Odoo eCommerce to Indonesian Payment Gateways like Midtrans and Xendit
How to connect Odoo eCommerce to Indonesian payment gateways — Midtrans and Xendit — for QRIS, e-wallets, virtual accounts, and a checkout local customers trust.
- mid
- odoo
An online store in Indonesia lives or dies at the payment step. If a customer cannot pay the way they expect — QRIS, an e-wallet, a virtual account, their usual bank — they abandon the cart. Odoo’s built-in payment options lean international, so connecting a local gateway like Midtrans or Xendit is essential, not optional. Here is how to think about it and set it up.
Why a local gateway is non-negotiable
Indonesian online shoppers pay differently from Western ones. Cards are a minority; the defaults are QRIS, e-wallets (GoPay, OVO, DANA, ShopeePay), virtual accounts, and bank transfer. A checkout offering only international card payment will convert poorly. Midtrans and Xendit are the two dominant local aggregators, and either gives your customers the payment methods they actually use, in one integration.
Midtrans vs Xendit, briefly
Both are solid. The honest summary:
- Midtrans is widely used, well-known to Indonesian merchants, and covers the full local method spread. Strong brand familiarity with customers.
- Xendit is developer-friendly, strong on virtual accounts and disbursements, and popular with newer digital businesses.
For most Odoo stores, either works well. Choose based on your existing banking relationship, their fee structure for your transaction mix, and which one your finance team or developer is comfortable with. This is not a decision worth agonising over — both deliver the local methods you need.
How the connection works
Connecting Odoo to one of these gateways means installing or configuring a payment provider integration so that, at checkout, the customer is handed to the gateway to pay by their chosen method, and the result flows back to Odoo to confirm the order. Odoo has payment-provider framework support, and Midtrans/Xendit integrations exist via modules or custom connectors. The setup involves your gateway account credentials (API keys), configuring which payment methods to offer, and mapping the gateway’s payment confirmation back to the Odoo order.
Get the order-confirmation flow right
This is the part that matters most and breaks most often. When a customer pays, the gateway notifies Odoo, and Odoo must reliably confirm the order, reserve stock, and trigger fulfilment. Configure and test this callback carefully:
- A successful payment must confirm the order and not leave it stuck in draft.
- A failed or abandoned payment must not confirm the order or reserve stock.
- A pending payment (common with virtual accounts and bank transfer, where the customer pays later) must hold the order correctly until payment lands, then confirm it.
That last case is very Indonesian — virtual-account and transfer payments are not instant, so your flow must handle “ordered, awaiting payment, then paid” gracefully.
Reconcile payments to your books
Because Odoo eCommerce is integrated, a confirmed paid order should post to Accounting. Reconcile the gateway’s settlements (the money Midtrans or Xendit actually deposits to your bank, net of fees) against the orders in Odoo. Set this up so gateway fees are accounted for and your books match what the gateway paid out. Skipping this leaves a quiet gap between recorded revenue and actual cash.
Test every method before launch
Before going live, run a real transaction through each payment method you offer — a QRIS scan, an e-wallet, a virtual account, a card. Confirm each one completes, confirms the order in Odoo, and reconciles. Discovering that e-wallet payments do not confirm orders during a real sale is the worst time to find out.
Getting the local payment gateway right is one of the highest-impact things you can do for an Indonesian Odoo store — it directly determines how many carts turn into paid orders. If you want help connecting Midtrans or Xendit and getting the order-confirmation flow solid, we are glad to work through it with you in a free, one-hour conversation.