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.
// 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.
https://yoursite.com/thanks?session_id={CHECKOUT_SESSION_ID}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.