Vendre des biens physiques : les parcours de paiement
Sur cette page
Leçon réécrite le 3 novembre 2026 d’après la Checkout API reference, la page Add UI to your MCP server et les Plugin guidelines d’OpenAI. L’ancienne version vendait des abonnements et des produits numériques avec des fonctions inventées (
defineProduct,commerceFlow) et une commission de 30 %/15 % sans source : les règles des plugins limitent aujourd’hui le commerce aux biens physiques, et la documentation ne mentionne aucune commission. Sources : Checkout API reference · Plugin guidelines.
Ce qui peut se vendre
Commençons par la règle, car elle conditionne tout le reste. Les règles de publication d’OpenAI sont nettes : un plugin ne peut faire du commerce que pour des biens physiques. Vendre des produits ou des services numériques — abonnements, contenus numériques, jetons, crédits — est interdit, directement ou indirectement, par exemple au moyen d’un upsell freemium. Une liste de biens et de services interdits s’y ajoute (contenus pour adultes, jeux d’argent, médicaments sur ordonnance, armes, tabac et nicotine, logiciels piratés, services financiers trompeurs, entre autres) ; la leçon 13 revient sur ce qu’un service à abonnement peut tout de même faire.
Dans ce cadre, OpenAI documente trois parcours de paiement.
Parcours 1 : le paiement externe, la voie par défaut
Le paiement externe est l’approche recommandée et disponible pour tous. L’interface du plugin présente les produits éligibles, avec par exemple un bouton « Acheter » ; quand l’utilisateur se décide, elle l’envoie vers le tunnel de paiement hébergé sur votre propre domaine. Prix, encaissement, taxes, remises, livraison, remboursements, support et conformité restent entièrement chez vous. Après l’achat, l’utilisateur peut revenir dans ChatGPT avec sa confirmation de commande ou son suivi de livraison.
Pour ouvrir ce lien, ChatGPT fournit l’extension window.openai.openExternal({ href }), qui ouvre un lien contrôlé dans le navigateur de l’utilisateur. Les destinations de redirection autorisées se déclarent dans _meta["openai/widgetCSP"].redirect_domains : la politique standard _meta.ui.csp ne couvre pas ce cas. Pour une destination approuvée, ChatGPT ajoute par défaut un paramètre ?redirectUrl=… à l’adresse ; redirectUrl: false l’en empêche.
function ouvrirPaiement(urlPanier) {
if (window.openai?.openExternal) {
window.openai.openExternal({ href: urlPanier });
} else {
// Hôte sans cette extension : laissez l'utilisateur copier le lien
document.querySelector("#lien-paiement").textContent = urlPanier;
}
}
Les règles le précisent : tant que le paiement intégré n’est pas ouvert à votre plugin, le paiement externe est la voie obligatoire, et aucune autre solution de paiement tierce ne peut être intégrée ni hébergée dans l’interface du plugin.
Parcours 2 : les moyens de paiement déjà enregistrés
Pour des achats éligibles de biens physiques, l’interface peut proposer au client un moyen de paiement qu’il a déjà enregistré chez vous. L’utilisateur choisit ce moyen et confirme l’achat dans ChatGPT, sans quitter la conversation ; votre serveur MCP traite la commande et renvoie la confirmation qui fait foi. Ce parcours peut afficher des moyens enregistrés, mais il ne peut pas recueillir de nouvelles coordonnées de paiement.
Parcours 3 : la feuille de paiement ChatGPT (bêta privée)
Pour recueillir un nouveau moyen de paiement dans le parcours, il faut la feuille de paiement de ChatGPT. Ce paiement intégré est en bêta privée, réservé à certaines places de marché, et n’est pas accessible à tous les développeurs ni à tous les utilisateurs. Son fonctionnement mérite d’être connu, car il illustre la répartition des rôles entre l’hôte et votre serveur :
- Un outil MCP renvoie une session de paiement dans
structuredContent. - Le composant affiche les articles, les totaux, les conditions et les options de livraison.
- Quand l’utilisateur choisit de payer, le composant appelle
window.openai.requestCheckout(session); ChatGPT ouvre sa feuille de paiement. - Après validation, ChatGPT envoie un jeton représentant le moyen de paiement choisi à l’outil
complete_checkoutde votre serveur, qui débite via votre prestataire de paiement et renvoie la commande finalisée — résultat que reçoit le composant en réponse àrequestCheckout.
La session doit contenir un identifiant unique, les articles et leurs quantités, des totaux en unités monétaires mineures entières (des centimes, pas des euros décimaux), les métadonnées du prestataire de paiement et du marchand, et les liens obligatoires : conditions, confidentialité, remboursement, support. ChatGPT ajoute de son côté des champs qui lui appartiennent, comme merchant ou conversation_id.
Le serveur fait foi
Quel que soit le parcours, la même discipline s’impose :
- les prix et le statut de la commande viennent du serveur, jamais d’un total calculé dans le composant ;
- le jeton de paiement est vérifié, l’opération est idempotente — un double clic ne doit pas débiter deux fois —, la commande est enregistrée et un reçu de référence est renvoyé ;
- l’annulation, le refus de paiement et les erreurs du prestataire sont gérés dans le composant ; pour la feuille de paiement, les erreurs
payment_declinedetrequires_3dsrenvoyées parcomplete_checkouts’affichent directement dans la feuille de ChatGPT.
Pour la feuille de paiement, payment_mode: "test" permet de tester le parcours de bout en bout avec des cartes de test, sans mouvement de fonds réel.
Garder les outils utiles sans interface
Comme pour le reste du plugin, le catalogue et les commandes doivent rester accessibles par des outils utilisables sans composant. L’interface sert à présenter les produits, les prix, les conditions et les choix de paiement avant confirmation ; elle ne remplace pas des outils de données solides, et elle ne décide jamais d’un prix.
Points clés à retenir
- Un plugin ne vend que des biens physiques : abonnements, contenus numériques, crédits et upsells freemium sont interdits
- Le paiement externe, sur votre domaine, est la voie recommandée et disponible pour tous ;
openExternalouvre le lien - Les moyens de paiement enregistrés peuvent être proposés, pas collectés
- La feuille de paiement ChatGPT (
requestCheckout+complete_checkout) est en bêta privée, réservée à certaines places de marché - Le serveur fait foi : prix calculés côté serveur, opérations idempotentes, montants en unités mineures