DÉVELOPPEURS
APERÇUAjoutez 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.
- 1La signature est valide avec une clé VenaPass en vigueur.
- 2Le jeton n'a pas expiré (sa durée de vie est d'environ deux minutes).
- 3txn correspond exactement au montant et à la devise que vous allez débiter.
- 4terminal_id correspond au terminal POS qui a envoyé la vente.
- 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