Développeurs

Essayez avant de nous demander quoi que ce soit.

La clé du Sandbox est publique, et elle est écrite sur cette page. Pas d’inscription, pas de clé à réclamer, pas de rendez-vous commercial. Le compte vient quand vous êtes convaincu.

Commencez ici

Copiez ce bloc. Il fonctionne.

Cette clé est publique par conception : elle est semée au démarrage du Sandbox et n’existe jamais en production. Elle ne touche aucune donnée réelle.

Un encaissement, sans rien installer
KEY=ak_sandbox
SECRET=sk_sandbox_demo
TS=$(date +%s)
IDEM=$(uuidgen)
BODY='{"amount_minor":7000,"currency":"CDF",
      "rail":"mpesa","customer_ref":"+243810000000"}'

# La signature couvre l'horodatage, la méthode, le chemin,
# la clé d'idempotence et le corps : anti-rejeu.
SIG=$(printf '%s.POST./v1/charges.%s.%s' "$TS" "$IDEM" "$BODY" \
  | openssl dgst -sha256 -hmac "$SECRET" -r | cut -d' ' -f1)

curl https://sandbox.inopas.net/v1/charges \
  -H "X-Inopas-Key: $KEY" \
  -H "X-Inopas-Timestamp: $TS" \
  -H "X-Inopas-Signature: sha256=$SIG" \
  -H "Idempotency-Key: $IDEM" \
  -H "Content-Type: application/json" \
  -d "$BODY"
Répond 201 avec l’identifiant de l’encaissement et son état. Rejouez la même clé d’idempotence : vous obtenez la même réponse, pas un second encaissement. Ce bloc se fait défiler horizontalement : la page n’en a aucun.

Clé de démonstration

Identifiant
ak_sandbox
Secret de signature
sk_sandbox_demo
Hôte
https://sandbox.inopas.net

Le Sandbox est un hôte séparé, avec ses propres données. Aucune de vos requêtes n’atteint la plateforme réelle.

Les cas d’échec

Nous vous donnons aussi ce qui ne marche pas.

Un Sandbox qui ne sait que réussir ne prépare à rien. Le dernier chiffre du numéro décide du dénouement : vous provoquez le refus et le résultat non confirmé à la demande, autant de fois que nécessaire.

customer_ref …13

Échoué

L’opérateur refuse. Votre code le dit au client sans le laisser attendre.

customer_ref …99

Non confirmé

Le délai est dépassé sans réponse de l’opérateur. Ce n’est pas un échec : nous vérifions, puis nous tranchons.

customer_ref …autre

Payé

Le cas nominal. C’est le plus facile, et le moins fréquent en production.

« Non confirmé » n’est pas « Échoué », et ne s’affiche jamais comme tel. C’est l’état que nous tenons séparé dans tout le produit : tant que l’opérateur ne s’est pas prononcé, nous ne prétendons pas savoir.

Ce sur quoi vous pouvez compter

Trois garanties, écrites dans le code.

Une clé d’idempotence sur chaque écriture

Réessayer un appel ne fait jamais payer deux fois votre client. C’est la garantie la plus utile sur un réseau qui coupe.

Des notifications signées

Votre serveur vérifie que le message vient bien de nous et qu’il n’a pas été modifié en chemin. La recette de vérification est dans la documentation.

Des erreurs qui disent quoi faire

Un code, un message, et la référence à citer au support. Pas de « une erreur est survenue ».

Le contrat de connexion

Ajouter un canal ne touche pas à votre code.

Cinq opérations, les mêmes pour un opérateur mobile, une banque ou un acquéreur carte. Un partenaire s’ajoute chez nous ; chez vous, rien ne bouge.

Ce que vous branchez

Les cinq opérations, et rien d’autre.

encaisserreverserinterrogerrembourserrapprocher

Un SDK Node, et le reste en HTTP

Le SDK Node porte la signature, l’idempotence, les types et la vérification des notifications. Il n’est pas encore publié sur npm : d’ici là, l’API s’appelle directement, comme ci-dessus : la signature tient en trois lignes.

Les autres langages seront annoncés quand ils seront prêts, pas avant.

La documentation est ouverte

Le catalogue complet des opérations, la recette de signature et la clé de démonstration s’y trouvent. Sans compte, sans formulaire.