Checkout hébergé
Trois façons d'afficher la page de paiement Wajub et les options de chacune.
Le checkout hébergé est la page de paiement complète affichée par Wajub : choix du moyen de paiement, récapitulatif de commande, OTP, 3DS, coupons et livraison. Vous choisissez son emplacement. La configuration reste identique dans les trois cas. Vous devez seulement choisir entre une intégration en ligne, une superposition ou une redirection.
Vous cherchez plutôt la présentation du produit ?
Cette page présente l'interface d'intégration. Pour découvrir les fonctionnalités de la page hébergée destinées au payeur et savoir quand la préférer à votre propre mise en page, consultez Paiements, Checkout hébergé.
Quelle option choisir ?
| Mode | Appel | Le payeur | À choisir lorsque |
|---|---|---|---|
| En ligne | mount(el, config) | Reste sur votre page | Le checkout constitue la page |
| Superposition | open(config) | Reste sur votre page, dans une fenêtre modale | Le checkout interrompt une autre action |
| Redirection | checkout(config) | Accède à pay.wajub.com | Vous souhaitez écrire un minimum de code front-end |
Les trois options nécessitent un sessionId, qui correspond à la valeur authorization_token de
POST /payments. Aucune ne nécessite de clé.
En ligne
mount accepte un sélecteur ou un élément et renvoie l'instance que vous pouvez ensuite piloter.
import { mount } from '@wajub/js';
const checkout = await mount('#checkout', {
sessionId,
onSuccess: () => (window.location.href = '/order/complete'),
onError: (error) => showRetry(error),
});Vous n'avez pas besoin de réserver la hauteur
Le SDK attribue une valeur min-height: 480px à son espace réservé de chargement et à son iframe.
Il définit lui-même la hauteur réelle à chaque agrandissement du checkout. Un élément vide
<div id="checkout"></div> suffit.
Deux situations génèrent une erreur immédiate : l'absence de sessionId et un sélecteur qui ne
correspond à aucun élément. Toutes deux génèrent une simple Error lors de l'appel, avant toute requête réseau.
Configuration
Chaque option ci-dessous est aussi une prop de CheckoutEmbed dans React,
Vue et Svelte.
| Option | Type | Valeur par défaut | Fonction |
|---|---|---|---|
sessionId | string | Obligatoire | La valeur authorization_token de votre serveur |
locale | string | Valeur de la session | fr, en, es, pt, ar |
layout | CheckoutLayout | Valeur de la session | classic, compact, tabs, accordion |
appearance | AppearanceConfig | Image de marque de la session | Apparence |
embedOrigin | string | Origine de la page actuelle | Votre origine canonique pour les boutiques sur plusieurs domaines |
loadingText | string | Vide | Texte dans l'espace réservé |
showLoading | boolean | true | Définissez false pour afficher votre propre squelette |
theme | EmbedTheme | Dérivée | Ancienne option remplie par le SDK depuis appearance |
Callbacks
await mount('#checkout', {
sessionId,
onReady: (instance) => (checkoutRef = instance),
onSuccess: (transaction) => markPaidInTheInterface(transaction),
onError: (error) => console.error(error.code, error.message),
onLoadError: (error) => showSessionExpired(error),
onBreakdown: (b) => (total.textContent = `${b.total.toLocaleString()} ${b.currency}`),
});| Callback | Déclenchement | Valeur reçue |
|---|---|---|
onReady | Session chargée et formulaire visible | CheckoutInstance |
onSuccess | Paiement réussi | Objet de transaction |
onError | Échec du paiement | WajubError |
onLoadError | Jeton invalide ou final, ou refus de chargement de l'iframe | WajubError |
onCancel | Annulation explicite par le payeur | Rien |
onExpired | Expiration de la session pendant le paiement | Rien |
onBreakdown | Modification des totaux par un coupon ou un choix de livraison | { subtotal, discount, tax, total, currency } |
onStateChange | Passage du checkout à un autre état | { state, method } |
onMethodChange | Choix d'un autre moyen de paiement par le payeur | { methodId, method_id } |
onResize | Modification de la hauteur de l'iframe, uniquement en ligne | height en pixels |
onClose | Fermeture de la superposition, uniquement en superposition | Rien |
onResize est fourni à titre informatif
Le SDK applique déjà la nouvelle hauteur à sa propre iframe. Utilisez ce callback pour déplacer un autre élément de la page, comme un récapitulatif fixe ou un pied de page, pas pour dimensionner le checkout.
onSuccess se déclenche dans un navigateur. Traitez-le comme un signal de l'interface. Livrez la commande à la réception du
webhook.
Piloter l'instance
checkout.getState(); // 'COLLECTING_DETAILS', 'PROCESSING', …
checkout.update({ locale: 'en' });
checkout.update({ appearance: { colorScheme: 'dark' } });
checkout.update({ currency: 'USD' }); // multi currency sessions only
checkout.selectMethod('pm_momo');
checkout.submit();
checkout.retry();
checkout.cancel();
checkout.destroy();update({ layout }) est la seule option sans effet
locale, appearance et currency sont envoyés au checkout et appliqués en direct. layout est
uniquement enregistré dans la configuration locale. Les moyens de paiement conservent donc leur
disposition initiale. Pour modifier la mise en page, remontez le checkout ou configurez-la sur la session.
Superposition
Même configuration, mêmes callbacks et même instance, avec la fenêtre modale en plus.
import { open } from '@wajub/js';
const popup = await open({
sessionId,
width: 960,
closeOnOverlay: true,
onSuccess: (transaction) => fulfillOrder(transaction),
onClose: () => console.log('dismissed'),
});
popup.isOpen();| Option | Valeur par défaut | Fonction |
|---|---|---|
width | 920 | Largeur maximale de la fenêtre modale en pixels |
height | 680 | Hauteur de la fenêtre modale en pixels |
closeOnOverlay | false | Ferme lors d'un clic sur l'arrière-plan |
closeOnEscape | true | Ferme avec la touche Échap |
closeOnSuccess | true | Ferme peu après l'exécution de onSuccess |
closeOnCancel | true | Ferme peu après l'exécution de onCancel |
closeOnExpired | true | Ferme peu après l'exécution de onExpired |
La fermeture de la fenêtre modale masque uniquement l'interface. La session reste ouverte jusqu'à sa réussite, son expiration ou son annulation dans le checkout. Le même jeton permet donc encore de la monter.
onResize ne se déclenche jamais en mode superposition, car la fenêtre modale possède une hauteur fixe.
Redirection
Ce mode demande le moins de code et constitue le seul où callback est utile.
// The URL your server already received from POST /payments
window.location.href = authorizationUrl;
// Or, when the browser only has the token
import { checkout } from '@wajub/js';
await checkout({ sessionId });Le payeur revient sur l'URL de callback définie lors de la création du paiement, avec
?status=complete|cancelled|failed|expired. Ce paramètre d'URL est une indication. Le
webhook fournit la confirmation. Consultez
Sessions et sécurité pour le contrat complet.
Style
Le checkout utilise déjà l'image de marque de votre compte, configurée une fois dans le Dashboard.
Transmettez appearance uniquement pour modifier cette intégration précise, par exemple pour un
bouton de mode sombre ou la couleur d'une campagne.
await mount('#checkout', {
sessionId,
layout: 'tabs',
appearance: { theme: 'night', primaryColor: '#6366f1', labels: 'floating' },
});La liste complète des clés figure dans Apparence. Les valeurs par défaut du compte sont présentées dans Image de marque et thème.