Planifier et déployer
Architecture, environnements, configuration et planification des versions avec votre équipe.
Comment ça marche
WalletD est une API REST devant un registre de référence. Voici le chemin que suit un paiement unique, de l'intégration d'un utilisateur à un mouvement que vos auditeurs peuvent recalculer.
Comment ça marche
Créez un utilisateur de portefeuille avec votre propre id externe. WalletD ouvre des comptes par finalité (espèces, points) la première fois que chacun est utilisé, il n'y a donc rien à provisionner au préalable.
Démarrez un rechargement via Stripe. Le solde n'est crédité que lorsque la passerelle confirme par un webhook signé ou une requête de réconciliation, jamais sur un rappel client.
Envoyez en pair-à-pair, prenez un paiement avec un blocage, ou répartissez une vente sur la marketplace. Chaque appel porte une clé d'idempotence et inscrit des lignes équilibrées dans le registre en une seule transaction.
Le cashback et les points sont octroyés au moment de la capture ; les frais et la commission sont répartis ; les versements produisent un relevé de règlement. Tout cela est inscrit dans les mêmes livres.
Lisez les soldes et l'historique via l'API, recevez des webhooks signés pour chaque événement, et laissez le vérificateur intégré recontrôler les invariants du registre selon un calendrier.
Alimentez un portefeuille, puis envoyez de l'argent
La même requête dans six langages. Les montants sont des unités mineures entières ; le registre s'occupe du reste.
# Fund a wallet, then send money. Balances only move on the ledger.
curl -sS -X POST "$WALLETD_API/v1/users" \
-H "Authorization: Bearer $WALLETD_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: usr-42-create" \
-d '{"external_id":"user-42","kind":"consumer","display_name":"Ada Lovelace","handle":"ada"}'
curl -sS -X POST "$WALLETD_API/v1/transfers" \
-H "Authorization: Bearer $WALLETD_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: xfer-ada-grace-001" \
-d '{"from":"user-42","to":"@grace","amount":2500,"currency":"USD"}'client := walletd.New(os.Getenv("WALLETD_API"), os.Getenv("WALLETD_API_KEY"))
var transfer walletd.Transfer
err := client.Do(ctx, http.MethodPost, "/v1/transfers", map[string]any{
"from": "user-42",
"to": "@grace",
"amount": 2500, // minor units, $25.00, never a float
"currency": "USD",
}, &transfer, "xfer-ada-grace-001") // idempotency key
if err != nil {
return fmt.Errorf("transfer: %w", err)
}client = WalletD() # reads WALLETD_API / WALLETD_API_KEY
transfer = client.request(
"POST",
"/v1/transfers",
{
"from": "user-42",
"to": "@grace",
"amount": 2500, # minor units, $25.00
"currency": "USD",
},
idempotency_key="xfer-ada-grace-001",
)
print(transfer["status"]) # "settled"const res = await fetch(`${API}/v1/transfers`, {
method: "POST",
headers: {
Authorization: `Bearer ${API_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": "xfer-ada-grace-001",
},
body: JSON.stringify({
from: "user-42",
to: "@grace",
amount: 2500, // minor units, $25.00
currency: "USD",
}),
});
const transfer = await res.json();$transfer = $walletd->request('POST', '/v1/transfers', [
'from' => 'user-42',
'to' => '@grace',
'amount' => 2500, // minor units, $25.00
'currency' => 'USD',
], idempotencyKey: 'xfer-ada-grace-001');
echo $transfer['status']; // "settled"var body = Map.of(
"from", "user-42",
"to", "@grace",
"amount", 2500, // minor units, $25.00
"currency", "USD");
Transfer transfer = client.post(
"/v1/transfers", body, "xfer-ada-grace-001", Transfer.class);Chaque appel de mouvement d'argent prend une clé d'idempotence. Les nouvelles tentatives sont sûres ; le registre rejoue le résultat stocké octet par octet.
Frais, blocages, plafonds et reprises sont appliqués à l'intérieur de la même écriture, si bien que les livres ne sont jamais brièvement faux.
L'argent bouge sur confirmation vérifiée de la passerelle et se règle dans le registre, pas sur une réponse client optimiste.
Un vérificateur planifié recalcule la conservation, les soldes et les planchers, et échoue bruyamment dès que quoi que ce soit dérive.
Un partenaire pour tout le cycle de vie, avec un périmètre convenu et des responsabilités claires.
Architecture, environnements, configuration et planification des versions avec votre équipe.
Adaptez la marque, les parcours et les règles métier au produit que vous souhaitez créer.
Assistance, maintenance et mises à niveau, avec procédures d’escalade et niveaux de service définis par contrat.
Accès anticipé
Nous travaillons avec un petit nombre d'équipes qui construisent des produits de portefeuille et de paiement sur WalletD. Si c'est votre cas, parlons-en. Vous aurez un accès direct aux personnes qui l'ont conçu.