Aller au contenu

Intégration des marchands

Le cycle de vie d'une connexion et ce qui est figé dès son acceptation par un marchand.

Une connexion possède deux statuts qui évoluent indépendamment. status indique si le marchand a accepté la connexion. payment_status indique si elle peut déplacer de l'argent. Une connexion peut être active tout en refusant tous les paiements. C'est la surprise la plus fréquente de cette section.

Le cycle de vie

statusSignificationOrigine
pendingCréée, personne ne l'a acceptéePOST /accounts
activeUn marchand s'est connecté et l'a autoriséeIl a ouvert le lien d'autorisation
cancelledArrêtée par vousDELETE /accounts/{id}
expiredL'invitation a expiré avant son acceptationLe temps

Il n'existe ni statut restricted ni état intermédiaire. Le statut lu est calculé, pas enregistré. Une connexion annulée renvoie cancelled, une connexion expirée renvoie expired, une connexion associée à un marchand renvoie active, et toutes les autres renvoient pending.

La création d'une connexion génère un jeton d'autorisation à usage unique et le renvoie dans une URL.

Réponse pour une connexion non revendiquée
{
"id": "acc_7Yh2MpL4tRb3nP8sZcXv",
"reference": "shop-amina",
"status": "pending",
"payment_status": "inactive",
"authorization_url": "https://sync.wajub.com/oauth/v2/authorize?access_token=…"
}

Le marchand ouvre le lien, se connecte à son propre compte Wajub, consulte les capacités demandées, puis accepte. Votre plateforme ne manipule jamais ses identifiants et ne crée rien de son côté.

Une invitation ne reste pas ouverte indéfiniment : elle expire 30 jours après avoir été créée, et un rappel part trois jours avant à l'adresse que vous avez indiquée pour le marchand. Passé ce délai, le nettoyage l'annule et révoque son jeton : le lien qui dort dans la boîte du marchand cesse de fonctionner.

Une fois la connexion revendiquée, authorization_url disparaît de la réponse. slave apparaît à sa place avec le nom et l'adresse e-mail de l'entreprise du marchand.

Activer ensuite les paiements

L'acceptation ne donne pas l'autorisation de débiter. payment_status commence à inactive et le reste.

payment_statusEffet sur les requêtes qui contiennent X-Sync
inactivePaiements et transferts refusés avec 403
activePaiements et transferts exécutés
suspendedPaiements et transferts refusés avec 403

Wajub le fait automatiquement passer à active lorsque le contrôle de conformité du marchand est validé, puis émet account.payment_activated. C'est le parcours normal en mode live.

La sandbox est l'exception

La vérification de conformité ne s'exécute pas dans la sandbox. Une connexion de sandbox ne s'active donc jamais seule. Après sa revendication, définissez vous-même payment_status sur active avec PUT /accounts/{id}. Le même appel renvoie 400 lorsque la connexion est encore au statut pending.

Vous pouvez ensuite utiliser la suspension. Définir payment_status sur suspended arrête en même temps les paiements entrants et les transferts sortants. Ce comportement est volontaire : une connexion figée après l'échec d'un nouveau contrôle de conformité ne doit pas pouvoir vider son solde alors qu'elle ne peut plus recevoir d'argent.

Le portail du vendeur Lite

Un vendeur lite n'a pas de dashboard marchand : c'est tout l'objet du mode. Son onboarding se termine sur la demande d'accès au rail Wajub, et il utilise ensuite un portail qui lui est propre, à vos couleurs.

Ce qu'il y faitComment
Se connecterUn code à usage unique envoyé à l'adresse de la boutique — sans mot de passe, avec une session courte
Voir ses ventes et ses versementsUniquement ceux de cette connexion : jamais son autre activité, jamais celle d'une autre plateforme
Demander l'accès au rail WajubÉtape hébergée de l'onboarding ; la connexion ne peut pas encaisser tant qu'elle n'est pas approuvée
Déclarer où va son argentLa page des coordonnées de versement du portail

Ce que le marchand doit accepter à nouveau

Dès l'acceptation du marchand, deux des quatre champs modifiables cessent de dépendre de vous seul.

ChampAprès l'acceptation
capabilities202 Accepted — proposé au marchand, renvoyé dans pending_changes
pricing202 Accepted — proposé au marchand, renvoyé dans pending_changes
callbackReste librement modifiable
payment_statusReste librement modifiable, et ne l'est qu'à partir de ce moment

Cette asymétrie est volontaire. Ce que le marchand a accepté sur l'écran d'autorisation ne peut pas être modifié à son insu : une connexion élargie ou une commission relevée devient une proposition qu'il accepte ou refuse depuis son dashboard, la connexion continuant entre-temps aux conditions en vigueur. La suspension, elle, reste la vôtre et ne se propose pas.

Mettre fin à une connexion

DELETE /accounts/{id} révoque les jetons, définit status sur cancelled et émet account.deauthorized. Si le marchand avait accepté, payment_status passe également à inactive et la réponse contient Account disconnected. Pour une invitation non revendiquée, elle contient Account cancelled.

Déconnecter un marchand
curl -X DELETE https://api.wajub.com/accounts/acc_7Yh2MpL4tRb3nP8sZcXv \
  -H "Authorization: sk.kZ3qP8mWvL2xR7tB5nY4hC6dF9jS1aG0eU3i…"

La déconnexion ne modifie rien de ce qui s'est déjà produit. Le marchand conserve son compte, ses paiements et son solde. Les commissions déjà acquises restent acquises. Seule votre capacité à agir en son nom prend fin.

Les événements à écouter

Cinq webhooks décrivent le cycle de vie d'une connexion. Vous les recevez sur les endpoints de votre plateforme.

ÉvénementMoment de l'émission
account.createdVous créez une connexion
account.updatedUn élément de la connexion change, y compris son acceptation
account.payment_activatedLa connexion obtient la capacité de débiter
account.payment_suspendedVous suspendez la connexion
account.deauthorizedLa connexion est déconnectée ou annulée

De plus, chaque paiement, remboursement et transfert effectué sur un compte connecté déclenche son webhook normal pour le marchand et une copie pour votre plateforme. Vous n'avez pas besoin d'interroger régulièrement une connexion pour connaître son activité.

Que pensez-vous de ce contenu ?