Guide développeur

Relier un site existant à la boutique Ondes PRO

Votre site tourne déjà — en Next.js, Astro, WordPress, Symfony ou en HTML pur — et vous voulez y vendre sans migrer vers un constructeur de site. Ce guide montre comment afficher le catalogue Ondes PRO, gérer le panier et encaisser par Stripe depuis vos propres pages, avec deux variantes : tout dans le navigateur, ou côté serveur avec l’API REST. Ondes PRO garde la main sur les prix, le stock et les commandes.

L’équipe Ondes PROMis à jour le
.ondes.pro/mcp/

Tapez le nom de votre espace : les configurations de cette page s’adaptent. Il est retenu dans ce navigateur seulement.

Ondes PRO expose deux portes, qui ne se mélangent pas. La boutique publique (/shop/api/…) est anonyme et pensée pour être appelée en fetch() depuis le navigateur d’un visiteur : catalogue, panier, paiement. L’API REST v1 (/api/v1/…) exige une clé et se réserve au code qui tourne chez vous, côté serveur.

La règle qui en découle est simple : une clé API ne quitte jamais votre serveur. Un site statique ou une application monopage utilise la boutique publique ; un site rendu côté serveur peut préférer l’API v1, qui offre l’idempotence et le mode test. Les deux aboutissent au même endroit : une commande dans Boutique & Commandes, payée sur le compte Stripe de votre société.

Afficher le catalogue et encaisser depuis votre site, étape par étape

Cette variante fonctionne avec n’importe quelle technologie, puisque tout se passe dans le navigateur. Remplacez le sous-domaine en haut de page pour adapter les adresses.

  1. Déclarez l’origine de votre site

    Dans API & Développeurs → Origines autorisées (ou, dans Configuration, la section « Laisser un site web interroger cet espace »), ajoutez l’adresse exacte de votre site (https://www.atelier-lumen.fr, sans chemin). Sans cette déclaration, le navigateur bloque les réponses de votre espace et rien ne s’affiche — ce n’est pas une panne de l’API, c’est la protection CORS. Le réglage est réservé au superutilisateur.

  2. Connectez votre compte Stripe

    Toujours dans Configuration, cliquez sur « Connecter mon compte Stripe ». Le paiement arrive directement sur votre compte, par Stripe Connect. Une filiale sans compte propre encaisse sur celui de la société mère.

  3. Chargez le catalogue

    Un appel anonyme renvoie les produits publiés, groupés par catégorie. La réponse est mise en cache côté Ondes PRO : appelez-la à chaque affichage sans scrupule.

    javascript
    const reponse = await fetch('https://votre-espace.ondes.pro/shop/api/products/');
    const catalogue = await reponse.json();
    // Affichez nom, prix et image de chaque produit dans vos propres gabarits.
  4. Créez le panier et ajoutez des articles

    Un premier GET /shop/api/cart/ sans paramètre crée un panier et renvoie son cart_token : conservez-le dans le localStorage. Chaque ajout ou changement de quantité passe par POST /shop/api/cart/update/?cart_token=….

    javascript
    await fetch('https://votre-espace.ondes.pro/shop/api/cart/update/?cart_token=' + cartToken, {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ action: 'set', product_id: 12, quantity: 2 }),
    });
  5. Préparez le paiement

    POST /shop/api/payment-intent/ avec le cart_token et les coordonnées du client renvoie un client_secret. Le montant est recalculé par Ondes PRO à partir du panier : un prix modifié dans le navigateur ne change rien. Un panier qui mélange les produits de deux sociétés est refusé (400), car un encaissement ne se partage pas entre deux comptes.

  6. Confirmez avec Stripe.js

    Chargez Stripe.js par la balise <script src="https://js.stripe.com/v3/"> et confirmez le paiement avec le client_secret. La clé publiable de votre compte se lit une fois côté serveur (voir plus bas) ; elle est publique par construction et peut figurer dans la page.

  7. Recevez la confirmation par webhook

    Déclarez l’adresse de votre serveur dans API & Développeurs, onglet Mode test, section webhooks : l’événement commande.payee y arrive, signé par l’en-tête Ondes-Signature. Les endpoints de test et de production sont distincts, et chacun s’active séparément.

Le paiement côté navigateur, en entier

Un exemple minimal avec le Payment Element de Stripe. La clé publiable (pk_…) est celle de votre compte connecté.

javascript
const stripe = Stripe('pk_live_…');

const reponse = await fetch('https://votre-espace.ondes.pro/shop/api/payment-intent/', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    cart_token: cartToken,
    email: 'contact@maison-verdier.fr',
    first_name: 'Claire',
    last_name: 'Verdier',
  }),
});
const { client_secret } = await reponse.json();

const elements = stripe.elements({ clientSecret: client_secret });
elements.create('payment').mount('#paiement');

document.querySelector('#payer').addEventListener('click', async () => {
  await stripe.confirmPayment({
    elements,
    confirmParams: { return_url: 'https://www.atelier-lumen.fr/merci' },
  });
});

Le montant ne transite jamais par le navigateur : il est calculé par Ondes PRO à partir du panier.

Variante côté serveur : créer la commande avec l’API REST

Si votre site a un serveur (Next.js, Laravel, Django, Rails…), la ressource shop/commandes de l’API v1 crée en un appel la commande et son paiement : la réponse contient déjà paiement.client_secret, à transmettre à Stripe.js. Ce secret n’est renvoyé qu’à la création, jamais relu ensuite. Une clé portant shop:write suffit.

Deux protections rendent cette voie confortable. L’en-tête Idempotency-Key garantit qu’un réessai après une coupure réseau ne crée pas une seconde commande — donc ne débite pas deux fois. Et le jumeau /api/v1/test/shop/commandes/ crée une commande de test, invisible des chiffres d’affaires, avec une page de paiement simulée renvoyée dans paiement.checkout_url.

Créer une commande de test depuis votre serveur

bash
curl -X POST https://votre-espace.ondes.pro/api/v1/test/shop/commandes/ \
  -H "Authorization: ApiKey opk_…" \
  -H "Idempotency-Key: panier-7f3c2a91" \
  -H "Content-Type: application/json" \
  -d '{
    "items": [{"product": 12, "quantity": 2}],
    "email": "contact@maison-verdier.fr",
    "first_name": "Claire",
    "last_name": "Verdier",
    "return_url": "/merci"
  }'

Retirez /test pour la production. GET /api/v1/shop/commandes/configuration-paiement/ indique le compte Stripe applicable et sa publishable_key.

« Relier mon site » : un agent qui fait l’intégration dans votre dépôt GitHub

Vous préférez déléguer ? Dans Boutique & Commandes, l’onglet Mon site relie le dépôt de votre site, sur GitHub ou dans Ondes GIT. Un agent IA lit votre code, pose ses questions avant d’écrire (où placer la grille de produits, quelle page de remerciement), puis propose un diff à relire. Rien n’est validé ni envoyé sur votre dépôt sans votre décision, et l’agent ne force jamais un envoi : en cas de conflit, il crée une branche.

L’agent travaille avec un contrat dérivé des routes réelles de votre espace, de vos produits et de votre configuration Stripe et CORS : il ne peut pas inventer un endpoint qui répondrait 404 chez vos clients. Il n’exécute aucune commande et n’ajoute aucune dépendance — Stripe.js arrive par une simple balise <script>. La connexion GitHub passe par OAuth, et le jeton n’est jamais écrit dans la configuration git du dépôt. Plus de détails sur la page GitHub.

Avec votre assistant de code connecté par MCP

Si vous codez l’intégration vous-même, connectez votre assistant au serveur MCP de l’espace : il lit la fiche exacte des ressources au lieu de deviner les champs.

Claude Code · Exemple de conversation · données de démonstration (Atelier Lumen)
  1. Vous : Sur notre site Astro, génère au build une page par produit de la catégorie Suspensions, avec le prix barré quand il existe.
  2. Outil MCP : ondes_ressource Fiche shop/produits : champs name, price, compare_at_price, sku, filtre par catégorie, pagination.
  3. Outil MCP : ondes_appeler GET shop/produits?page_size=50 — 9 produits, dont la Suspension Pétrole (189 €) et la Suspension Laiton (245 €, barré 290 €).
  4. Assistant : J’ajoute src/pages/suspensions/[sku].astro : l’appel à l’API se fait au build avec la clé lue dans ONDES_API_KEY, jamais exposée au navigateur. Le prix barré s’affiche quand compare_at_price est renseigné. Le bouton « Ajouter au panier » appelle la boutique publique, qui n’a pas besoin de clé.

Pour aller plus loin

Questions fréquentes

Faut-il reconstruire mon site pour vendre avec Ondes PRO ?

Non. Votre site garde sa technologie et son design ; il appelle la boutique publique d’Ondes PRO pour le catalogue, le panier et le paiement. Ondes PRO gère les prix, le stock et les commandes, que vous retrouvez dans Boutique & Commandes.

Pourquoi mon site affiche-t-il une erreur CORS ?

Parce que son origine n’est pas déclarée. Ajoutez l’adresse exacte du site (schéma et domaine, sans chemin) dans API & Développeurs → Origines autorisées. Le réglage est réservé au superutilisateur de l’espace.

Puis-je mettre ma clé API dans le JavaScript du site ?

Non, jamais. Une clé API s’utilise uniquement côté serveur. Le navigateur passe par la boutique publique /shop/api/, qui n’exige aucune clé et recalcule les montants elle-même.

Sur quel compte Stripe arrive l’argent ?

Sur le compte Stripe connecté de la société qui vend les produits du panier, ou sur celui de la société mère si la filiale n’en a pas connecté. La ressource shop/commandes/configuration-paiement/ indique le compte applicable.

Comment tester le paiement sans encaisser ?

Côté serveur, appelez /api/v1/test/shop/commandes/ : la commande est marquée test, n’entre dans aucun chiffre et renvoie une page de paiement simulée. Les webhooks de test et de production sont configurés séparément.

L’agent « Relier mon site » peut-il modifier mon site sans mon accord ?

Non. Il travaille sur une copie, pose ses questions, puis présente un diff. Valider et envoyer sur votre dépôt restent deux décisions explicites de votre part, et il ne force jamais l’envoi.

Branchez votre IA sur votre entreprise

Le serveur MCP est inclus dans toutes les offres, sans option ni supplément.

À lire aussi