Payment Provider: Ventipay
by Alejandro Rosales https://github.com/Arosales1616/venti-integration$ 284.01
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Sales (sale_management)
• Discuss (mail) • Invoicing (account) |
| Lines of code | 2298 |
| Technical Name |
payment_ventipay |
| License | OPL-1 |
| Website | https://github.com/Arosales1616/venti-integration |
| Versions | 17.0 18.0 19.0 |
Ventipay for Odoo — Chilean payments, native in your ERP
Accept payments in Chile through Ventipay directly from Odoo — or reconcile payments
from Shopify, WooCommerce and Jumpseller automatically.
HMAC-signed webhooks. Zero manual steps.
Acepta pagos en Chile con Ventipay desde Odoo — o concilia pagos de Shopify,
WooCommerce y Jumpseller automáticamente.
Webhooks firmados. Sin pasos manuales.
Three integration modes — one module
Pick the mode that matches how your business works.
You can change it any time from the provider settings — no reinstall needed.
Elige el modo que se ajusta a tu negocio.
Puedes cambiarlo en cualquier momento desde la configuración del proveedor.
Mode A — Odoo-native checkout
When to use: your customers pay invoices or sale orders
from inside Odoo — portal, eCommerce website or backend.
Odoo creates the Ventipay checkout, redirects the customer, receives the
checkout.paid webhook and reconciles the invoice automatically.
Cuándo usarlo: tus clientes pagan facturas o pedidos
desde el portal de Odoo, el sitio web eCommerce o el backend.
Mode B — External eCommerce
When to use: orders are created in Shopify, WooCommerce or Jumpseller
and paid with Ventipay there. Odoo only needs to reconcile the invoice.
When checkout.paid arrives, the module looks up the matching
sale.order by the external_id from the webhook and
creates an account.payment automatically.
Cuándo usarlo: los pedidos se crean en Shopify,
WooCommerce o Jumpseller y se pagan con Ventipay allí.
Odoo solo concilia la factura.
Hybrid — both flows active
When to use: you sell both from Odoo and from an external eCommerce
and both feed into the same Ventipay account.
The module tries Mode A first. If no payment.transaction exists
for the event, it falls back to Mode B automatically.
Cuándo usarlo: vendes desde Odoo y desde
un eCommerce externo y ambos usan la misma cuenta Ventipay.
Architecture at a glance / Arquitectura de un vistazo
In all three modes a single webhook endpoint
(/ventipay/webhook) receives every event.
The integration_mode setting on the provider
decides which reconciliation path is taken.
En los tres modos, un único endpoint (/ventipay/webhook)
recibe todos los eventos. El ajuste integration_mode
decide qué camino de conciliación se toma.
Mode A — Odoo-native checkout flow
Flujo Modo A — Checkout nativo de Odoo
- Customer opens an invoice or sale order in the Odoo portal or eCommerce checkout
and selects Ventipay.
El cliente abre una factura o pedido en el portal de Odoo y selecciona Ventipay. - Odoo calls
POST /v1/checkoutsand creates apayment.transactionlinked to the document.
Odoo llamaPOST /v1/checkoutsy crea unpayment.transaction. - The customer is redirected to
pay.ventipay.comto enter their card (PCI-DSS handled entirely by Ventipay).
El cliente es redirigido apay.ventipay.coma ingresar su tarjeta. - Ventipay sends the signed
checkout.paidwebhook to Odoo.
Ventipay envía el webhookcheckout.paidfirmado a Odoo. - Odoo confirms the
payment.transaction, creates anaccount.paymentand marks the invoice as Paid.
Odoo confirma la transacción, crea el pago y marca la factura como Pagada.
Customer selects Ventipay in the Odoo payment form.
El cliente selecciona Ventipay en el formulario de pago de Odoo.
Secure Ventipay checkout page — card data never touches Odoo.
Página segura de Ventipay — los datos de tarjeta nunca pasan por Odoo.
Mode B — External eCommerce sync
Flujo Modo B — Sincronización con eCommerce externo
- Customer places an order on Shopify / WooCommerce / Jumpseller
and pays with Ventipay directly on that platform.
El cliente realiza un pedido en Shopify / WooCommerce / Jumpseller y paga con Ventipay en esa plataforma. - The eCommerce connector creates the Ventipay checkout with
external_id = <order_id>.
El conector eCommerce crea el checkout en Ventipay conexternal_id = <order_id>. - Ventipay sends the
checkout.paidwebhook to Odoo with thatexternal_id.
Ventipay envía el webhookcheckout.paida Odoo con eseexternal_id. - Odoo searches for the matching
sale.orderusing the configured connector field (see table below). Nopayment.transactionis needed beforehand.
Odoo busca elsale.ordercoincidente usando el campo configurado. No se necesitapayment.transactionprevio. - Odoo creates an
account.paymentand reconciles the linked invoice automatically.
Odoo crea unaccount.paymenty concilia la factura vinculada.
Supported connectors / Conectores soportados
| Platform | Field matched on sale.order |
|---|---|
| Shopify | client_order_ref |
| WooCommerce | client_order_ref |
| Jumpseller | origin |
| VTEX | client_order_ref |
| Generic | name or client_order_ref or origin |
The field mapping is pre-filled when you select a connector and can be customised
for any platform.
El campo se rellena automáticamente al elegir el conector y puede
personalizarse para cualquier plataforma.
Hybrid — both flows active simultaneously
Híbrido — ambos flujos activos simultáneamente
For businesses that process orders both inside Odoo and through an external
eCommerce store feeding the same Ventipay account:
Para empresas que procesan pedidos tanto desde Odoo como desde un eCommerce externo
usando la misma cuenta Ventipay:
- When
checkout.paidarrives, Odoo first tries Mode A — looks for a matchingpayment.transaction.
Al recibircheckout.paid, Odoo intenta primero el Modo A. - If a transaction is found, the standard Odoo reconciliation runs (Mode A).
Si encuentra una transacción, ejecuta la conciliación estándar (Modo A). - If no transaction exists (order came from the external store),
Odoo automatically falls back to Mode B and reconciles by
external_id.
Si no existe transacción (pedido del eCommerce externo), Odoo recae en Modo B y concilia porexternal_id.
Webhook event log & retry / Log de eventos y reintento
Every incoming webhook is stored in Ventipay → Events with its
raw payload, reconciliation mode and result. Events that could not be matched
(e.g., external_id not yet synced to Odoo) are flagged as
Pending and show a Retry Reconciliation button
to process them once the order arrives.
Cada webhook entrante se guarda en Ventipay → Eventos
con su payload, modo de conciliación y resultado.
Los eventos sin coincidencia quedan como Pendiente
con un botón Reintentar conciliación
para procesarlos cuando llegue el pedido.
Invoice reconciled automatically / Factura conciliada automáticamente
Whether the payment originated in Odoo (Mode A) or in an external eCommerce store
(Mode B), the invoice ends up Paid in Odoo with a linked
account.payment — no manual reconciliation needed.
Sin importar si el pago vino de Odoo (Modo A) o de un eCommerce externo (Modo B),
la factura queda Pagada en Odoo con un account.payment
vinculado — sin conciliación manual.
Handled webhook events / Eventos webhook procesados
| Event | Action in Odoo / Acción en Odoo |
|---|---|
checkout.paid |
Mode A: confirms payment.transaction + reconciles invoiceMode B: finds sale.order by external_id,
creates account.payment + reconciles invoice
|
checkout.canceled |
Cancels the payment.transaction / Cancela la transacción |
checkout.refunded |
Marks checkout as refunded / Marca el checkout como reembolsado |
charge.succeeded |
Confirms payment.transaction (direct charge) / Confirma pago directo |
dispute.created |
Creates ventipay.dispute + urgent activity for managers |
subscription.activated |
Activates ventipay.subscription / Activa la suscripción |
invoice.paid |
Syncs subscription invoice / Sincroniza factura de suscripción |
setup_intent.succeeded |
Creates payment.token (saved card) / Guarda tarjeta del cliente |
All events are stored in the event log regardless of outcome.
Todos los eventos se guardan en el log independientemente del resultado.
Everything included / Todo incluido
- Native Payment Provider — standard Odoo flow, no breakage
- Mode A / B / Hybrid — configurable per-provider, no reinstall
- HMAC-SHA256 signature validation on every webhook
- Automatic invoice reconciliation in all three modes
- Retry Reconciliation button on pending webhook events
- Test / Live mode — toggle without code changes
- Partial and full refunds from the checkout record in Odoo
- Webhook event log — every event stored with payload and status
- Dispute management — urgent activity on
dispute.created - CLP and CLF — integer amounts, no rounding issues
- Compatible with l10n_cl — Chilean localization
- Spanish (Chile) i18n — full
es_CLtranslation included
Configuration in 2 minutes / Configuración en 2 minutos
Enter your API Key and Webhook Secret,
select the integration mode, click Test Connection — done.
Ingresa tu API Key y Webhook Secret, selecciona el modo de integración,
haz clic en Test Connection — listo.
Installation & setup / Instalación y configuración
-
Install payment_ventipay from the App Store.
Instala payment_ventipay desde la tienda de apps. -
Go to Accounting → Configuration → Payment Providers → Ventipay.
Ve a Contabilidad → Configuración → Proveedores de pago → Ventipay. -
Enter your API Key (Test) and Webhook Secret
from the Ventipay developer dashboard.
Ingresa tu API Key (Test) y Webhook Secret desde el panel de Ventipay. -
Select the Integration Mode: Mode A (Odoo portal / eCommerce),
Mode B (external Shopify / WooCommerce / Jumpseller), or Hybrid.
Selecciona el Modo de integración: Modo A (portal Odoo / eCommerce), Modo B (Shopify / WooCommerce / Jumpseller externo) o Híbrido. -
Click Test Connection to verify the API key.
Haz clic en Test Connection para verificar la API Key. -
Set the Webhook URL in the Ventipay dashboard:
https://your-odoo.com/ventipay/webhook
Configura la URL del webhook en el panel de Ventipay. -
When ready for production, enter the API Key (Live)
and set the provider state to Enabled.
Para producción, ingresa la API Key (Live) y cambia el estado a Activado.
Compatibility / Compatibilidad
Odoo 17.0 — Community and Enterprise
No extra Python packages required
Compatible with l10n_cl — CLP, CLF, RUT
Works with website eCommerce, customer invoice portal and backend sale orders
Sin paquetes Python adicionales. Compatible con l10n_cl (CLP, CLF, RUT).
Funciona en eCommerce, portal de facturas y pedidos de venta desde el backend.
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Sales (sale_management)
• Discuss (mail) • Invoicing (account) |
| Lines of code | 2298 |
| Technical Name |
payment_ventipay |
| License | OPL-1 |
| Website | https://github.com/Arosales1616/venti-integration |
Odoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module