Comment collecter des dons en ligne pour une association loi 1901 sans transformer son site vitrine en boutique en ligne ? La question s’est posée sur un projet de refonte pour une association d’aide alimentaire locale : un seul besoin, un bouton « Faire un don », et surtout aucune envie d’installer WooCommerce avec son catalogue de produits, ses commandes et sa configuration fiscale, pour gérer un unique formulaire de paiement.
Stripe Checkout, la page de paiement hébergée par Stripe, permet justement ce genre d’intégration minimaliste : le site ne stocke ni ne manipule jamais de donnée bancaire, il se contente de créer une session de paiement et de rediriger le visiteur vers la page sécurisée de Stripe. Voici comment ce bouton a été intégré directement dans un template de page du thème, étape par étape.
Étape 1 : installer le SDK Stripe côté thème
Le SDK PHP de Stripe s’installe via Composer, dans le dossier du thème plutôt qu’à la racine de WordPress, pour garder cette dépendance isolée et facile à retirer si l’association change un jour de prestataire de paiement :
cd wp-content/themes/mon-theme
composer require stripe/stripe-php
L’autoload généré par Composer est ensuite chargé depuis functions.php :
require_once get_stylesheet_directory() . '/vendor/autoload.php';
\Stripe\Stripe::setApiKey( getenv( 'STRIPE_SECRET_KEY' ) );
Étape 2 : créer un template de page dédié
Un template page-don.php affiche le contenu explicatif de la page (rédigé par l’association) puis un formulaire minimal qui déclenche la création de la session Stripe côté serveur :
<?php
/* Template Name: Faire un don */
get_header();
the_content();
?>
<form method="post" action="<?php echo esc_url( home_url( '/creer-session-don/' ) ); ?>">
<label for="montant">Montant du don (en euros)</label>
<input type="number" id="montant" name="montant" min="5" step="1" value="20">
<button type="submit">Faire un don</button>
</form>
<?php get_footer(); ?>

Étape 3 : générer la session côté serveur
Un point d’entrée dédié, déclaré via add_rewrite_rule, reçoit le montant saisi et crée la session Stripe Checkout correspondante :
add_action( 'template_redirect', function() {
if ( ! isset( $_POST['montant'] ) || ! is_page( 'don' ) ) {
return;
}
$montant_centimes = absint( $_POST['montant'] ) * 100;
$session = \Stripe\Checkout\Session::create( array(
'payment_method_types' => array( 'card' ),
'line_items' => array( array(
'price_data' => array(
'currency' => 'eur',
'product_data' => array( 'name' => 'Don à l\'association' ),
'unit_amount' => $montant_centimes,
),
'quantity' => 1,
) ),
'mode' => 'payment',
'success_url' => home_url( '/merci-pour-votre-don/' ),
'cancel_url' => home_url( '/don/' ),
) );
wp_redirect( $session->url, 303 );
exit;
} );
Le visiteur est redirigé vers la page Stripe hébergée, saisit sa carte directement sur l’infrastructure de Stripe, puis revient sur le site via l’URL de succès définie plus haut.
Montants libres et prédéfinis
Le champ numérique du formulaire peut être remplacé par des boutons radio proposant des montants suggérés (10, 20, 50 euros) plus un champ libre, ce qui augmente en général le montant moyen des dons par rapport à un simple champ vide. Cette liste de montants reste éditable directement dans le template, sans dépendre d’un réglage d’administration supplémentaire :
- Montants suggérés : 10 €, 20 €, 50 €.
- Champ libre pour un montant personnalisé, avec un minimum fixé à 5 € côté serveur (pas seulement côté formulaire).
- Aucun compte utilisateur requis pour faire un don, contrairement à un tunnel WooCommerce classique.
Reçu fiscal et suivi des dons
Ce tutoriel s’arrête volontairement à la confirmation du paiement. La génération du reçu fiscal (Cerfa 11580) et le suivi comptable des dons pour la déclaration annuelle de l’association relèvent d’un processus distinct, généralement géré par le trésorier via l’export des paiements réussis depuis le tableau de bord Stripe.
En résumé
Pour un besoin de paiement isolé comme un bouton de don associatif, Stripe Checkout intégré directement dans un template de thème apporte l’essentiel (sécurité, simplicité, aucune donnée bancaire stockée) sans la complexité d’une boutique WooCommerce complète installée pour un seul usage.