Wajub.js
Le package principal pour navigateur, ce qu'il charge, ce qu'il exporte et comment l'appeler.
Tous les checkouts Wajub reposent sur le package @wajub/js. Les packages React, Vue et Svelte
l'enveloppent. Cette page présente uniquement le package principal : ce qu'il charge, ce qu'il
exporte et les trois façons d'accéder à la même API.
@wajub/js
Stable · GAnpm + CDN
- Version
- 1.5.0
- Runtime
- Any modern browser (ES2020+)
Couvre
- Paiements
- Liens de paiement
Absent de ce paquet : Facturation, Transferts, Sync, Shield, Taxes.
Le package npm est un chargeur, pas l'environnement d'exécution
L'installation de @wajub/js n'ajoute pas le checkout à votre bundle. Ce petit chargeur récupère
le véritable environnement d'exécution depuis https://js.wajub.com lors du premier appel.
| Élément installé | Taille | Contenu |
|---|---|---|
@wajub/js depuis npm | Environ 11 Ko | Chargeur, types et helpers exportés |
https://js.wajub.com | Environ 168 Ko | Checkout lui-même, iframes, moyens de paiement et états |
Il n'existe aucun build hors ligne
Les deux parcours aboutissent à la même origine. Une correction liée aux cartes ou un nouvel
opérateur atteint votre checkout sans nouveau déploiement de votre côté, c'est l'objectif. En
revanche, un navigateur qui ne peut pas accéder à js.wajub.com ne dispose d'aucun checkout.
Prenez cette origine en compte comme vous le faites pour l'API.
Content Security Policy
Une page qui applique une Content-Security-Policy stricte doit autoriser les hôtes que le SDK
charge, intègre et appelle. Sans eux, le navigateur bloque le runtime ou le cadre du checkout et
signale la violation dans la console.
| Directive | Hôte | Raison |
|---|---|---|
script-src | https://js.wajub.com | Le runtime que le chargeur récupère, ou la balise script |
frame-src | https://pay.wajub.com | Le checkout hébergé, la superposition et chaque champ de paiement |
connect-src | https://pay.wajub.com | fetchSession(), signals() et le préchargement du checkout |
connect-src | https://api.wajub.com | createPayment() et initCheckout() avec une clé publique |
img-src | https://pay.wajub.com | Le logo Wajub dans le pied de la superposition |
script-src https://js.wajub.com;
frame-src https://pay.wajub.com;
connect-src https://pay.wajub.com https://api.wajub.com;
img-src https://pay.wajub.com;Si vous servez le checkout depuis votre propre domaine vérifié, utilisez cet hôte partout où
pay.wajub.com apparaît. La page du checkout définit elle-même sa politique ; la vôtre ne régit que
la page qui l'entoure.
Trois points d'entrée
Ils fournissent la même API. Seuls le moment du chargement de l'environnement d'exécution et la nécessité d'un bundler changent.
| Point d'entrée | Chargement de l'environnement d'exécution | Cas d'utilisation |
|---|---|---|
@wajub/js | Lors de l'importation | Vous utilisez un bundler et la page affiche toujours un checkout |
@wajub/js/pure | Uniquement lors de l'appel de loadWajub() | Vous effectuez un rendu serveur ou le checkout s'ouvre après un clic |
https://js.wajub.com | Lors du chargement du script | Aucun bundler, HTML simple |
Installez le package avec votre gestionnaire habituel. Il est uniquement distribué comme module ES.
Un appel CommonJS require() ne peut donc pas le résoudre.
npm install @wajub/jsSans bundler, la balise script ajoute wajub, Wajub et WajubError à window. Le build .mjs
utilise le même environnement d'exécution avec des exports nommés.
<script src="https://js.wajub.com"></script>
<!-- or, as a module -->
<script type="module">
import { mount } from 'https://js.wajub.com/wajub.mjs';
</script>Trois façons d'appeler la même API
Chaque méthode ci-dessous existe sous les trois formes. Choisissez-en une par projet et conservez-la. Leur mélange rend l'ordre de chargement difficile à comprendre.
Les helpers nommés constituent la solution la plus courte. Chacun charge et attend lui-même l'environnement d'exécution.
import { mount, open, checkout, fetchSession, confirmPayment } from '@wajub/js';
const instance = await mount('#checkout', { sessionId });loadWajub() vous remet plutôt l'environnement d'exécution. Le chargement intervient donc au moment
que vous choisissez. Il renvoie null en l'absence de window, ce qui sécurise le rendu serveur.
import { loadWajub } from '@wajub/js/pure';
const rt = await loadWajub();
if (rt) {
const instance = await rt.wajub.mount('#checkout', { sessionId });
}Depuis le CDN, les mêmes objets se trouvent sur window et rien ne doit être attendu.
const instance = await wajub.mount('#checkout', { sessionId });Éléments exportés par le package
loadWajub() et les helpers qui reproduisent l'environnement d'exécution. wajub, Wajub et
WajubError ne sont pas exportés par le module, même si les types déclarent WajubError : prenez-les
dans ce que renvoie loadWajub().
| Export | Description |
|---|---|
loadWajub() | Renvoie { wajub, Wajub, WajubError }, ou null sur le serveur |
mount, open, checkout, components, confirmPayment | Quatre modes avec l'envoi des champs |
fetchSession, preload | Lit une session ou prépare l'environnement d'exécution avant son utilisation |
getVersion(), getCheckoutOrigin() | Version chargée de l'environnement d'exécution et son origine |
Retenez surtout preload() : appelez cette fonction lorsque le client atteint le panier afin que
l'environnement d'exécution se trouve déjà en cache au moment du paiement.
Le client Wajub()
Les méthodes de l'environnement d'exécution nécessitent un sessionId à chaque appel. Le client le
conserve plutôt une seule fois. Il constitue aussi le seul moyen de créer un paiement depuis le navigateur.
Seule une clé de sandbox est reconnue en 1.5.0
Le client ne prend une clé pour une clé publique que si elle commence par pk_. Une clé live,
pk.…, est lue comme un id de session, et chaque appel sur ce client échoue. Utilisez pk_test.
dans la sandbox, et en live créez la session sur votre serveur.
const client = Wajub('pk_test.xxxxxxxxxxxxxxxx…');
const client = Wajub.session(sessionId);
const client = Wajub({ publishableKey: 'pk_test.xxxxxxxxxxxxxxxx…', sessionId });| Méthode | Fonction |
|---|---|
createPayment(params) | Appelle POST /payments avec la clé publique et renvoie la session |
useSession(sessionId) | Associe un jeton existant au client |
fetchSession() | Montant, devise, nom du marchand, moyens de paiement enregistrés et options |
preload() | Charge l'environnement d'exécution avant son utilisation |
mount(el, config), open(config), checkout(config) | Les trois modes hébergés |
components(config) | Fabrique des champs |
confirmPayment(options) | Envoie un composant de champ et attend le résultat |
initCheckout(options) | Crée le paiement et le monte en un appel |
initCheckout couvre tout le flux sans backend. Il nécessite une clé publique, car la page définit le montant.
await Wajub('pk_test.xxxxxxxxxxxxxxxx…').initCheckout({
mode: 'inline',
container: '#checkout',
payment: { amount: 35000, currency: 'XOF', customer: { email: '[email protected]' } },
onSuccess: (transaction) => console.log('paid', transaction),
});Une clé secrète dans un navigateur est refusée et signalée
Une clé secrète ne doit jamais être utilisée depuis un navigateur. Quand Wajub en détecte une,
l'API la refuse avec une réponse 403 et alerte le propriétaire de la clé par e-mail. Utilisez
pk_test. ici dans la sandbox, ou créez la session sur votre serveur et envoyez uniquement le jeton au navigateur.
Sur le serveur
loadWajub() et chaque helper renvoient null en l'absence de window. Le rendu serveur ne génère
donc jamais d'erreur. La différence concerne l'importation : @wajub/js charge le script comme effet
de bord, tandis que @wajub/js/pure ne fait rien avant son appel.
import { loadWajub } from '@wajub/js/pure';
payButton.addEventListener('click', async () => {
const rt = await loadWajub();
await rt?.wajub.open({ sessionId });
});Les trois packages de framework importent déjà /pure pour vous. Ce point est important lorsque
vous intégrez vous-même le package principal.
Où chaque sujet est documenté
Cette page se limite au package. Chaque fonctionnalité de l'environnement d'exécution possède sa propre page.
| Votre objectif | Documentation à lire |
|---|---|
| Monter, ouvrir ou rediriger avec toutes les options et tous les callbacks | Checkout hébergé |
| Créer votre propre mise en page autour des champs | Champs de paiement |
| Créer la session et connaître les possibilités du jeton | Sessions et sécurité |
| Modifier les couleurs, le thème, la locale et la mise en page | Apparence |
| Consulter chaque méthode, type et état du checkout | Référence API |
| Utiliser les bons types avec ou sans npm | TypeScript |
| Comprendre pourquoi rien ne s'affiche | Dépannage de Wajub Components |
Utiliser un framework