Démarrage rapide
Créez un lien de paiement, partagez-le, et encaissez sans écrire d'intégration.
Un lien de paiement est une URL qui encaisse de l'argent. Aucune intégration derrière : vous décrivez ce que vous vendez, Wajub héberge la page, et vous partagez l'adresse. Le payeur l'ouvre, choisit son opérateur, et paie.
C'est le seul des quatre modes de paiement qui ne demande aucun code, et le seul que vous ne pouvez pas essayer en sandbox.
Production uniquement, et soumis au plan
Les liens de paiement n'existent pas dans la sandbox. Chaque lien est actif et encaisse de
l'argent réel dès le premier partage : pour tester, vous payez un petit montant réel que vous
remboursez ensuite. La fonctionnalité exige aussi payment_links dans votre plan : 25 liens
avec Pay as you go, illimités à partir de Growth. Au-delà du plafond, la création répond 403
avec un message de mise à niveau.
1. Choisissez l'usage du lien
Le type détermine la forme de la page et les champs qui deviennent obligatoires. Il en existe
quatre, et le choix n'est pas cosmétique : un lien de collecte de fonds affiche une barre de
progression, un lien d'événement affiche une date et un lieu.
| Type | Ce que voit le payeur | Ce qu'il exige |
|---|---|---|
product | Un prix fixe que vous définissez | price |
event | Une date, un lieu, un nombre de billets | event_start_date, event_location, event_timezone |
fundraising | Une campagne avec un objectif et sa progression | target_amount |
donation | Un montant libre, ou borné par vous | Rien de plus que l'essentiel |
Au-delà du type, chaque lien a besoin d'un title d'au moins trois caractères, d'une currency,
et d'un cta_type qui fixe le libellé du bouton : buy_now, pay, donate, register, ou
custom avec votre propre custom_cta_text.
Un lien product prend aussi un product_type, parmi physical, digital ou service, qui fait
apparaître plus bas les champs de stock, de livraison ou de réservation.
2. Créez-le
Le Dashboard est la voie la plus rapide : Links → New link parcourt les mêmes champs avec un aperçu à côté. Ce qui suit est l'équivalent par l'API, pour le cas où les liens sont générés par votre propre logiciel.
https://api.wajub.com/linkstypeenumobligatoireproduct, event, fundraising ou donation.titlestringobligatoirecurrencystringobligatoirecta_typeenumobligatoirebuy_now, pay, donate, register ou custom.pricenumberfacultatifproduct. Le montant fixe débité au payeur.target_amountnumberfacultatiffundraising. L'objectif que remplit la barre de progression.min_amountnumberfacultatifdonation.max_amountnumberfacultatifdonation.custom_urlstringfacultatifdescriptionstringfacultatifcallback_urlstring (url)facultatifexpiry_datestring (date)facultatifsales_limitintegerfacultatifsingle_use_linkbooleanfacultatifsales_limit: 1.extra_fieldsarrayfacultatifis_publicbooleanfacultatifdéfaut : false404 aux payeurs tant que ce champ ne vaut pas true.Envoyez-le avec la clé secrète. Les liens n'existent qu'en live, la clé est donc sk. et non
sk_test..
curl https://api.wajub.com/links \
-H "Authorization: sk.kZ3qP8mWvL2xR7tB5nY4hC6dF9jS1aG0eU3i…" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: link-cafe-amina" \
-d '{
"type": "product",
"product_type": "physical",
"title": "Café Amina, 250 g",
"currency": "XAF",
"price": 3500,
"cta_type": "buy_now",
"custom_url": "cafe-amina",
"is_public": true
}'La réponse est 201 Created, et url est ce que vous cherchiez : l'adresse que vous partagez,
construite à partir de votre custom_url si vous en avez défini un, et de l'id généré sinon.
Un lien est privé tant que vous ne le publiez pas
is_public vaut false par défaut, et un lien non public répond 404 This payment link is not available à tous ceux qui l'ouvrent. Créer par l'API implique d'envoyer is_public: true, sinon
l'URL que vous partagez est morte. Le Dashboard expose le même interrupteur sous le nom Status du
lien, et un lien créé là est donc lui aussi privé tant que vous ne le publiez pas.
Le QR code est généré par le Dashboard, pas par l'API
qr_url revient null sur un lien créé par l'API, et reste null jusqu'à ce que quelqu'un ouvre
ce lien dans le Dashboard, qui génère l'image au premier affichage. Si vous avez besoin du QR code
depuis votre propre code, générez-le vous-même à partir de url ; rien dans le lien ne dépend du
fait que Wajub l'ait dessiné.
Un id de lien n'a pas de préfixe comme le reste de l'API
Les paiements sont trx_…, les clients cus_…, mais un id de lien est une chaîne nue de neuf
caractères comme 8kD2xQpLm, parce qu'il sert aussi de slug dans l'URL. Définissez custom_url
et c'est votre slug qui apparaît dans l'adresse à la place ; l'id reste ce que vous passez à
GET /links/{id}.
3. Posez une question au payeur, si besoin
Un numéro de table, une taille de T-shirt, une note de livraison : extra_fields ajoute des champs
à la page et transmet les réponses jusqu'au paiement.
Ce que le payeur saisit revient sur le paiement, imbriqué sous ses métadonnées plutôt qu'étalé
dessus : c'est donc dans metadata.extra_fields.table que se trouve le numéro de table. Lisez-le
là dans votre handler de webhook, et vous avez la réponse à côté de l'argent.
4. Partagez-le
L'url fonctionne partout où une URL fonctionne : un message WhatsApp, une bio, un SMS, une affiche
imprimée. Rien à intégrer, et aucune page à vous n'intervient. Pour une affiche, le Dashboard vous
donne le QR code sur la page du lien, prêt à télécharger.
Par défaut, un lien est hébergé sur wajub.link. Avec le plan Scale, un domaine personnalisé
vérifié le sert à la place, et l'adresse que voit le payeur est la vôtre.
Sur la page, le payeur voit les opérateurs disponibles dans son pays, la même liste que propose le checkout hébergé : MTN, Orange, Wave, Airtel, Moov, M-Pesa et les cartes là où le pays les prend en charge. La matrice complète est dans Moyens de paiement.
5. Soyez prévenu quand quelqu'un paie
Un lien produit des paiements ordinaires. Il n'existe pas d'événement link.paid : ce que vous
écoutez, c'est payment.succeeded, exactement comme pour les autres modes.
| Événement | Déclenché quand |
|---|---|
payment.succeeded | Quelqu'un a payé via le lien. Livrez la commande sur celui-ci |
link.created | Un lien a été créé |
link.updated | Un lien a été modifié, archivé ou désarchivé |
link.deleted | Un lien a été supprimé |
Définir un callback_url renvoie ensuite le payeur vers votre page, mais c'est une attention pour
lui, pas un signal pour vous. Considérez le webhook comme la source de vérité, comme toujours.
Webhooks couvre l'enregistrement et la vérification de signature.
Fermer un lien
Trois façons différentes, selon ce que vous entendez par fermer.
| Vous voulez | Définissez |
|---|---|
| Qu'il s'arrête à une date | expiry_date |
| Qu'il s'arrête après N ventes | sales_limit |
| Qu'il s'arrête après une vente | sales_limit: 1, et non single_use_link, qui n'est jamais appliqué |
Un lien peut aussi être archivé avec is_archived via PUT /links/{id}, ce qui le retire de vos
listes sans détruire ce qu'il a déjà encaissé. DELETE /links/{id} le supprime purement et
simplement.
Dans le Dashboard
Links, c'est tout le produit sans l'API. Création, modification, archivage, plus trois choses que l'API n'expose pas : les statistiques par lien avec vues et conversion, les transactions produites par chaque lien, et ses clients, exportables et joignables par e-mail groupé.
La section exige la fonctionnalité payment_links dans le plan et la permission view_links ou
manage_links, et elle est entièrement masquée tant que vous êtes en sandbox.
Pages associées
- Vue d'ensemble des liens de paiementCe qu'est le produit, et quand un lien vaut mieux qu'une intégration.
- PersonnalisationCouleurs de marque, logo, et champs de la page.
- Suivi et conversionsVues, taux de conversion, et vie d'un lien.
- Moyens de paiementLes opérateurs que voient vos payeurs, pays par pays.
- WebhooksEnregistrez un endpoint et vérifiez la signature.
- Référence API des liens de paiementChaque champ de la ressource, et les cinq endpoints.