DocumentaciónPaddle

03 · Ingresos

Conecta Paddle y vincula sus ventas con visitas

Tally lee las transacciones, los reembolsos y los contracargos de Paddle Billing con una clave que solo puede leer.

01Conectar Paddle

  1. Crea una clave de API en Paddle

    Tally solo lee tus transacciones; nunca necesita mover dinero. Una clave de API solo puede hacer lo que permitas, y puedes revocarla cuando quieras. En Paddle, abre Developer tools, Authentication, elige New API key y dale estos permisos:

    PermisoAccesoPor qué
    TransactionLecturaCada pago: su importe, impuestos, origen y datos personalizados.
    AdjustmentLecturaReembolsos y contracargos.
    CustomerLecturaEl email del cliente, para cotejarlo con tally('identify'): convertido en hash al instante, nunca guardado.
    Notification settingEscrituraTally añade su propio destino de notificaciones, para que los pagos lleguen en segundos.

    Deja desactivados todos los demás permisos. Para probar primero, usa una clave de sandbox de sandbox-vendors.paddle.com.

  2. Pega la clave de API

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

    • API key: empieza por pdl_live_apikey_ (o por pdl_sdbx_apikey_ en el sandbox). Tally la guarda cifrada y nunca vuelve a mostrarla.

    Después pulsa Connect Paddle.

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

    Nombra cualquier permiso que le falte a la clave, añade su propio destino de notificaciones para que los pagos nuevos lleguen en cuanto ocurren e importa los últimos 365 días, reembolsos y contracargos incluidos.

02Pasa el ID del visitante en customData

Donde abras el checkout con Paddle.js, lee la cookie _tally_vid y pásala como tally_visitor_id en customData. Paddle la guarda en la transacción y la copia a la suscripción, así que las renovaciones la siguen. Una transacción que crea tu servidor la recibe en custom_data.

Mostrar el código para

// Where you open the checkout (Paddle.js, after Paddle.Initialize).
const visitorId = (document.cookie.match(/(?:^|; )_tally_vid=([\w-]+)/) || [])[1];
Paddle.Checkout.open({
  items: [{ priceId: 'pri_123', quantity: 1 }],
  // customData needs at least one key, so it is left out without a visitor id.
  ...(visitorId ? { customData: { 'tally_visitor_id': visitorId } } : {}),
});

// Express with cookie-parser: a transaction your server creates for the checkout.
app.post('/checkout', async (req, res) => {
  const visitorId = req.cookies['_tally_vid'];
  const response = await fetch('https://api.paddle.com/transactions', {
    method: 'POST',
    headers: {
      Authorization: 'Bearer ' + process.env.PADDLE_API_KEY,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      items: [{ price_id: 'pri_123', quantity: 1 }],
      custom_data: visitorId ? { 'tally_visitor_id': visitorId } : null,
    }),
  });
  const { data } = await response.json();
  // On the page: Paddle.Checkout.open({ transactionId: data.id }).
  res.json({ transactionId: data.id });
});

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.