Cobra en tu tienda con EvePay

Tres pasos, desde tu servidor. No hay SDK que instalar ni JavaScript que pegar en tu página: son tres llamadas HTTP.

  1. Creas el cobro. Tu servidor llama a POST /v1/pagos con el monto y tu referencia. La respuesta trae un checkoutUrl.
  2. Mandas al comprador a pagar. Lo rediriges a ese checkoutUrl. Cuando termina, vuelve a la página de tu tienda que registraste.
  3. Recibes el aviso y despachas. EvePay llama a tu webhook con payment.completed. Verificas la firma y marcas el pedido como pagado.

El paso 3 es el que decide, no el paso 2. Que el comprador vuelva a tu página no significa que te hayan pagado: pudo cerrar la pestaña, o abrir esa dirección a mano. Despacha cuando llegue el webhook. Es el error más común al integrar una pasarela, y cuesta mercancía.

El cobro, completo

curl https://api.evetev.com/v1/pagos \
  -H "Authorization: Bearer evpk_tu_llave" \
  -H "Idempotency-Key: pedido-4417" \
  -H "Content-Type: application/json" \
  -d '{
    "merchantId": "33333333-3333-4333-8333-333333333333",
    "montoMinor": 89000,
    "moneda": "COP",
    "referencia": "pedido-4417",
    "urlRetorno": "https://tutienda.co/pedido/4417/gracias"
  }'

En PHP, que es donde está buena parte del comercio colombiano:

<?php
$ch = curl_init("https://api.evetev.com/v1/pagos");
curl_setopt_array($ch, [
  CURLOPT_POST => true,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer " . getenv("EVEPAY_LLAVE"),
    "Idempotency-Key: pedido-4417",
    "Content-Type: application/json",
  ],
  CURLOPT_POSTFIELDS => json_encode([
    "merchantId"  => $merchantId,
    "montoMinor"  => 89000,          // en pesos: COP no tiene centavos
    "moneda"      => "COP",
    "referencia"  => "pedido-4417",
    "urlRetorno"  => "https://tutienda.co/pedido/4417/gracias",
  ]),
]);
$cobro = json_decode(curl_exec($ch), true);

header("Location: " . $cobro["checkoutUrl"]);

Y en Node:

const res = await fetch("https://api.evetev.com/v1/pagos", {
  method: "POST",
  headers: {
    authorization: `Bearer ${process.env.EVEPAY_LLAVE}`,
    "idempotency-key": "pedido-4417",
    "content-type": "application/json"
  },
  body: JSON.stringify({
    merchantId,
    montoMinor: 89000, // en pesos: COP no tiene centavos
    moneda: "COP",
    referencia: "pedido-4417",
    urlRetorno: "https://tutienda.co/pedido/4417/gracias"
  })
});

const cobro = await res.json();
redirigir(cobro.checkoutUrl);

Por dónde seguir

Empieza por lo que hay que dejar listo antes: sin registrar tu sitio, la API rechaza los cobros. Después, crear un cobro y recibir el aviso.

Todo lo que está aquí sale del código de EvePay o de una prueba real contra la pasarela. Si algo no te cuadra con lo que ves, escríbenos: el error es nuestro.