¿Cambian los Tokens?
En cada transacción el token cambia, incluso si es para la misma factura o el mismo
cliente.
🧠 ¿Por qué cambia el token en cada transacción?
Porque el token de transacción (como el que te da Pagopar o cualquier pasarela de
pagos) es un identificador único y temporal generado para:
Una sola operación
Con un monto específico
En una fecha determinada
Asociado a un estado particular de pago
🔁 ¿Y si intento pagar la misma factura dos veces?
🔹 Cada intento genera un nuevo token de transacción
🔹 Aunque sea la misma factura, el contexto cambió (fecha, hora, intento distinto)
🧾 Ejemplo real con Pagopar:
Supongamos:
Factura #F001
Monto: 550.000 PYG
Pagás hoy → genera token: tok_abc123
Pagás mañana (mismo monto, misma factura) → nuevo token: tok_xyz789
Esto se hace por seguridad, para que:
No se pueda reutilizar un token viejo
Se evite el fraude (ej: alterar datos de una transacción)
El seguimiento de cada intento sea único
✅ ¿Entonces debo guardar todos los tokens?
Depende del flujo de tu sistema:
Caso ¿Guardar Token?
Pagas solo una vez Sí, guardar el Token principal
Pagas en cuotas / varios intentos Sí, guardar los Tokens por cada
intento/pago
📌 Lo ideal es que tu tabla Pago o Transaccion tenga un campo como:
TransaccionToken (PK)
FacturaId
Estado
Monto
Fecha
Y si usás cuotas:
CuotaId | FacturaId | TransaccionToken | Monto | Estado |
Fecha
¿Qué es un Webhook?
Un webhook es un mecanismo que permite a una aplicación recibir notificaciones
automáticas en tiempo real cuando ocurre un evento en otro sistema.
En lugar de tener que hacer consultas constantes (“¿ya pasó algo?”), el otro sistema te
avisa en el momento exacto en que algo sucede.
🔔 Ejemplo simple con Pagopar
Cuando integrás Pagopar, podés configurar una URL de webhook en tu sistema.
Entonces, cuando un usuario realiza un pago exitoso, Pagopar te envía una solicitud
HTTP automática (normalmente un POST) a esa URL con información como:
{
"token": "abc123",
"respuesta": {
"estado": "pagado",
"monto": 100000,
"referencia": "pedido_001"
}
}
Tu aplicación recibe eso en tiempo real, y puede actualizar automáticamente el estado
de ese pedido o mostrarlo al cliente.
📬 Cómo funciona técnicamente
Paso Descripción
1️⃣ El usuario paga algo en Pagopar
2️⃣ Pagopar procesa el pago
3️⃣ Pagopar envía un POST a tu servidor con los datos del pago
4️⃣ Tu servidor lee el JSON recibido y actualiza tu base de datos
🧠 ¿Para qué se usa un webhook?
Actualizar el estado de una transacción (pagado, cancelado, pendiente)
Confirmar que un pago fue completado
Enviar correos automáticos cuando llega la notificación
Disparar eventos (crear facturas, desbloquear acceso, etc.)
💡 En GeneXus
En GeneXus, vos implementás un REST service que escuche esa URL.
Por ejemplo, podés tener un Procedure llamado "WebhookPagopar" con Call Protocol:
REST y un parámetro de entrada tipo Blob, que capture el HttpRequest.Content y lo
procese.
📦 Resumen rápido
🔹 Webhook
📤 Es una notificación automática (push) de un evento
🕒 Llega en tiempo real
💻 Se recibe en una URL que vos exponés
🔐 Suele ir firmado o autenticado para evitar fraudes
⚙️ Se usa mucho en pagos, envíos, facturación, bots, etc.
¿Para qué guardar Tokens?
Guardar el token de la transacción de Pagopar en tu base de datos es fundamental por
varias razones clave. Aquí te explico por qué es buena práctica y para qué te sirve
realmente:
🔐 1. Identificación única de la transacción
El token generado por Pagopar (ej. "8df9352ebf2b8a24fce5e263cc587623") es el
identificador único que usa su plataforma para referirse a una transacción específica.
Con este token podés:
Consultar el estado del pago más adelante.
Validar notificaciones (webhooks) que llegan desde Pagopar.
Ver el historial de pagos en la cuenta del comercio.
🔁 2. Reintentar o recuperar pagos
Si el cliente no completa el pago en el momento (abandona el proceso, pierde
conexión, etc.), podés usar ese token para:
Volver a generar el link de pago sin crear una nueva transacción.
Mostrarle al cliente un botón como “Reintentar pago” con el mismo token.
🔍 3. Auditoría y trazabilidad
Guardar el token te permite:
Comparar tus registros con los del panel de control de Pagopar.
Resolver reclamos o disputas de clientes con datos exactos.
Saber a qué pedido o usuario corresponde un pago en particular.
🔁 4. Sincronización con webhooks
Cuando Pagopar te envía una notificación de pago (callback/webhook), lo hace
incluyendo el token de la transacción. Si vos guardaste ese token:
Podés ubicar rápidamente la transacción que se actualizó.
Actualizar el estado en tu sistema (pagado, cancelado, etc.)
Asegurar que no se procese dos veces la misma notificación.
📊 5. Conciliación contable
Si tenés que hacer conciliación bancaria o informes financieros:
El token te ayuda a emparejar el pago recibido en Pagopar con el registro
contable interno.
Podés exportar reportes detallados incluyendo ese token como referencia
cruzada.
🧠 En resumen:
Guardar el token te permite: ✅ Validar
✅ Reintentar
✅ Auditar
✅ Sincronizar
✅ Conciliar
El ejemplo paso a paso:
Creamos una transacción llamada Pago.
genexus
CopiarEditar
Transaction Pago
{
PagoId* // Autonumérico
ClienteNombre
ClienteEmail
Monto // Total a pagar
Moneda // "PYG"
Referencia // ID del pedido, por ejemplo
PagoparToken // El token generado por Pagopar
Estado // "pending", "paid", "canceled", etc.
FechaCreacion
FechaPago // Nullable
}
🚀 Paso 2: Procedure para iniciar la transacción con Pagopar
genexus
CopiarEditar
Parm(in: &PagoId);
&HttpClient.Host = !"https://api.pagopar.com"
&HttpClient.AddHeader(!"Content-Type", !"application/json")
&Pago.Load(&PagoId)
&Body = '{"token": "TU_TOKEN_COMERCIO",
"public_key": "TU_API_KEY",
"amount": ' + &Pago.Monto.ToString() + ',
"currency": "PYG",
"order_id": "' + &Pago.Referencia.Trim() + '"}'
&Response = &HttpClient.Execute(!"POST", !"/api/init_transaction", &Body)
if &HttpClient.StatusCode = 200
&JSON = &Response.ToJson()
&PagoparToken = &JSON.Get("respuesta.token")
&Pago.PagoparToken = &PagoparToken
&Pago.Estado = !"pending"
&Pago.FechaCreacion = Now()
&Pago.Save()
endif
🌐 Paso 3: Redirigir al usuario al pago
Después de guardar el token, podés redirigir al usuario con un botón/link así:
html
CopiarEditar
<a href="https://pagopar.com/pagos/" + &Pago.PagoparToken target="_blank">
Ir al Pago
</a>
O desde un Web Panel en GeneXus:
genexus
CopiarEditar
Link(!"https://pagopar.com/pagos/" + &Pago.PagoparToken)
📬 Paso 4: Webhook para actualizar el estado
Cuando Pagopar te envía la confirmación, podés identificar la transacción usando el
token:
genexus
CopiarEditar
&JSON.Load(&HttpRequest.Content)
&TokenRecibido = &JSON.Get("token")
&EstadoRecibido = &JSON.Get("respuesta.estado")
for each Pago where PagoparToken = &TokenRecibido
Pago.Estado = &EstadoRecibido
if &EstadoRecibido = "pagado"
Pago.FechaPago = Now()
endif
Pago.Save()
endfor
✅ Resultado
Con esto tenés una integración básica que:
Guarda la transacción y el token
Envía la solicitud a Pagopar
Redirige al usuario
Recibe la respuesta de Pagopar y actualiza el estado
¿Qué es una cURL?
Un cURL (pronunciado "curl") es una herramienta de línea de comandos y también
una librería usada para realizar solicitudes HTTP (y otros protocolos como FTP, SMTP,
etc.) desde tu terminal, scripts o aplicaciones.
Su nombre viene de "Client URL".
🧰 ¿Para qué se usa?
Se usa para interactuar con APIs, probar endpoints de servicios web, enviar datos,
subir archivos, autenticar usuarios, etc.
Por ejemplo, si estás integrando Pagopar, probablemente veas ejemplos con curl como
este:
bash
CopiarEditar
curl -X POST https://api.pagopar.com/api/init_transaction \
-H "Content-Type: application/json" \
-d '{
"token": "mi_token",
"public_key": "mi_api_key",
"amount": 100000,
"currency": "PYG"
}'
Este comando hace lo siguiente:
-X POST: usa el método HTTP POST
-H: envía un encabezado (en este caso, que el contenido es JSON)
-d: envía el contenido del cuerpo (body) de la solicitud
✅ ¿Por qué es útil?
Podés probar APIs rápidamente desde la terminal
Es fácil de usar en scripts automatizados
Hay versiones para Windows, Linux y macOS
Está integrado en muchos lenguajes (por ejemplo: PHP, Python, etc.)
💡 Ejemplo simple
bash
CopiarEditar
curl https://api.github.com
Te muestra la respuesta de la API pública de GitHub.
🔄 ¿Tiene que ver con GeneXus?
Indirectamente, sí. Aunque GeneXus no usa curl como tal, cuando ves ejemplos de
integración con APIs (como Pagopar) que muestran comandos curl, podés traducir
esos mismos pasos a:
un HttpClient en un Procedure
una llamada REST desde un Data Provider
una invocación con &Client.Execute(...)
¿Qué información guardar de un pago?
Si estás integrando Pagopar en tu aplicación GeneXus, es muy importante guardar
correctamente toda la información relevante sobre las transacciones de pago. Esto te
ayudará a:
Llevar control de los pagos realizados
Validar estados de pago (pendiente, pagado, rechazado, etc.)
Resolver disputas
Hacer conciliaciones contables
📦 Recomendación de Tablas e Información a Almacenar
Podés comenzar con una tabla principal llamada por ejemplo PagoparTransaction o
Pago, y relacionarla con otras si es necesario.
🧾 Tabla: PagoparTransaction
Campo Tipo Descripción
TransactionId Autonumeric Identificador interno de la transacción
Token único generado por Pagopar para esta
PagoparToken Varchar(100)
transacción
Campo Tipo Descripción
Referencia interna que envías a Pagopar (por
Reference Varchar(100)
ejemplo: ID de pedido)
Monto Numeric(12,2) Monto total de la transacción
Moneda Char(3) Por ejemplo: "PYG"
Estado actual del pago: "pending", "paid",
Estado Varchar(50)
"canceled", etc.
PagadorNombre Varchar(100) Nombre del cliente/pagador
PagadorEmail Varchar(100) Email del cliente
PagadorTelefono Varchar(20) Teléfono del cliente
FechaCreacion DateTime Fecha en que se generó la transacción
DateTime
FechaPago Fecha en que se completó el pago (si aplica)
(nullable)
Longvarchar Respuesta JSON completa del servidor (opcional,
JSONRespuesta
(BLOB) útil para debugging o auditoría)
🧩 Campos adicionales que podrías considerar
Tipo de pago (efectivo, tarjeta, billetera digital, etc.)
URL de pago de Pagopar (por si querés reenviar al usuario)
Campo de control para saber si ya fue notificado el sistema del pago
Campos de integración contable o de facturación
🧠 ¿Cuándo guardar estos datos?
Al generar la solicitud de pago: guardás el token y la info básica del pedido.
Al recibir el callback o webhook de Pagopar: actualizás el estado de la
transacción y la fecha de pago.
Al mostrar al usuario el resultado del pago: recuperás la info para mostrarle si
se procesó correctamente.
¿Qué es GeneXus JWT?
El módulo GeneXus JWT (JSON Web Token) permite trabajar con tokens de
autenticación y autorización, que son ampliamente utilizados en aplicaciones web y
APIs modernas. Su principal objetivo es facilitar la creación, firma, verificación y
decodificación de tokens JWT dentro de una aplicación GeneXus.
🔐 ¿Qué es un JWT?
Un JWT (JSON Web Token) es un estándar abierto (RFC 7519) que define un formato
compacto y seguro para transmitir información entre partes como un objeto JSON
firmado digitalmente. Se usa mucho en:
Autenticación de usuarios
Autorización de acceso (OAuth 2.0, OpenID Connect)
Integración entre sistemas seguros
APIs RESTful
⚙️¿Qué permite hacer el módulo GeneXus JWT?
Con el módulo GeneXus JWT podés:
Función Descripción
Crea un token JWT firmando los datos con una clave secreta o
JWTEncode()
certificado
JWTDecode() Decodifica un token JWT sin validación
JWTVerifySignature() Verifica si la firma del token es válida
JWTSetAlgorithm() Establece el algoritmo de firma (HS256, RS256, etc.)
JWTAddClaim() Agrega claims personalizados (por ejemplo, user_id, exp, etc.)
🧱 ¿Cómo se usa?
Un ejemplo básico en GeneXus:
genexus
CopiarEditar
&JWT = JWT.New()
&JWT.Algorithm = !"HS256"
&JWT.Secret = !"mi_clave_secreta"
&JWT.AddClaim(!"user", !"admin")
&JWT.AddClaim(!"role", !"admin")
&Token = &JWT.Encode()
Y para verificar:
genexus
CopiarEditar
&JWT = JWT.New()
&JWT.Secret = !"mi_clave_secreta"
&Valido = &JWT.VerifySignature(&Token)
&Data = &JWT.Decode(&Token)
¿Dónde se aplica?
Login en aplicaciones web y móviles (para generar el token al iniciar sesión).
Seguridad en APIs REST: el cliente envía el JWT en la cabecera Authorization:
Bearer, y el servidor lo valida.
Single Sign-On (SSO) e integraciones con otros servicios.
📦 ¿Qué necesito para usarlo?
Está disponible como módulo en el GeneXus Marketplace.
Funciona con generadores Java y .NET.
Para algoritmos como RS256, necesitarás un certificado público/privado.
¿Qué es GeneXus XMLSignature?
El módulo GeneXus XmlSignature es una extensión oficial de GeneXus que permite
firmar digitalmente documentos XML utilizando los estándares internacionales de
XML Digital Signature (XMLDSig). Es especialmente útil cuando necesitas garantizar la
autenticidad, integridad y no repudio de datos en formato XML.
🔐 ¿Para qué se usa?
Principalmente, el módulo se utiliza en aplicaciones donde es necesario intercambiar
documentos XML firmados digitalmente, como en:
Facturación electrónica
Envío de reportes a entes gubernamentales
Integración con sistemas tributarios (como SIFEN en Paraguay, SUNAT en Perú,
AFIP en Argentina, etc.)
Firmas de contratos electrónicos
⚙️¿Qué permite hacer?
Con este módulo podés:
Firmar un XML con un certificado digital (archivo .pfx o .pem)
Validar la firma de un XML firmado previamente
Firmar con distintos algoritmos y configuraciones (RSA-SHA256, por ejemplo)
Usar certificados almacenados en el sistema de archivos o dispositivos externos
🧱 ¿Cómo se usa en GeneXus?
Típicamente se trabaja con objetos como:
genexus
CopiarEditar
&XmlSignature.LoadCertificate("path\certificado.pfx", "contraseña")
&SignedXml = &XmlSignature.Sign(&Xml)
También podés verificar firmas con algo como:
genexus
CopiarEditar
&IsValid = &XmlSignature.VerifySignature(&Xml)
📦 Requisitos
Está disponible como módulo en el Marketplace de GeneXus.
Funciona con los generadores .NET y Java (aunque algunas funciones pueden
variar).
Requiere tener instalado Java Keytool o .NET Certificate Store, dependiendo
del generador.
📌 ¿Cuándo lo deberías considerar?
Si estás trabajando con entidades como la SET en Paraguay (por ejemplo, para
facturación electrónica o documentos fiscales), es muy probable que necesites firmar
electrónicamente documentos XML, y este módulo es exactamente lo que necesitás.
Módulos GeneXus para gestionar pagos
GeneXus ofrece varias soluciones y módulos que pueden ser utilizados para gestionar
pagos, aunque no siempre están específicamente diseñados para integrarse con cada
proveedor de pagos como Pagopar. Sin embargo, se pueden utilizar de forma flexible y
adaptarse a la mayoría de las pasarelas de pago. Aquí te comento algunas opciones:
1. GeneXus Payment Integration (GX Payment)
GeneXus tiene un módulo de integración de pagos conocido como GX Payment. Este
módulo proporciona una infraestructura común para trabajar con diferentes
proveedores de pagos y facilita la integración de métodos de pago en tus aplicaciones.
Algunas características son:
Multicanalidad: Permite integrar diferentes formas de pago, como tarjetas de
crédito, transferencias bancarias y billeteras electrónicas.
Integración con diversos proveedores: Si bien GX Payment no incluye
directamente a Pagopar, puedes adaptarlo para que funcione con pasarelas de
pago que utilicen REST APIs, como Pagopar, PayPal, Stripe, etc.
Gestión de pagos recurrentes: Es útil si necesitas gestionar suscripciones o
pagos periódicos.
2. GeneXus MercadoPago Integration
GeneXus tiene una integración oficial con MercadoPago, que es una pasarela de pago
popular en América Latina. Si en algún momento decides integrar MercadoPago en
lugar de Pagopar, GeneXus proporciona herramientas y objetos preconfigurados para
realizar esta integración rápidamente. Aunque no es directamente Pagopar, muchas de
las API y funcionalidades son similares, por lo que este módulo te puede dar una base
de referencia.
3. GeneXus Web Services
Si necesitas integrar una pasarela de pagos personalizada (como Pagopar), GeneXus
Web Services permite crear servicios web y consumir APIs externas. De esta forma,
puedes conectarte a la API de Pagopar como lo harías con cualquier otro servicio
RESTful. El uso de GeneXus Procedure o Data Providers te permitirá manejar las
solicitudes y respuestas para el procesamiento de pagos.
4. Marketplace de GeneXus
GeneXus también tiene un Marketplace donde puedes encontrar módulos de terceros
desarrollados por la comunidad y otros proveedores. En este marketplace, podrías
encontrar alguna solución o módulo específico para Pagopar o alguna pasarela de
pagos similar que puedas adaptar.
Si deseas realizar una integración más sencilla y no quieres gestionar todo el código por
tu cuenta, te sugiero explorar el GX Payment o investigar en el Marketplace de
GeneXus para ver si hay algo que se ajuste a tus necesidades.
¿Qué debe llevar la API?
1. Versión de GeneXus: ¿Podrías confirmarme la versión exacta que estás
utilizando (por ejemplo, GeneXus 17 U12, GeneXus 18, etc.)? Esto es
importante para asegurar la compatibilidad del archivo .xpz.
2. Configuración de Pagopar:
o ¿Cuentas con tu API Key y Token de Comercio de Pagopar?
o ¿Tienes definidos los siguientes URLs?
return_url: URL a la que se redirige al usuario después de
completar el pago.
cancel_url: URL a la que se redirige al usuario si cancela el pago.
notification_url: URL que Pagopar utilizará para enviar
notificaciones sobre el estado del pago.
3. Preferencias adicionales:
o ¿Deseas que el .xpz incluya una transacción para registrar los pagos
realizados?
o ¿Necesitas que se manejen diferentes monedas o solo utilizarás
Guaraníes (PYG)?
Una vez que me proporciones esta información, podré generar el archivo .xpz adaptado
a tus necesidades.
Fuentes
¡Perfecto! Con esa información, ya puedo prepararte una KB de ejemplo completa en
GeneXus 18 Java, con los siguientes objetos:
📦 Contenido del .xpz:
Objeto Tipo Descripción
Producto Transacción Catálogo simple de productos con nombre y precio
Formulario para capturar datos del comprador y
PagoPagopar Web Panel
generar la orden
Encargado de consumir la API de Pagopar y devolver
GenPagoPagopar Procedure
la URL de pago
(Opcional) Registro de los pagos procesados para
Pago Transacción
referencia interna
Data
CommonVariables Define claves como Token, API Key y URLs
Provider
KB GeneXUs – Java
Esta guía te proporcionará los pasos necesarios para implementar la integración,
incluyendo la estructura de objetos, configuración y código necesario.
🧱 Estructura de la KB: "PagoparDemo"
1. Transacción: Producto
Define los productos que estarán disponibles para la compra.
Nombre: Producto
Atributos:
o ProductoId* (Autonumérico)
o ProductoNombre (Varchar)
o ProductoPrecio (Numeric)
2. Web Panel: PagoPagopar
Formulario para que el usuario seleccione un producto e ingrese sus datos.
Campos:
o &ProductoId (ComboBox con los productos disponibles)
o &Nombre (Varchar)
o &Email (Varchar)
o &Telefono (Varchar)
Botón: "Pagar"
o Evento asociado: Event 'Pagar'
3. Procedure: GenPagoPagopar
Encargado de comunicarse con la API de Pagopar para generar el enlace de pago.
Parámetros de entrada:
o &Monto (Numeric)
o &Descripcion (Varchar)
o &Referencia (Varchar)
o &Nombre (Varchar)
o &Email (Varchar)
o &Telefono (Varchar)
Parámetros de salida:
o &Url (Varchar)
o &MensajeError (Varchar)
Código:
geneXus
CopiarEditar
&HttpClient.Host = !"api.pagopar.com"
&HttpClient.Port = 443
&HttpClient.Secure = True
&RequestJson = New JsonObject()
&RequestJson.Put("token", !"TU_TOKEN_DE_COMERCIO")
&RequestJson.Put("public_key", !"TU_API_KEY")
&RequestJson.Put("amount", &Monto)
&RequestJson.Put("description", &Descripcion)
&RequestJson.Put("return_url", !"https://tusitio.com/retorno")
&RequestJson.Put("cancel_url", !"https://tusitio.com/cancelado")
&RequestJson.Put("external_reference", &Referencia)
&RequestJson.Put("payer_name", &Nombre)
&RequestJson.Put("payer_email", &Email)
&RequestJson.Put("payer_phone", &Telefono)
&RequestJson.Put("notification_url", !"https://tusitio.com/notificacion")
&HttpClient.AddHeader("Content-Type", "application/json")
&HttpClient.Execute('POST', !"/api/init_payment", &RequestJson.ToString(),
&Response)
If &HttpClient.StatusCode = 200
&JsonResp.Load(&Response)
If &JsonResp.Get("success") = true
&Url = &JsonResp.Get("data").Get("payment_url")
Else
&MensajeError = &JsonResp.Get("message")
EndIf
Else
&MensajeError = !"Error de conexión: " + &HttpClient.StatusCode.ToString()
EndIf
4. Evento 'Pagar' en el Web Panel: PagoPagopar
geneXus
CopiarEditar
Event 'Pagar'
&ProductoNombre = ''
&ProductoPrecio = 0
For Each Producto
Where ProductoId = &ProductoId
&ProductoNombre = ProductoNombre
&ProductoPrecio = ProductoPrecio
EndFor
&Referencia = "referencia_" + GUID()
call(GenPagoPagopar, &ProductoPrecio, &ProductoNombre, &Referencia, &Nombre,
&Email, &Telefono, &UrlPago, &MensajeError)
if &UrlPago <> ""
Link(&UrlPago)
else
msg(&MensajeError)
endif
EndEvent
⚙️Configuración adicional
Generador: Asegúrate de que el generador Java esté correctamente
configurado en tu KB.
Dependencias: No se requieren dependencias adicionales, ya que GeneXus
proporciona objetos para manejar solicitudes HTTP y JSON.
📦 ¿Cómo obtener esta KB?
Actualmente, no existe una KB oficial de GeneXus para Pagopar. Sin embargo, puedes
crearla siguiendo los pasos anteriores. Si prefieres, puedo proporcionarte un
archivo .xpz con la estructura básica para que lo importes directamente en tu entorno
GeneXus.
Pagopar en GeneXus
Integrar Pagopar en GeneXus es totalmente posible, aunque requiere un poco de
trabajo con external objects, HTTP requests, y procedures. Te explico paso a paso
cómo podrías hacerlo.
🧩 ¿Qué versión de GeneXus estás usando?
Primero sería útil saber si estás en GeneXus 16, 17 o 18, pero la mayoría de los pasos
aplican desde GX 16 en adelante.
Pasos para integrar Pagopar en GeneXus
1. Crear una Procedure para generar el token
Esta procedure será responsable de hacer el POST a la API de Pagopar.
// Nombre: GenPagoPagopar
&HttpClient.Host = !"api.pagopar.com"
&HttpClient.Port = 443
&HttpClient.Secure = True
&RequestJson = New JsonObject()
&RequestJson.Put("token", !"TU_TOKEN_DE_COMERCIO")
&RequestJson.Put("public_key", !"TU_API_KEY")
&RequestJson.Put("amount", &Monto)
&RequestJson.Put("description", &Descripcion)
&RequestJson.Put("return_url", !"https://tusitio.com/retorno")
&RequestJson.Put("cancel_url", !"https://tusitio.com/cancelado")
&RequestJson.Put("external_reference", &Referencia)
&RequestJson.Put("payer_name", &Nombre)
&RequestJson.Put("payer_email", &Email)
&RequestJson.Put("payer_phone", &Telefono)
&RequestJson.Put("notification_url", !"https://tusitio.com/notificacion")
&HttpClient.AddHeader("Content-Type", "application/json")
&HttpClient.Execute('POST', !"/api/init_payment", &RequestJson.ToString(),
&Response)
If &HttpClient.StatusCode = 200
&JsonResp.Load(&Response)
If &JsonResp.Get("success") = true
&Url = &JsonResp.Get("data").Get("payment_url")
Else
&MensajeError = &JsonResp.Get("message")
EndIf
Else
&MensajeError = !"Error de conexión: " + &HttpClient.StatusCode.ToString()
EndIf
Parámetros de entrada esperados:
&Monto
&Descripcion
&Referencia
&Nombre
&Email
&Telefono
Parámetros de salida:
&Url (para redirigir al usuario)
&MensajeError (en caso de fallo)
2. Crear un Web Panel con un formulario
El Web Panel contendría un formulario para que el usuario ingrese sus datos,
seleccione un producto, y al hacer clic en “Pagar”, se llama a la procedure
GenPagoPagopar.
geneXus
CopiarEditar
// Variables:
&Nombre
&Email
&Telefono
&Producto
&Monto
&Descripcion
&UrlPago
&ErrorMensaje
Event 'Pagar'
&Referencia = "referencia_" + GUID()
call(GenPagoPagopar, &Monto, &Descripcion, &Referencia, &Nombre, &Email,
&Telefono, &UrlPago, &ErrorMensaje)
if &UrlPago <> ""
// Redirigir al usuario a la URL de pago
Link(&UrlPago)
else
msg(&ErrorMensaje)
endif
EndEvent
3. Otras consideraciones
GeneXus maneja fácilmente JSON con el objeto JsonObject.
Para redirigir a otra URL puedes usar Link(&Url) o crear una página intermedia
con un botón de redirección.
También puedes almacenar los pagos en una tabla y manejar el retorno
(return_url) y notificaciones (notification_url) desde otros procedures o
servicios.