DocumentationStripe Checkout

03 · Revenus

Lier les ventes Stripe Checkout à leurs visites

Deux petites modifications là où votre serveur crée la session : l’identifiant du visiteur dans les métadonnées, et l’identifiant de la session sur votre page de confirmation.

01Transmettre l’identifiant du visiteur dans les métadonnées

Là où votre serveur crée la session Checkout, lisez le cookie _tally_vid et transmettez-le en tally_visitor_id dans metadata. Pour un abonnement, transmettez-le aussi dans subscription_data.metadata, pour que ses renouvellements suivent le premier paiement. En mode payment, omettez subscription_data : Stripe ne l’accepte que pour les abonnements.

Afficher le code pour

// Express with cookie-parser (app.use(require('cookie-parser')())), where you create
// the Checkout Session; stripe = require('stripe')(process.env.STRIPE_SECRET_KEY).
app.post('/checkout', async (req, res) => {
  const visitorId = req.cookies['_tally_vid'];
  const metadata = visitorId ? { 'tally_visitor_id': visitorId } : {};
  const session = await stripe.checkout.sessions.create({
    mode: 'subscription',
    line_items: [{ price: 'price_123', quantity: 1 }],
    success_url: 'https://example.com/thanks?session_id={CHECKOUT_SESSION_ID}',
    metadata,
    // Renewals read the subscription's metadata. In payment mode, leave this line out.
    subscription_data: { metadata },
  });
  res.redirect(303, session.url);
});

// app/api/checkout/route.ts
import { cookies } from 'next/headers';
import Stripe from 'stripe';

const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!);

export async function POST() {
  const visitorId = (await cookies()).get('_tally_vid')?.value;
  const metadata: Record<string, string> = visitorId ? { 'tally_visitor_id': visitorId } : {};
  const session = await stripe.checkout.sessions.create({
    mode: 'subscription',
    line_items: [{ price: 'price_123', quantity: 1 }],
    success_url: 'https://example.com/thanks?session_id={CHECKOUT_SESSION_ID}',
    metadata,
    // Renewals read the subscription's metadata. In payment mode, leave this line out.
    subscription_data: { metadata },
  });
  return Response.json({ url: session.url });
}

# Flask, where you create the Checkout Session (stripe.api_key is your secret key).
import stripe
from flask import redirect, request


@app.post("/checkout")
def checkout():
    visitor_id = request.cookies.get("_tally_vid")
    metadata = {"tally_visitor_id": visitor_id} if visitor_id else {}
    session = stripe.checkout.Session.create(
        mode="subscription",
        line_items=[{"price": "price_123", "quantity": 1}],
        success_url="https://example.com/thanks?session_id={CHECKOUT_SESSION_ID}",
        metadata=metadata,
        # Renewals read the subscription's metadata. In payment mode, leave this line out.
        subscription_data={"metadata": metadata},
    )
    return redirect(session.url, code=303)

# Rails: app/controllers/checkouts_controller.rb (Stripe.api_key is your secret key).
class CheckoutsController < ApplicationController
  def create
    visitor_id = cookies['_tally_vid']
    metadata = visitor_id ? { 'tally_visitor_id' => visitor_id } : {}
    session = Stripe::Checkout::Session.create(
      mode: 'subscription',
      line_items: [{ price: 'price_123', quantity: 1 }],
      success_url: 'https://example.com/thanks?session_id={CHECKOUT_SESSION_ID}',
      metadata: metadata,
      # Renewals read the subscription's metadata. In payment mode, leave this line out.
      subscription_data: { metadata: metadata }
    )
    redirect_to session.url, allow_other_host: true, status: :see_other
  end
end

<?php
// Where you create the Checkout Session (stripe/stripe-php).
$stripe = new \Stripe\StripeClient(getenv('STRIPE_SECRET_KEY'));

$visitorId = $_COOKIE['_tally_vid'] ?? null;
$metadata = $visitorId ? ['tally_visitor_id' => $visitorId] : [];

$session = $stripe->checkout->sessions->create([
  'mode' => 'subscription',
  'line_items' => [['price' => 'price_123', 'quantity' => 1]],
  'success_url' => 'https://example.com/thanks?session_id={CHECKOUT_SESSION_ID}',
  'metadata' => $metadata,
  // Renewals read the subscription's metadata. In payment mode, leave this line out.
  'subscription_data' => ['metadata' => $metadata],
]);

header('Location: ' . $session->url, true, 303);

02Garder l’identifiant de session sur votre page de confirmation

Ajoutez ?session_id={CHECKOUT_SESSION_ID} à success_url (à return_url pour Checkout intégré), avec l’adresse de votre propre page. Stripe y insère l’identifiant de la session, et le snippet de cette page le transmet : le paiement est ainsi lié même quand le cookie n’a pas pu être lu. Un paramètre checkout_session_id fonctionne aussi.

URL de confirmation
https://yoursite.com/thanks?session_id={CHECKOUT_SESSION_ID}

03Sur un site sans cookie

Sans cookie, il n’y a pas d’identifiant à mettre dans les métadonnées : c’est donc par la page de confirmation qu’un paiement retrouve sa visite. Un visiteur sans cookie dure une journée : elle lie donc le paiement à la visite de ce jour-là.

04Vérifier que ça marche

Il manque quelque chose, ou ce n’est pas ce que vous voyez ? Écrivez à support@tallybyoutpost.com en précisant la page.