DocumentaciónPolar

03 · Ingresos

Conecta Polar y vincula sus pedidos con visitas

Tally lee los pedidos, reembolsos y disputas perdidas de Polar con un token que solo tiene los ámbitos que necesita.

01Conectar Polar

  1. Crea un token de acceso en Polar

    Tally solo lee tus pedidos; nunca necesita mover dinero. En Polar, abre Settings, Access Tokens, crea un token de acceso de organización y dale solo estos ámbitos:

    PermisoAccesoPor qué
    Organizationsorganizations:readEl nombre de la organización, para que sepas cuál está conectada.
    Ordersorders:readCada pago: su importe, impuestos, metadatos y el email del cliente (convertido en hash al instante, nunca guardado).
    Refundsrefunds:readReembolsos.
    Disputesdisputes:readContracargos: las disputas que perdiste.
    Webhookswebhooks:writeTally añade su propio endpoint de webhook, para que los pagos lleguen en segundos.

    También sirve un token de sandbox: Tally prueba el sandbox de Polar cuando el entorno de producción no reconoce el token.

  2. Pega el token de acceso

    En la página Integrations de tu sitio (o en el paso Payments al añadir un sitio), abre Polar y rellena:

    • Access token: empieza por polar_oat_. Tally lo guarda cifrado y nunca vuelve a mostrarlo.

    Después pulsa Connect Polar.

  3. Tally lo comprueba e importa el último año

    Nombra cualquier ámbito que le falte al token, añade su propio endpoint de webhook para que los pedidos nuevos lleguen en cuanto ocurren e importa los últimos 365 días, reembolsos y disputas perdidas incluidos.

02Pasa el ID del visitante en los metadatos

Donde tu servidor cree el checkout, lee la cookie _tally_vid y pásala como tally_visitor_id en metadata: Polar la copia al pedido y a la suscripción, así que las renovaciones la siguen. En un enlace de checkout, añade el ID del visitante como reference_id, que Polar guarda en los metadatos del checkout.

Mostrar el código para

// Express with cookie-parser, where you create the Polar checkout.
app.post('/checkout', async (req, res) => {
  const visitorId = req.cookies['_tally_vid'];
  const response = await fetch('https://api.polar.sh/v1/checkouts/', {
    method: 'POST',
    headers: {
      Authorization: 'Bearer ' + process.env.POLAR_ACCESS_TOKEN,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      products: ['your-product-id'],
      metadata: visitorId ? { 'tally_visitor_id': visitorId } : {},
      success_url: 'https://example.com/thanks?checkout_id={CHECKOUT_ID}',
    }),
  });
  const checkout = await response.json();
  res.redirect(303, checkout.url);
});

// On pages with Polar checkout links: add the visitor id as reference_id. Polar's embed
// marks its links with data-polar-checkout; use your own selector for plain links.
const visitorId = (document.cookie.match(/(?:^|; )_tally_vid=([\w-]+)/) || [])[1];
for (const link of document.querySelectorAll('a[data-polar-checkout]')) {
  const url = new URL(link.href);
  if (visitorId && !url.searchParams.has('reference_id')) {
    url.searchParams.set('reference_id', visitorId);
    link.href = url.href;
  }
}

03En un sitio sin cookies

Sin cookie no hay ID que pasar, así que identifica al comprador con el email con el que paga: objetivos e identify.

04Comprueba que funciona

05Lo que no se lee

¿Falta algo o no coincide con lo que ves? Escribe a support@tallybyoutpost.com y dinos qué página.