embed.js ouvre le checkout IzichangePay dans une modale (iframe) directement sur votre page, au lieu de rediriger le client vers la page de paiement hébergée. Le client paie sans quitter votre site ; à la fin, le bouton de sortie devient simplement « Fermer » et la modale se referme.
Le payment intent est toujours créé côté serveur avec votre clé secrète. embed.js ne fait qu’afficher un intent déjà créé : aucune clé n’est exposée au navigateur.

Démo live — IziShop

Boutique e-commerce de démonstration qui intègre embed.js en conditions réelles (Tron testnet, paiement en TRX / USDT). Ajoutez un article au panier puis lancez le paiement : la modale de checkout s’ouvre sans quitter la page, exactement comme décrit dans ce guide.

Ajouter un bouton « Payer »

Trois façons d’intégrer, du plus simple au plus flexible :
Dans tous les cas, la clé secrète sk_… ne quitte jamais le serveur. Le navigateur ne manipule qu’un identifiant public : le publicId de l’intent ou le slug du produit. La confirmation fait toujours foi via le webhook signé payment_intent.completed.

Générateur de bouton

Choisissez la forme (pill · rounded · soft), la couleur (teal · sombre · bleue) et la taille (sm · normal · lg · xl), prévisualisez en direct, puis copiez le code HTML ou JS. Le bouton utilise toujours la police de marque (Typold) et votre logo.
Vous pouvez aussi ouvrir le générateur en plein écran (utile sur mobile).

Méthode 1 — Bouton sans code (lien Produit)

Pour un montant fixe, aucun serveur n’est nécessaire. Créez un produit dans le dashboard (Vente → Produits) : vous obtenez un lien https://checkout.pay.izichange.com/pay/product/<slug>. Le montant est figé côté IzichangePay — le client ne peut pas le modifier. Collez le loader, puis un bouton portant l’attribut data-izipay-url :
embed.js câble automatiquement tout élément [data-izipay-url] (ou [data-izipay-intent]) : au clic, la modale s’ouvre. Pas une ligne de JavaScript. Pour réagir au résultat, écoutez les CustomEvents émis sur le bouton :
izipay:success est un signal d’interface. Ne livrez jamais la commande dessus seul : la source de vérité reste le webhook payment_intent.completed traité côté serveur.

Méthode 2 — Bouton géré par le SDK (montant dynamique)

Pour un montant calculé (panier), le bouton appelle votre serveur au clic — le modèle des Smart Buttons PayPal. embed.js dessine le bouton ; votre serveur crée l’intent avec la clé secrète et renvoie son publicId ; la modale s’ouvre. Côté navigateur :
Côté serveur (Node + SDK) — la clé secrète reste ici :
render(target) accepte un sélecteur CSS ou un élément DOM et renvoie { element }.

Méthode 3 — Ouverture programmée

Si vous pilotez vous-même le déclencheur, créez l’intent côté serveur puis appelez IziPay.open(...).

Créer l’intent côté serveur

Comme pour le flux par redirection, créez un payment intent et récupérez sa réponse (qui contient id et paymentUrl). Renvoyez paymentUrl (ou id) à votre page.

Ouvrir la modale côté client

Incluez le loader, puis appelez IziPay.open() :
N’utilisez jamais onSuccess seul pour livrer la commande : c’est un signal d’interface. La source de vérité reste votre webhook payment_intent.completed (signé), traité côté serveur. Voir Webhooks.

Options de IziPay.open(options)

IziPay.open() renvoie un handle { close(), getIframe() } pour piloter la modale par programme :

Événements

Sous le capot, le widget communique avec votre page via postMessage. Les callbacks ci-dessus correspondent à ces événements :

Sécurité

  • Le widget n’envoie ses messages qu’à l’origine exacte de votre page (jamais *) : le navigateur ne les délivre qu’à votre site.
  • embed.js n’accepte en retour que les messages provenant de l’origine du widget IzichangePay.
  • Le checkout autorise l’embarquement par iframe (frame-ancestors) car c’est sa fonction ; aucune action de paiement n’est déclenchée sans envoi crypto explicite du client.

Intégration en ligne (sans modale)

Pour intégrer le checkout dans une section de votre page plutôt qu’en surimpression :

Sandbox

En environnement de test, chargez le loader depuis le checkout sandbox :