Saltar al contenido principal

Integración de Hosted Checkout

Hosted Checkout es una página de pago lista para usar alojada por Volet.com.

Para ver la página que verán tus clientes, abre la página de Hosted Checkout para desarrolladores.

Tu aplicación crea una solicitud de pago y redirige al cliente a Hosted Checkout. El cliente completa el pago, Volet.com envía una notificación de estado a tu servidor y luego redirige al cliente de vuelta a tu sitio web.

Hosted Checkout admite:

Antes de integrar, crea y configura una pasarela Hosted Checkout en tu cuenta. Consulta Crear una pasarela de pago.

Flujo de pago​

  1. El cliente hace un pedido en tu sitio web.
  2. Tu sitio genera una solicitud de pago y muestra un botón o enlace de pago.
  3. El cliente hace clic en Pagar y se lo redirige a Hosted Checkout.
  4. El cliente completa el pago.
  5. Volet.com envía una notificación de estado del pago a tu Status URL.
  6. Tu sistema actualiza el estado del pedido.
  7. Hosted Checkout muestra la página con el resultado del pago.
  8. Luego el cliente puede hacer clic en Continuar y se lo redirige a tu Success URL o Failed URL.
Merchant website
│
▼
Hosted Checkout
│
▼
Payment
│
▼
Status URL
│
▼
Merchant backend
│
▼
Customer redirect

Si el pago es exitoso, la página de resultado incluye el ID de la transacción y la información del pago. Si el pago falla o se cancela, muestra el mensaje de error o de cancelación correspondiente.

La Success URL y la Failed URL se pueden configurar en los ajustes de Hosted Checkout o enviar de forma dinámica en la solicitud de pago.

nota

Para actualizar el estado de los pedidos, básate siempre en las notificaciones a la Status URL. No dependas solo de las redirecciones del navegador.

La Success URL y la Failed URL no deben usarse para determinar el estado final del pago.

Inicio rápido con Hosted Checkout​

Paso 1. Crear la solicitud de pago​

Endpoint de Hosted Checkout​

https://account.volet.com/api/public/payment-gateway

Parámetros obligatorios​

Para crear un pago, envía por POST un formulario HTML al endpoint anterior. La solicitud de pago debe incluir estos parámetros obligatorios:

ParámetroDescripción
ac_account_emailEmail de tu cuenta de Volet.com
ac_sci_nameNombre del Hosted Checkout
ac_amountMonto del pago
ac_currencyMoneda del pago (por ejemplo, USD, EUR)
ac_order_idIdentificador único de tu pedido
ac_signFirma digital

Para ver la lista completa de parámetros admitidos, consulta Parámetros de la solicitud de pago.

nota

Cada solicitud de pago debe usar un ac_order_id único.

No reutilices identificadores de pedido para pagos distintos.

Firma de la solicitud​

Genera el parámetro ac_sign calculando el hash SHA-256 de la siguiente cadena:

ac_account_email:ac_sci_name:ac_amount:ac_currency:secret:ac_order_id

donde secret es la contraseña que definiste al crear el Hosted Checkout.

Cadena de ejemplo:

[email protected]:Store:100.00:USD:password:123

Hash SHA-256:

eb9e7f491df701fe7d71c74551ae9e4226dfbed7e3a9cc4916e242d3c09f718e

Envía el hash obtenido en el parámetro ac_sign.

Enviar la solicitud de pago​

Envía el formulario HTML al endpoint de Hosted Checkout con el método POST.

Ejemplo de solicitud de pago​

<form method="POST" action="https://account.volet.com/api/public/payment-gateway">
<input type="hidden" name="ac_account_email" value="[email protected]">
<input type="hidden" name="ac_sci_name" value="Store">
<input type="hidden" name="ac_amount" value="100.00">
<input type="hidden" name="ac_currency" value="USD">
<input type="hidden" name="ac_order_id" value="123">
<input type="hidden" name="ac_sign" value="eb9e7f491df701fe7d71c74551ae9e4226dfbed7e3a9cc4916e242d3c09f718e">
<button type="submit">VoletPay</button>
</form>

Paso 2. Gestionar las notificaciones de pago​

Cuando cambia el estado del pago, Volet.com envía una notificación a tu Status URL.

La notificación se envía por GET o POST, según la configuración de tu Hosted Checkout.

La notificación contiene los siguientes parámetros:

ParámetroDescripción
ac_transferID de la transacción en Volet.com
ac_transaction_statusEstado del pago
ac_order_idIdentificador de tu pedido
ac_amountMonto original del pago
ac_merchant_amountMonto acreditado en tu cuenta
ac_merchant_currencyMoneda de liquidación
ac_start_dateFecha y hora de la transacción
ac_sci_nameNombre del Hosted Checkout
ac_src_walletBilletera del cliente
ac_dest_walletBilletera del comercio
ac_buyer_emailEmail del cliente (si está disponible)
ac_hashHash de la firma de la notificación

Para ver la lista completa de parámetros disponibles, consulta Parámetros de la notificación de pago.

Antes de actualizar el estado del pedido, verifica la firma ac_hash para confirmar que la notificación proviene de Volet.com.

aviso

No marques los pedidos como pagados en función de las redirecciones del cliente.

Espera siempre una notificación válida a la Status URL y verifica la firma ac_hash antes de actualizar el estado del pedido.

Ejemplo de notificación enviada a tu Status URL:

<form method="POST" action="https://merchant.example.com/status">
<input type="hidden" name="ac_transfer" value="235f9d0b-b48f-462c-9949-621c4930490c">
<input type="hidden" name="ac_transaction_status" value="COMPLETED">
<input type="hidden" name="ac_order_id" value="123">
<input type="hidden" name="ac_amount" value="100.00">
<input type="hidden" name="ac_merchant_amount" value="100.00">
<input type="hidden" name="ac_merchant_currency" value="USD">
<input type="hidden" name="ac_start_date" value="2026-06-23 12:30:00">
<input type="hidden" name="ac_sci_name" value="Store">
<input type="hidden" name="ac_src_wallet" value="USD123456789012">
<input type="hidden" name="ac_dest_wallet" value="USD210987654321">
<input type="hidden" name="ac_buyer_email" value="[email protected]">
<input type="hidden" name="ac_hash" value="4ceab247ca917e0142b1a99015beaed9310cd6a85ab3bacf08ba44d5ac03590b">
</form>

Verificar la firma de la notificación​

Para verificar la notificación, calcula el hash SHA-256 con los valores siguientes y compáralo con el ac_hash recibido.

La cadena de la firma se arma en este orden:

ac_transfer:ac_start_date:ac_sci_name:ac_src_wallet:ac_dest_wallet:ac_order_id:ac_amount:ac_merchant_currency:password

donde password es la contraseña de Hosted Checkout configurada para la pasarela.

Cadena de ejemplo:

235f9d0b-b48f-462c-9949-621c4930490c:2026-06-23 12:30:00:Store:USD123456789012:USD210987654321:123:100.00:USD:password

Calcula el hash SHA-256 de esta cadena:

4ceab247ca917e0142b1a99015beaed9310cd6a85ab3bacf08ba44d5ac03590b

Compara el hash calculado con el ac_hash recibido. Los valores deben coincidir antes de actualizar el estado del pedido.

Una vez verificada la firma, actualiza el pedido correspondiente en tu sistema con el estado de pago recibido.

Paso 3. Probar la integración​

Antes de aceptar pagos reales, verifica:

  • La redirección del cliente a Hosted Checkout.
  • La finalización de un pago exitoso.
  • La entrega de las notificaciones a la Status URL.
  • La validación de la firma de las notificaciones.
  • La actualización del estado de los pedidos.
  • Las redirecciones a Success URL y Failed URL.
  • La gestión de los pagos fallidos.

Direcciones IP del servidor de notificaciones​

Si tu infraestructura usa listas de IP permitidas o reglas de firewall, permite las solicitudes entrantes de los siguientes servidores de notificaciones de Volet.com:

  • 13.61.247.159

Configuración avanzada​

Las secciones siguientes describen funciones opcionales y escenarios de integración avanzados.

Preseleccionar el método de pago​

De forma predeterminada, Hosted Checkout muestra una página para elegir el método de pago.

Puedes preseleccionar un método de pago en la solicitud con el parámetro ac_ps. Si lo indicas, Hosted Checkout abre directamente la pantalla de pago correspondiente y omite el paso de elección del método.

Agrega los siguientes campos a los parámetros de tu solicitud de pago:

  1. Abre directamente la página de inicio de sesión de la cuenta de Volet.com:
<input type="hidden" name="ac_ps" value="VOLET">
  1. Abre directamente la página de pago con USDT en Tron:
<input type="hidden" name="ac_ps" value="USDTETHER">
<input type="hidden" name="ac_ps_protocol" value="TRON">
  1. Abre directamente la página de pago con Bitcoin:
<input type="hidden" name="ac_ps" value="BITCOIN">

Es útil cuando el cliente ya eligió un método de pago en tu sitio antes de ser redirigido a Hosted Checkout.

Idioma​

Usa el parámetro ac_client_lang para indicar el idioma de la interfaz de Hosted Checkout.

Ejemplo:

<input type="hidden" name="ac_client_lang" value="en">

Si no se indica el idioma, Hosted Checkout usa el idioma predeterminado disponible para el cliente.

Campos personalizados​

Puedes incluir hasta 10 campos personalizados en una solicitud de pago.

Volet.com no procesa estos campos y los devuelve sin cambios en las notificaciones a la Status URL y en las redirecciones del cliente.

Usos habituales:

  • ID del cliente
  • ID de la suscripción
  • Número de factura interno
  • Comentario

Ejemplo:

<input type="hidden" name="customer_id" value="12345">
<input type="hidden" name="subscription_id" value="sub_987">
<input type="hidden" name="invoice_no" value="INV-2026-001">
<input type="hidden" name="comment" value="Premium plan">

Subcomercios​

Usa el parámetro ac_submerchant_url para indicar el sitio web del comercio en cuyo nombre se procesa el pago.

Ejemplo:

<input type="hidden" name="ac_submerchant_url" value="https://merchant.example.com">

Esta opción está pensada para agregadores de pagos, marketplaces y plataformas que procesan pagos para otros comercios.

nota

Todos los requisitos de cumplimiento, actividades prohibidas y verificación que se aplican a los comercios también se aplican a los subcomercios.

Reemplazar las URL​

Los siguientes parámetros se pueden indicar directamente en la solicitud de pago:

  • ac_success_url
  • ac_success_url_method
  • ac_fail_url
  • ac_fail_url_method
  • ac_status_url
  • ac_status_url_method

Ejemplo:

<input type="hidden" name="ac_success_url" value="https://merchant.example.com/payment-success">
<input type="hidden" name="ac_success_url_method" value="GET">
<input type="hidden" name="ac_fail_url" value="https://merchant.example.com/payment-failed">
<input type="hidden" name="ac_fail_url_method" value="GET">
<input type="hidden" name="ac_status_url" value="https://merchant.example.com/payment-status">
<input type="hidden" name="ac_status_url_method" value="POST">

Los valores enviados en la solicitud reemplazan las URL predeterminadas configuradas para la pasarela Hosted Checkout.

Es útil cuando varios sitios web, tiendas, aplicaciones, bots o agentes de IA usan la misma pasarela Hosted Checkout.

También te permite generar URL de éxito, de fallo y de callback distintas para cada pedido sin crear varias pasarelas Hosted Checkout.

Desactivar las firmas​

El parámetro ac_sign es opcional si las firmas digitales están desactivadas en la configuración de Hosted Checkout.

Aun así, recomendamos encarecidamente usar firmas en producción para verificar la autenticidad de las solicitudes y evitar la manipulación de datos.

Las solicitudes sin firma solo deben usarse para pruebas y desarrollo.

Referencia de Hosted Checkout​

Parámetros de la solicitud de pago​

La solicitud de pago es un formulario HTML que tu aplicación envía a Hosted Checkout.

Contiene los datos del pago, la información del comercio, las URL de redirección y los parámetros de configuración opcionales necesarios para procesar un pago.

La siguiente tabla enumera todos los parámetros admitidos de la solicitud de pago.

ParámetroObligatorioFormatoDescripciónEjemplos
ac_account_emailSíCadenaEmail de tu cuenta de Volet.com.[email protected]
ac_sci_nameSíCadena (máx. 50 caracteres)Nombre del Hosted Checkout.My Store
ac_amountSíNúmero decimalMonto de la solicitud de pago. La precisión decimal depende de la moneda elegida. Los decimales sobrantes se truncan automáticamente.100.00, 49.0302, 0.12345678
ac_currencySíCódigo de monedaMoneda de la solicitud de pago.USD, EUR, BTC, ETH, USDT, USDC, XRP, TRX, LTC, TON, SOL
ac_order_idSíCadena (máx. 64 caracteres; "A-z", "-", "_", "0-9")Identificador único del pedido del comercio.123456, baf419d9-6c82-4175-b870-5541b0ff3794
ac_signCondicionalCadena hexadecimal (SHA-256)Firma de la solicitud, usada para verificar la integridad de la solicitud de pago. Obligatoria si la verificación de la firma de solicitudes está activada en el Hosted Checkout.36b4c9ad29b61d1c5996e3ef1a3af0c3194e19713613b6bf26a9b905b8019225
ac_psNoCadena (ID del método de pago)Método de pago preseleccionado al abrir Hosted Checkout.VOLET, USDTETHER, USD_COIN, BITCOIN, ETHEREUM, RIPPLE, TRON, LITECOIN, TON, SOL, BNB, MATIC (para POLYGON), AVAX
ac_ps_protocolCondicionalCadena (ID de blockchain o protocolo)Red blockchain preseleccionada. Obligatoria cuando ac_ps es USDTETHER, USD_COIN o BNB; en los demás casos es opcional.ETHEREUM, TRON, BINANCE_SMART_CHAIN, MATIC (para POLYGON), SOLANA, AVALANCHE, OPTIMISM, ARBITRUM, TON
ac_commentsNoCadena (máx. 255 caracteres)Descripción adicional del pago que se muestra al cliente y no se puede modificar.Payment for Order #1234
ac_success_urlNoCadena (máx. 100 caracteres)Reemplaza la Success URL configurada.https://merchant.example.com/success
ac_success_url_methodNoGET, POSTMétodo HTTP de la redirección a la Success URL. Reemplaza la configuración del Hosted Checkout.GET
ac_fail_urlNoCadena (máx. 100 caracteres)Reemplaza la Failed URL configurada.https://merchant.example.com/failed
ac_fail_url_methodNoGET, POSTMétodo HTTP de la redirección a la Failed URL. Reemplaza la configuración del Hosted Checkout.POST
ac_status_urlNoCadena (máx. 100 caracteres)Reemplaza la Status URL configurada.https://merchant.example.com/status
ac_status_url_methodNoGET, POSTMétodo HTTP de las notificaciones a la Status URL. Reemplaza la configuración del Hosted Checkout.POST
ac_client_langNoCadena (código de idioma)Idioma de la página de Hosted Checkout.en
ac_submerchant_urlNoCadena (máx. 100 caracteres)URL del sitio web del subcomercio. Se usa en integraciones de plataformas y es obligatoria para determinadas categorías de comercios.https://seller.example.com
Campos personalizados (por ejemplo, buyer_email, client_email)NoHasta 10 valores de cadena (máx. 100 caracteres cada uno)Campos adicionales definidos por el comercio que se devuelven sin cambios en las notificaciones a la Status URL y en las redirecciones del cliente. Úsalos para vincular los pagos con tus propios pedidos, clientes, facturas u otros registros internos.[email protected], #INV-12345, user_1001

Ejemplo​

<form method="POST" action="https://account.volet.com/api/public/payment-gateway">
<input type="hidden" name="ac_account_email" value="[email protected]">
<input type="hidden" name="ac_sci_name" value="My Store">
<input type="hidden" name="ac_amount" value="100.00">
<input type="hidden" name="ac_currency" value="USD">
<input type="hidden" name="ac_order_id" value="order_123456">
<input type="hidden" name="ac_sign" value="36b4c9ad29b61d1c5996e3ef1a3af0c3194e19713613b6bf26a9b905b8019225">

<input type="hidden" name="ac_ps" value="USDTETHER">
<input type="hidden" name="ac_ps_protocol" value="ETHEREUM">
<input type="hidden" name="ac_comments" value="Payment for Order #123456">

<input type="hidden" name="ac_success_url" value="https://merchant.example.com/payment-success">
<input type="hidden" name="ac_success_url_method" value="GET">
<input type="hidden" name="ac_fail_url" value="https://merchant.example.com/payment-failed">
<input type="hidden" name="ac_fail_url_method" value="GET">
<input type="hidden" name="ac_status_url" value="https://merchant.example.com/payment-status">
<input type="hidden" name="ac_status_url_method" value="POST">

<input type="hidden" name="ac_client_lang" value="en">
<input type="hidden" name="ac_submerchant_url" value="https://seller.example.com">

<!-- Custom fields -->
<input type="hidden" name="customer_id" value="customer_12345">
<input type="hidden" name="customer_email" value="[email protected]">
<input type="hidden" name="invoice_id" value="INV-2026-001">
<input type="hidden" name="subscription_id" value="sub_98765">
<input type="hidden" name="merchant_internal_id" value="seller_456">

<button type="submit">Pay with Volet.com</button>
</form>

Parámetros de pago exitoso​

Tras un pago exitoso, Hosted Checkout redirige al cliente a tu Success URL y envía los datos del pago con el método de redirección configurado.

La siguiente tabla describe todos los parámetros disponibles.

ParámetroFormatoDescripciónEjemplos
ac_src_walletCadenaNúmero de billetera del cliente usada para el pago.USDT123456789012
ac_dest_walletCadenaNúmero de billetera del comercio o billetera de liquidación.USD123456789012
ac_amountNúmero decimalMonto de la solicitud de pago.100.00, 0.12500000
ac_merchant_amountNúmero decimalMonto acreditado en la cuenta del comercio.100.00
ac_merchant_currencyCódigo de monedaMoneda de liquidación.USD, EUR, BTC, ETH, USDT, USDC, XRP, TRX, LTC, TON, SOL
ac_feeNúmero decimalComisión de procesamiento cobrada por el pago.0.50
ac_buyer_amount_without_commissionNúmero decimalMonto pagado por el cliente sin las comisiones a su cargo, si corresponde.100.00
ac_buyer_amount_with_commissionNúmero decimalMonto total pagado por el cliente, incluidas las comisiones a su cargo.100.50
ac_buyer_currencyCódigo de monedaMoneda usada por el cliente para completar el pago.USD, EUR, BTC, ETH, USDT, USDC, XRP, TRX, LTC, TON, SOL, BNB, AVAX, POL
ac_transferUUIDIdentificador único de la transacción en Volet.com.235f9d0b-b48f-462c-9949-621c4930490c
ac_sci_nameCadenaNombre del Hosted Checkout.My Store
ac_start_dateYYYY-MM-DD HH:mm:ss (UTC)Fecha y hora de creación del pago.2026-06-23 12:30:00
ac_order_idCadenaIdentificador del pedido del comercio indicado en la solicitud de pago.123456, baf419d9-6c82-4175-b870-5541b0ff3794
ac_psCadena (ID del método de pago)Método de pago usado por el cliente.VOLET, USDT, USDC, BTC, ETH, TRX, SOL
ac_transaction_statusEstadoEstado final del pago. Valores posibles: PENDING, PROCESS, COMPLETED, CANCELED.COMPLETED
ac_buyer_emailCadena (dirección de email)Email del cliente, si está disponible.[email protected]
ac_buyer_verifiedBooleanoIndica si la cuenta del cliente está verificada.true, false
ac_commentsCadenaComentario indicado en la solicitud de pago.Order #123456
Campos personalizadosCadenaCampos definidos por el comercio que se devuelven sin cambios desde la solicitud de pago.customer_id, invoice_id, subscription_id

Ejemplo​

<form method="POST" action="https://merchant.example.com/payment-success">
<input type="hidden" name="ac_src_wallet" value="USDT210987654321">
<input type="hidden" name="ac_dest_wallet" value="USD123456789012">
<input type="hidden" name="ac_amount" value="100.00">
<input type="hidden" name="ac_merchant_amount" value="99.50">
<input type="hidden" name="ac_merchant_currency" value="USD">
<input type="hidden" name="ac_fee" value="0.50">
<input type="hidden" name="ac_buyer_amount_without_commission" value="100.00">
<input type="hidden" name="ac_buyer_amount_with_commission" value="100.00">
<input type="hidden" name="ac_buyer_currency" value="USDT">
<input type="hidden" name="ac_transfer" value="235f9d0b-b48f-462c-9949-621c4930490c">
<input type="hidden" name="ac_sci_name" value="My Store">
<input type="hidden" name="ac_start_date" value="2026-06-23 12:30:00">
<input type="hidden" name="ac_order_id" value="order_123456">
<input type="hidden" name="ac_ps" value="VOLET">
<input type="hidden" name="ac_transaction_status" value="COMPLETED">
<input type="hidden" name="ac_buyer_email" value="[email protected]">
<input type="hidden" name="ac_buyer_verified" value="true">
<input type="hidden" name="ac_comments" value="Order #123456">
<!-- Custom fields -->
<input type="hidden" name="customer_id" value="customer_12345">
<input type="hidden" name="invoice_id" value="INV-2026-001">
<input type="hidden" name="subscription_id" value="sub_98765">
</form>

Parámetros de pago fallido​

Si un pago se cancela o falla, Hosted Checkout redirige al cliente a tu Failed URL y envía los datos del pago con el método de redirección configurado.

La siguiente tabla describe todos los parámetros disponibles.

ParámetroFormatoDescripciónEjemplos
ac_dest_walletCadenaCuenta del comercio o billetera de liquidación.USD123456789012
ac_amountNúmero decimalMonto de la solicitud de pago.100.00, 49.95
ac_currencyCódigo de monedaMoneda de la solicitud de pago.USD, EUR, BTC, ETH, USDT, USDC, XRP, TRX, LTC, TON, SOL
ac_sci_nameCadenaNombre del Hosted Checkout.My Store
ac_order_idCadenaIdentificador del pedido del comercio indicado en la solicitud de pago.order_123456, baf419d9-6c82-4175-b870-5541b0ff3794
Campos personalizadosCadenaCampos definidos por el comercio que se devuelven sin cambios desde la solicitud de pago.customer_id, invoice_id, subscription_id

Ejemplo​

<form method="POST" action="https://merchant.example.com/payment-failed">
<input type="hidden" name="ac_dest_wallet" value="USD123456789012">
<input type="hidden" name="ac_amount" value="100.00">
<input type="hidden" name="ac_currency" value="USD">
<input type="hidden" name="ac_sci_name" value="My Store">
<input type="hidden" name="ac_order_id" value="order_123456">
<!-- Custom fields -->
<input type="hidden" name="customer_id" value="customer_12345">
<input type="hidden" name="invoice_id" value="INV-2026-001">
<input type="hidden" name="subscription_id" value="sub_98765">
</form>

Parámetros de la notificación de pago​

Cuando cambia el estado del pago, Hosted Checkout envía una notificación a tu Status URL con el método configurado (GET o POST).

La notificación contiene todos los parámetros de pago exitoso más una firma ac_hash adicional.

ParámetroFormatoDescripciónEjemplos
ac_hashHash SHA-256 (cadena hexadecimal)Firma SHA-256 que permite verificar que la notificación la envió Volet.com y no se modificó en tránsito.1cd6c127c5c49b6d5060cec4bdbf06608216c0c11cc76acebb546be0f7081afd

Para saber cómo generar y verificar la firma, consulta Verificar la firma de la notificación.

Ejemplo de notificación​

<form method="POST" action="https://merchant.example.com/status">
<input type="hidden" name="ac_src_wallet" value="USDT210987654321">
<input type="hidden" name="ac_dest_wallet" value="USD123456789012">
<input type="hidden" name="ac_amount" value="123.45">
<input type="hidden" name="ac_merchant_amount" value="123.55">
<input type="hidden" name="ac_merchant_currency" value="USD">
<input type="hidden" name="ac_fee" value="0.10">
<input type="hidden" name="ac_buyer_amount_without_commission" value="123.45">
<input type="hidden" name="ac_buyer_amount_with_commission" value="123.55">
<input type="hidden" name="ac_buyer_currency" value="USD">
<input type="hidden" name="ac_transfer" value="235f9d0b-b48f-462c-9949-621c4930490c">
<input type="hidden" name="ac_sci_name" value="My Shop">
<input type="hidden" name="ac_start_date" value="2026-06-23 12:30:00">
<input type="hidden" name="ac_order_id" value="123456">
<input type="hidden" name="ac_ps" value="VOLET">
<input type="hidden" name="ac_transaction_status" value="COMPLETED">
<input type="hidden" name="ac_buyer_email" value="[email protected]">
<input type="hidden" name="ac_buyer_verified" value="true">
<input type="hidden" name="ac_comments" value="Payment for order #123456">
<input type="hidden" name="ac_hash" value="1cd6c127c5c49b6d5060cec4bdbf06608216c0c11cc76acebb546be0f7081afd">
<!-- Custom fields -->
<input type="hidden" name="customer_id" value="98765">
<input type="hidden" name="invoice_id" value="INV-2026-001">
</form>