Consideraciones
Para utilizar el formulario de pago de Greenpay, se debe considerar los siguiente:
- El formulario está disponible en:
- Sandbox: https://sandbox-checkoutform.greenpay.me/
- Producción: https://checkout-form.greenpay.me/
- Tener una session y token de una orden the pago que no haya excedido los 30 minutos establecidos para vencimiento. Además, la orden debió se creada con el parámetro callback. Para ver cómo crear una orden de pago y agregar el parámetro callback visite este enlace.
- El formulario de pago de Greenpay solo esta disponible para aplicaciones web.
- Recomendado: Implementar un webhook para recibir las respuestas en un backend, para esto puede revisar el articulo Respuestas de pago en webhook.
Con la respuesta (session, token) obtenida en la orden de pago, se debe redireccionar desde el sitio del comercio hacia el formulario de Greenpay, de la siguiente manera:
- Generar la orden de tokenización (session y token) en sandbox o producción, según el ambiente.
- Construir la url, así
- Sandbox: http://sandbox-checkoutform.greenpay.me/{{session}}
- Producción: https://checkout-form.greenpay.me/{{session}}
A continuación, se muestra un ejemplo en javascript de cómo hacer el redireccionamiento.
const express = require("express");
const app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: true
}));
app.get("/order", async function (req, res) {
try {
const security = await postOrder(order);
//console.log(security);
} catch (err) {
res.send(err);
}
});
Al hacer el redireccionamiento, se les presentará un formulario para que el usuario ingrese los datos de la tarjeta a la cual se le aplicará el cargo.

Cuando se envía los datos y se obtiene la respuesta, el formulario la envía al URL callback de la orden de pago. La respuesta es un JSON codificado en BASE64 (callbackURL/BASE64), como se muestra en la siguiente imagen.
Se requiere que exista una función en el destino (callback) que capture la respuesta en BASE 64 y lo de-codifique. A continuación, se muestra un ejemplo de cómo obtener la respuesta.
app.get("/callback/:data", async function (req, res) {
try {
//get the response in base64
const data = req.params.data;
//decode the response in base64
var responsejson = Buffer.from(data, 'base64').toString();
console.log(responsejson);
res.send(JSON.parse(responsejson));
} catch (err) {
res.send(err);
}
});
A continuación, se muestra un ejemplo de la respuesta JSON.
- {
- "statusCode": 200,
- "body": {
- "status": 200,
- "orderId": "xwr-123455",
- "authorization": "533793",
- "last4": "7777",
- "brand": "Visa",
- "result": {
- "time_local_tran": "165407",
- "systems_trace_audit_number": "000283",
- "success": true,
- "retrieval_ref_num": "701016540713",
- "resp_code": "00",
- "reserved_private4": null,
- "proc_code": "000000",
- "network_international_id": "0003",
- "mti": "0210",
- "merchant_id": 485,
- "date_local_tran": "0110",
- "card_acceptor_terminal_id": "00112478",
- "authorization_id_resp": "533793"
- },
- "errors": [],
- "callback": "http://yourcallback.url/getcheckoutform/response%22,
- "_signature": "2e9d23b194905314561b8c750f7a7...beab114d717ec6"
- }
- }
3. Obtener las respuestas en un webhook.
Como se menciona en la sección de consideraciones del widget, es recomendado tener un webhook habilitado. Por favor revisar el artículo
Recibir la respuesta en el webhook.
El webhook permite obtener la respuesta en un backend ante un eventual timeout o desconexión del usuario a internet, entre otros.