DÉVELOPPEURS

APERÇU

Ajoutez le paiement par la paume à un POS en un après-midi.

Votre POS demande à l'application VenaPass installée sur le même terminal d'identifier le client. Vous recevez votre propre identifiant client et un jeton signé auquel votre prestataire de paiement peut se fier.

POS Android : lancer l'écran de paiement

VenaPass affiche le montant, scanne la paume et renvoie le résultat. Les montants sont exprimés en unités mineures avec une devise ISO 4217.

val pay = Intent("com.venapass.action.PAY")
    .putExtra("amount", 500000L)        // NGN 5,000.00
    .putExtra("currency", "NGN")
    .putExtra("terminal_id", "LEKKI-POS-1")
    .putExtra("request_id", UUID.randomUUID().toString())
startActivityForResult(pay, PAY_WITH_PALM)

// Result extras: success, customer_ref,
// assertion, receipt_id (gateway mode), message

URL de passerelle : appeler l'application sur le terminal

Pour les logiciels POS dont l'adresse de passerelle de paiement est configurable. Réessayez avec le même request_id, jamais avec un nouveau.

POST http://127.0.0.1:9090/api/pay_direct
{ "amount": 500000, "currency": "NGN",
  "terminal_id": "LEKKI-POS-1",
  "request_id": "6f1c2e9a-…" }

200 OK
{ "success": true,
  "customer_ref": "CUST-1042",
  "assertion": "eyJhbGciOiJFZERTQSIs…",
  "receipt_id": null,
  "message": "Identity verified" }

Pour les prestataires de paiement : vérifier le jeton

L'assertion est un JWT signé standard (EdDSA). N'importe quelle bibliothèque JWT peut la vérifier avec nos clés publiques :

https://api.venapass.com/.well-known/venapass-keys

Son champ sub est votre propre référence client : vous débitez donc le moyen de paiement que vous détenez déjà pour ce client.

  1. 1La signature est valide avec une clé VenaPass en vigueur.
  2. 2Le jeton n'a pas expiré (sa durée de vie est d'environ deux minutes).
  3. 3txn correspond exactement au montant et à la devise que vous allez débiter.
  4. 4terminal_id correspond au terminal POS qui a envoyé la vente.
  5. 5Vous n'avez jamais accepté ce jti auparavant.

Mode passerelle : recevoir les paiements de VenaPass

En mode passerelle, nous envoyons chaque vente identifiée à votre URL, signée avec un secret connu de vous et de nous seuls. Traitez request_id comme une clé d'idempotence.

POST https://your-provider.example/venapass
X-VenaPass-Signature: sha256=<HMAC of the body>
{ "assertion": "eyJ…", "customer_ref": "CUST-1042",
  "amount": 500000, "currency": "NGN",
  "terminal_id": "LEKKI-POS-1", "request_id": "6f1c…" }

Reply: { "approved": true, "reference": "PSP-88213",
         "message": "Approved" }

Enregistrer des clients depuis votre POS

Lancez com.venapass.action.ENROLL avec votre customer_ref. VenaPass guide trois scans de la paume et renvoie la confirmation. Aucun nom ni numéro de téléphone ne nous est transmis.

Demander un accès à l'environnement de test