0% encontró este documento útil (0 votos)
119 vistas22 páginas

Token y Otras Cosas en GX

El documento explica cómo funcionan los tokens en las transacciones de pago, destacando que cada transacción genera un nuevo token único por razones de seguridad. También se detalla el uso de webhooks para recibir notificaciones automáticas de eventos en tiempo real y la importancia de guardar los tokens para la identificación, auditoría y conciliación de pagos. Además, se presentan ejemplos de implementación en GeneXus y se menciona el uso de JWT y XMLSignature para autenticación y firma digital.

Cargado por

Lizandra Cazó
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
119 vistas22 páginas

Token y Otras Cosas en GX

El documento explica cómo funcionan los tokens en las transacciones de pago, destacando que cada transacción genera un nuevo token único por razones de seguridad. También se detalla el uso de webhooks para recibir notificaciones automáticas de eventos en tiempo real y la importancia de guardar los tokens para la identificación, auditoría y conciliación de pagos. Además, se presentan ejemplos de implementación en GeneXus y se menciona el uso de JWT y XMLSignature para autenticación y firma digital.

Cargado por

Lizandra Cazó
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

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

También podría gustarte