> ## Documentation Index
> Fetch the complete documentation index at: https://docs.useduro.com/llms.txt
> Use this file to discover all available pages before exploring further.

# E-commerce Integrations

> Installable Nomba (and Duro) payment plugins for WooCommerce, PrestaShop, and Joomla/VirtueMart, with a shared verification-first lifecycle.

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

<CardGroup cols={3}>
  <Card title="WooCommerce" icon="wordpress" href="/integrations/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).
  </Card>

  <Card title="PrestaShop" icon="bag-shopping" href="/integrations/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.
  </Card>

  <Card title="Joomla / VirtueMart" icon="joomla" href="/integrations/joomla">
    VirtueMart 3.x / 4.x payment plugin (Joomla 3.10 / 4 / 5). Redirect checkout, signed + API-reverified notification, refund on order-status change.
  </Card>
</CardGroup>

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](#refunds) for why they intentionally do not refund.

```
integrations/
  woocommerce/   WordPress / WooCommerce payment gateway
  prestashop/    PrestaShop 1.7/8.x payment module
  joomla/        Joomla / VirtueMart payment plugin
  tools/         mock Nomba server, webhook signer, sandbox smoke test,
                 demo stores, build script (never shipped in plugin zips)
```

## 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](/integrations/architecture) page walks the full lifecycle, the nine-field webhook signature, the Nomba API surface, and the tooling.

<Note>
  **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.
</Note>

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

| Plugin      | Tests | Scope                                                                                                      |
| ----------- | ----- | ---------------------------------------------------------------------------------------------------------- |
| WooCommerce | 51    | Gateway class (`process_payment`, return verify, refund) plus protocol (client, signature, webhook)        |
| PrestaShop  | 19    | Protocol classes (client, signature); module and front controllers verified in a real PrestaShop 8.1 store |
| Joomla      | 18    | Protocol classes (client, signature); plugin class runtime-verified against the VirtueMart API             |

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`):

```bash theme={null}
bash tools/build.sh
```

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](https://developer.nomba.com/).
