Payoneer – Payment Provider (payment_payoneer)
Accept online payments with the Payoneer Checkout API (Optile orchestration platform): customers pay invoices, website orders and other payment documents with the payment methods available in Payoneer Checkout — cards, e-wallets, bank transfers and more.
What it provides
Redirect checkout
The customer is redirected to the Payoneer checkout page (an auto-submitting form, with a fallback link when JavaScript is disabled) and pays there.
OAuth2 token, cached
The access token is fetched from the OAuth2 client-credentials endpoint and cached on the provider record until it expires — no repeated token round-trips.
Signed webhooks
Server-to-server notifications update the transaction. When a Webhook Secret is set,
the raw body is verified with an HMAC-SHA256 signature (X-Payoneer-Signature).
Post-processing cron
Pending transactions with a charge reference are re-fetched from the API until they
reach a final state — the standard payment cron drives it.
Refunds as payouts
Refunds are sent back to Payoneer as payouts (POST /charges/{charge_id}/payout);
partial refunds are supported.
Sandbox / live toggle
Point the provider at the sandbox (api.sandbox.oscato.com) or the live
environment (api.live.oscato.com) with a single checkbox.
The payment flow
The integration follows the Payoneer orchestration flow used by the official Payoneer “Payoneer Checkout” gateway.
List session
When a customer starts paying, Odoo creates a Payoneer list session
(POST /lists) with the customer, amount/currency, products and callback URLs.
Charge
Odoo creates the charge for the session (POST /lists/{list_id}/charge);
the response carries the customer-facing redirect URL.
Redirect
The customer is redirected to the Payoneer checkout page and completes the payment.
Status
The status is followed through the return URL (interactionCode),
the webhook and the post-processing cron.
Refund
Refunds go back to Payoneer as payouts; partial refunds are supported.
Status mapping
Payoneer status codes are mapped onto Odoo transaction states:
| Odoo state | Payoneer statuses |
|---|---|
| pending | pending, listed, in_progress, created |
| done | charged, settled, succeeded, completed |
| error | declined, failed, expired, cancelled, canceled, aborted |
On the return URL, interaction codes ABORT, TRY_OTHER_NETWORK,
TRY_OTHER_ACCOUNT, RETRY and VERIFY mark the
transaction as in error; PROCEED keeps it pending until the authoritative
charge status is fetched from the API.
Provider settings
Settings → Payment Providers → Payoneer (the provider record is created on install, one per company).
| Field | Description |
|---|---|
| Client Id / Client Secret | The OAuth2 client credentials issued by Payoneer. Required before the provider can be enabled. |
| Integration Id | The integration identifier issued by Payoneer for this merchant. |
| Merchant Id | The merchant id, when issued separately from the integration id. |
| Sandbox | Use the sandbox environment (https://api.sandbox.oscato.com/api) instead of live (https://api.live.oscato.com/api). |
| Webhook Secret | Optional HMAC-SHA256 secret for verifying the webhook notifications. |
oauth2/token endpoint and caches the returned access token. Payoneer does
not offer an OAuth “connect” flow, so the credentials are obtained manually from
the Payoneer account (Checkout → Tokens) — the form links to where to get them.payment_payoneer/const.py; adjust them there if your issued credentials point
at a different host.Installation
Unzip into your Odoo addons/ path, then install:
odoo-bin -i payment_payoneer
The module is Odoo 19-only (manifest version 19.0.1.0.0) and
depends on payment. On install it creates the Payoneer provider record per
company and sets the Payoneer logo on the provider form.
Routes
- Return
/payment/payoneer/return— the customer is redirected back withinteractionCode. - Webhook
/payment/payoneer/webhook— server-to-server notifications (optional HMAC-SHA256 signature).
Ready to take payments with Payoneer?
Download the module and let your customers pay the way they want to.