Wajub.js
Le package principal pour navigateur, comment l'installer, l'autoriser dans votre CSP et l'appeler.
@wajub/js place le checkout et les champs de paiement Wajub sur n'importe quelle page. Cette page
présente son installation, la Content Security Policy qu'il demande et les trois façons de l'appeler.
@wajub/js
Stable · GAnpm + CDN
- Version
- 1.8.1
- Runtime
- Any modern browser (ES2020+)
Couvre
- Paiements
- Liens de paiement
Absent de ce paquet : Facturation, Transferts, Sync, Shield, Taxes.
Aucun build hors ligne
Que vous installiez le package npm ou utilisiez la balise script, Wajub.js se charge depuis
https://js.wajub.com. Il n'existe aucun build hors ligne ni auto-hébergé : 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 ces hôtes. Sans eux, le
navigateur bloque le checkout et signale la violation dans la console.
| Directive | Hôte | Raison |
|---|---|---|
script-src | https://js.wajub.com | Wajub.js, depuis npm 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.
Un champ de paiement dont le paiement se poursuit sur la page du prestataire, un paiement en
crypto par exemple, y emmène toute votre page, parfois avec un formulaire envoyé en POST. Si
votre politique définit form-action, elle doit autoriser cet envoi.
Un champ de paiement avec loader: 'skeleton' ajoute un élément <style> pour sa pulsation, avec
le nonce des scripts ou styles en ligne de votre page. Un style-src qui n'a ni ce nonce ni
'unsafe-inline' arrête seulement la pulsation : le squelette s'affiche toujours.
Trois points d'entrée
Ils fournissent la même API. Choisissez selon le moment où Wajub.js doit se charger et selon que vous utilisez un bundler ou non.
| Point d'entrée | Chargement de Wajub.js | 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 module .mjs
fournit les mêmes objets en 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, sans étape de chargement à écrire.
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, chargé 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
Chaque export, avec ce qu'il renvoie, est listé dans la Référence du SDK.
Retenez surtout preload() : appelez cette fonction lorsque le client atteint le panier, et le
checkout s'ouvre plus vite 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. Wajub() accepte une clé publique, de sandbox ou live, un jeton de session, ou les deux.
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, moyens enregistrés |
preload() | Prépare le checkout avant son utilisation |
signals() | Signaux de l'appareil pour un débit fait depuis votre serveur, voir Shield |
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: 'buyer@example.com' } },
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 : Wajub.js la refuse, et l'API
la refuse avec une réponse 403 et prévient le propriétaire de la clé par e-mail. Utilisez ici
votre clé publique, 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 Wajub.js dès son
importation, @wajub/js/pure seulement quand vous appelez loadWajub().
import { loadWajub } from '@wajub/js/pure';
payButton.addEventListener('click', async () => {
const rt = await loadWajub();
await rt?.wajub.open({ sessionId });
});Avec un package de framework, vous n'avez rien à faire : ce point ne compte que si vous intégrez
vous-même @wajub/js.
Où chaque sujet est documenté
Cette page se limite au package. Chaque sujet possède sa propre page.
| Votre objectif | Documentation à lire |
|---|---|
| Monter, ouvrir ou rediriger avec toutes les options et tous les callbacks | Afficher le checkout |
| 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 du SDK |
| Utiliser les bons types avec ou sans npm | TypeScript |
| Comprendre pourquoi rien ne s'affiche | Dépannage de Wajub Components |
Utiliser un framework