Skip to main content
Duro ships production-grade payment plugins that add Nomba as a checkout method on the three e-commerce platforms merchants actually run. Each platform folder under integrations/ is a self-contained, installable plugin. Source of truth: integrations/README.md and each plugin’s own README.

What ships

WooCommerce

WordPress / WooCommerce payment gateway. HPOS compatible, native admin refunds, unit tested, verified against a real WordPress store and the real Nomba sandbox (live card payment and refund).

PrestaShop

PrestaShop 1.7 / 8.x payment module. Custom order state for held payments, admin refund panel, verified end to end against a real PrestaShop 8.1 store.

Joomla / VirtueMart

VirtueMart 3.x / 4.x payment plugin (Joomla 3.10 / 4 / 5). Redirect checkout, signed + API-reverified notification, refund on order-status change.
Every folder also carries a parallel Duro processor module (a Duro hosted-checkout gateway alongside the Nomba one) with its own tests. Those are one-off Duro checkout sessions (kind: one_time); see Refunds for why they intentionally do not refund.

The shared contract

All three plugins implement the identical lifecycle: install, configure credentials, start a hosted checkout, verify on the shopper’s return, confirm by a signed webhook that re-verifies the transaction against the Nomba API before granting value, and refund from the platform admin. They also support depositing payments into a Nomba sub-account. The Shared architecture page walks the full lifecycle, the nine-field webhook signature, the Nomba API surface, and the tooling.
Verification-first by design. A signed webhook is never trusted for the money. After the signature and freshness checks pass, each plugin calls GET {prefix}/transaction and cross-checks the verified amount and currency, and only then grants value. The Nomba API response is the source of truth, not the webhook payload.

Validated end to end

The shared Nomba protocol was validated against the real Nomba sandbox: a live token, checkout, card payment, verification, and refund all passed (tools/sandbox-smoke/). On top of that:
  • WooCommerce was exercised against a real WordPress store and the real Nomba sandbox, including a live card payment and refund.
  • PrestaShop was verified end to end against a real PrestaShop 8.1 store (checkout, all webhook cases, and admin refund).
  • Joomla/VirtueMart protocol classes are unit tested; the plugin class is verified by lint and a static review against the VirtueMart source APIs (VirtueMart has no CLI installer for a scripted demo). See joomla/RUNTIME_TEST.md for the manual runtime checklist.

Test coverage

88 unit tests cover the Nomba protocol classes and the WooCommerce gateway, run under PHPUnit against a stubbed HTTP layer (tools/tests/). The count is for the Nomba plugins only; the parallel Duro modules ship their own additional tests. WooCommerce and PrestaShop share one PHPUnit config (phpunit.xml); Joomla runs isolated (phpunit-joomla.xml) because its classes share global names with PrestaShop’s.

Refunds

Nomba supports both full and partial refunds (POST {prefix}/refund, optional amount for partials), and every Nomba plugin exposes it: WooCommerce from the order screen, PrestaShop from the admin refund panel, Joomla from the order-status change to the configured “Refunded” status. The parallel Duro modules intentionally do not support refunds: a one-off Duro checkout session (kind: one_time) creates no refundable invoice, so there is nothing for the Duro API to refund against. For any flow that needs refunds, use the Nomba gateway.

Packaging

Installable zips are built with one script (integrations/README.md):
Zips land in dist/: nomba-woocommerce.zip, nomba-prestashop.zip, nomba-vmpayment.zip, plus the parallel Duro packages (nomba-duro-prestashop.zip, nomba-duro-vmpayment.zip). Tests and tooling are never included in a plugin zip. Per-platform install steps live on each plugin page. Docs for the underlying provider: developer.nomba.com.