Gérer soi-même la TVA et les taxes de vente dans des dizaines de pays, ou confier cette charge à un revendeur officiel qui s’en occupe à la place de l’éditeur : c’est le choix auquel fait face tout développeur qui vend la version premium de son extension WordPress hors de la seule zone euro. Une passerelle de paiement classique encaisse l’argent, mais laisse à l’éditeur la responsabilité de calculer, déclarer et reverser la TVA selon le pays de l’acheteur. Paddle fonctionne différemment : il agit comme revendeur officiel (« merchant of record »), ce qui change la nature de l’intégration à mettre en place.
Le problème posé
Un éditeur d’extension freemium vend des licences annuelles à des clients situés aussi bien dans l’Union européenne qu’aux États-Unis, au Canada ou en Australie. Chaque juridiction applique ses propres règles de taxe sur les logiciels vendus en ligne, avec des taux et des seuils différents. Construire et maintenir ce calcul en interne représente une charge disproportionnée pour une petite structure, sans même évoquer les obligations déclaratives qui en découlent.
Ce que Paddle prend en charge à la place d’une intégration maison

En agissant comme revendeur officiel, Paddle facture le client final en son propre nom, calcule automatiquement la taxe applicable selon la localisation de l’acheteur, l’inclut dans le prix affiché, et reverse ensuite à l’éditeur le montant net de sa commission. L’éditeur ne reçoit jamais directement une TVA à déclarer : Paddle s’en charge en tant qu’entité facturante.
| Responsabilité | Intégration de paiement classique | Paddle |
|---|---|---|
| Encaissement du paiement | À la charge de l’éditeur | Pris en charge par Paddle |
| Calcul de la TVA/taxe locale | À développer et maintenir soi-même | Calculé automatiquement selon le pays |
| Déclaration fiscale | À la charge de l’éditeur | Assurée par Paddle en tant que revendeur |
| Facture émise au client | Au nom de l’éditeur | Au nom de Paddle |
| Activation de la licence | Développée sur mesure | Toujours à développer, via webhook |
Ce qui reste à développer côté extension
Paddle ne gère ni le stockage des licences, ni leur vérification côté extension : cette partie reste entièrement à la charge de l’éditeur, via les webhooks envoyés par Paddle à chaque événement de paiement. Un point de terminaison REST personnalisé reçoit ces événements et active la licence correspondante :
add_action( 'rest_api_init', function() {
register_rest_route( 'licences/v1', '/paddle-webhook', array(
'methods' => 'POST',
'callback' => 'licences_traiter_webhook_paddle',
'permission_callback' => '__return_true',
) );
} );
function licences_traiter_webhook_paddle( WP_REST_Request $request ) {
$corps = $request->get_json_params();
if ( ! licences_verifier_signature_paddle( $request ) ) {
return new WP_REST_Response( null, 403 );
}
if ( 'transaction.completed' === $corps['event_type'] ) {
$email = $corps['data']['customer']['email'] ?? '';
$cle = wp_generate_password( 24, false );
update_option( 'licence_' . md5( $email ), array(
'cle' => $cle,
'statut' => 'active',
) );
wp_mail( $email, 'Votre licence', 'Voici votre clé : ' . $cle );
}
return new WP_REST_Response( null, 200 );
}
La vérification de signature, propre à Paddle, reste indispensable pour s’assurer que la notification provient bien de Paddle et non d’un tiers malveillant tentant de forger une activation de licence gratuite.
Variantes
Gérer les remboursements et rétrofacturations
Les événements transaction.payment_failed et les remboursements initiés côté Paddle doivent désactiver la licence correspondante avec la même logique de webhook, en retrouvant la licence via l’email ou l’identifiant de transaction transmis par Paddle plutôt qu’en dupliquant une logique de calcul de taxe côté extension.
Distinguer abonnement et achat unique
Paddle propose aussi bien la facturation récurrente que le paiement ponctuel. Pour une licence annuelle, l’événement subscription.updated permet de suivre les renouvellements et d’étendre automatiquement la date d’expiration stockée côté extension.
Afficher un prix TTC cohérent avant paiement
L’API Paddle de calcul de prix (« Pricing Preview ») peut être interrogée côté page de vente pour afficher un prix TTC déjà localisé selon le pays détecté du visiteur, évitant la surprise d’un montant différent au moment du paiement final.
Notre verdict
Pour un éditeur qui vend son extension freemium à l’international, Paddle déplace la complexité fiscale hors du périmètre de développement, au prix d’une commission sur chaque vente et d’une facture émise au nom de Paddle plutôt qu’au nom de l’éditeur. La partie technique restant à développer, l’activation de licence par webhook, reste comparable quel que soit le prestataire de paiement choisi.