Aller au contenu

SDKs mobiles

Une architecture, trois packages et une interface de paiement native sans WebView.

Les trois SDKs mobiles reposent sur la même conception dans trois langages. Votre serveur crée le paiement et transmet un authorization_token à l'application. Celle-ci crée une session à partir du jeton et affiche une interface native. Le payeur ne quitte jamais votre application.

Ce parcours n'utilise aucune WebView, c'est tout son intérêt. Les champs Mobile Money sont natifs et les champs de carte utilisent les composants natifs de Stripe. Seule une vérification 3DS ou une redirection bancaire ouvre le navigateur du système.

Les trois packages

PlateformePackageRegistreVersion
Flutterwajub_mobilepub.dev1.1.1
React Native@wajub/react-nativenpm1.1.1
Androidcom.wajub:wajub-mobile-coreMaven Central1.1.0
Androidcom.wajub:wajub-mobile-composeMaven Central1.1.0

Le flux en une fois

Les trois SDKs suivent ces cinq étapes. Vous devez uniquement concevoir celle du milieu.

Lieu d'exécution de chaque partie
Your server                          Your app
───────────                          ────────
POST /payments with sk.
  returns authorization_token  ──▶   createSession(token)

                                       ├─ loads the session and its channels
                                       ├─ shows the sheet you chose
                                       └─ processes the payment natively

webhook payment.succeeded     ◀──────────┘
  fulfils the order

Le jeton est le seul identifiant détenu par l'application. Il est limité à un paiement, expire et ne permet pas de lister, de rembourser ou de lire quoi que ce soit d'autre sur votre compte. Votre clé secrète reste sur votre serveur.

Endpoints réellement utilisés par la session

Le SDK appelle api.wajub.com/pay/* avec Authorization: Bearer {token}. La page de checkout hébergé utilise les mêmes endpoints. L'interface mobile se comporte donc de la même façon et prend en charge les mêmes opérateurs.

EndpointUtilisation par le SDK
GET /pay/sessionMontant, devise, image de marque et canaux disponibles
GET /pay/sdk-configParamètres du prestataire par canal, dont la clé publique Stripe
POST /pay/processEnvoie le paiement sur le canal choisi
GET /pay/statusInterroge le résultat lorsque le temps réel est indisponible
POST /pay/cancelAbandonne la session et renvoie une URL de redirection

Choisir l'interface

Chaque SDK propose deux niveaux. L'interface de paiement est la solution rapide. Utilisez les méthodes de session si le paiement doit s'intégrer à votre propre design.

Votre objectifSolution
Un paiement fonctionnel dès maintenantL'interface de paiement fournie
Vos propres écrans et votre image de marqueLes méthodes de session, payMobileMoney et payCard
Afficher le montant avant le paiementloadSession(), puis l'affichage de votre choix
Un statut en direct pendant la confirmation du payeurwatchStatus()

Temps réel ou polling

La session contient un bloc echo lorsque le temps réel est activé sur le compte. S'il est présent, le SDK s'abonne avec Pusher et reçoit immédiatement le résultat. Sinon, il se replie sur un polling de GET /pay/status toutes les cinq secondes. Dans les deux cas, votre code appelle watchStatus() sans avoir à choisir.

Le webhook reste responsable de la livraison de la commande

Une confirmation Mobile Money peut arriver après la fermeture de l'application par le payeur. Le téléphone peut aussi perdre le réseau pendant l'approbation. Utilisez le résultat de l'interface pour choisir l'écran à afficher et le webhook pour livrer les biens.

Montants et erreurs sont également partagés

Les montants utilisent partout l'unité principale. Ainsi, 25000 en XAF correspond à vingt-cinq mille francs. Le type d'erreur est la même union de cinq possibilités dans les trois SDKs.

Type d'erreurSignification
authenticationErrorLe jeton a expiré, a déjà été utilisé ou est inconnu
invalidRequestErrorLe canal a refusé un champ, identifié par param
paymentErrorLe prestataire a refusé le paiement, declineCode indique la raison
rateLimitErrorTrop de tentatives, retryAfterSeconds indique le délai d'attente
apiErrorErreur côté Wajub ou problème réseau

Chaque erreur contient retryable, qui détermine s'il faut proposer une nouvelle tentative au payeur.

Choisir votre plateforme

Que pensez-vous de ce contenu ?