Cobrar con links de pago
Cobra con links de pago usando la librería landapay: crea el link, compártelo y confirma el pago con tarjeta, Nequi, Bancolombia o PSE antes de entregar.
Cómo funciona
- Tu servidor crea un link de pago de monto fijo con la librería.
- Envías al cliente a la
urldel link, donde paga con tarjeta, Nequi, Bancolombia o PSE. - El cliente vuelve a tu
redirectUrlcon el id del pago. - Confirmas el estado del pago o esperas el webhook y entregas el pedido.
Crear el link
import { landapay } from "landapay"; const link = await landapay.paymentLinks.create({ title: "Pedido A-1001", description: "2 camisetas talla M", amount: 15_000_000, // $150.000 COP expiresAt: "2026-12-31T23:59:59", paymentMethods: { pse: false }, redirectUrl: "https://tutienda.com/pago/resultado", metadata: { orderId: "A-1001" },}); await savePaymentLink("A-1001", link.id);return link.url;amountva en centavos:15_000_000son $150.000 COP.currencyesCOPpor defecto. Los links enUSDse cobran en COP con la tasa del día.paymentMethodses opcional: por defecto se aceptan todos los métodos habilitados en el proyecto. Envíafalseen los que quieras ocultar.expiresAtes opcional y puede ir hasta un año en el futuro. Un texto sin zona horaria se toma como hora de Colombia.- Usa
metadatapara guardar el id del pedido de tu sistema.
Compartir el link
Redirige al cliente a link.url desde tu sitio o envíasela por WhatsApp, correo o SMS. El mismo link sirve mientras esté activo y no haya vencido.
Confirmar el pago
Cuando el pagador vuelve a tu redirectUrl recibes payment_id y payment_link_id en la URL. Confirma siempre el estado con landapay.payments.retrieve antes de entregar el pedido.
Solo approved confirma un cobro
pending mientras la entidad lo confirma, o terminar en declined o error. No entregues el pedido solo porque el cliente volvió a tu URL.app.get("/pago/resultado", async (req, res) => { const payment = await landapay.payments.retrieve(String(req.query.payment_id)); const order = await findOrder(payment.paymentLink); // amount y order.total van en centavos de la moneda del link if (payment.status === "approved" && payment.amount >= order.total) { await markOrderPaid(payment.paymentLink, payment.id); return res.redirect("/gracias"); } res.redirect("/pago/pendiente");});Para no depender de que el cliente vuelva, escucha el evento payment.approved en tu servidor. Mira cómo en Recibir webhooks.
Probar la integración
Crea el link con una llave lp_sk_test_. El checkout muestra el aviso de modo de prueba y solo acepta tarjetas y números de prueba, sin mover dinero real. Cuando todo funcione, cambia LANDAPAY_API_KEY por tu llave lp_sk_live_.
Editar y desactivar
await landapay.paymentLinks.update(link.id, { amount: 12_000_000 }); await landapay.paymentLinks.disable(link.id); // deja de recibir pagosawait landapay.paymentLinks.enable(link.id); // vuelve a recibirlosCambiar amount solo afecta el próximo cobro de ese link. Un pago ya aprobado por el monto anterior no paga un pedido nuevo, y un total distinto necesita un link nuevo.
Revisa todos los campos en la referencia de links de pago.