Duticotac
Le module Duticotac gère les paiements mobiles, les offres et les transactions via le SDK @applite/duticotac.
Installation
pnpm add @applite/duticotacInitialisation
import { DuticotacSDK } from "@applite/duticotac";
const duticotac = new DuticotacSDK({
apiKey: "your_api_key",
appId: "your_app_id", // optionnel
});Le SDK se connecte par défaut à https://api.applite.freddydro.dev.
Sous-modules
duticotac.balance— Soldeduticotac.offer— Gestion des offresduticotac.mobileMoney— Paiements mobile moneyduticotac.paymentMethod— Méthodes de paiementduticotac.transaction— Transactions et pollingduticotac.webhook— Configuration webhook
Balance
balance.balance()
Récupère le solde Duticotac.
Exemple
const response = await duticotac.balance.balance();
console.log("Solde:", response.data);Offres
offer.create()
Crée une nouvelle offre.
Exemple
const response = await duticotac.offer.create({
name: "Forfait Premium",
ref: "premium-monthly",
price: 5000,
platform: "DUTICOTAC",
type: "STATIC",
description: "Accès premium mensuel",
});offer.update()
Modifie une offre existante.
Exemple
await duticotac.offer.update({
ref: "premium-monthly",
name: "Forfait Premium V2",
price: 7500,
});offer.list()
Liste toutes les offres.
Exemple
const response = await duticotac.offer.list();offer.get()
Récupère une offre par référence.
Exemple
const response = await duticotac.offer.get({ ref: "premium-monthly" });offer.delete()
Supprime une offre.
Exemple
await duticotac.offer.delete({ ref: "premium-monthly" });Paiements Mobile Money
mobileMoney.cashin()
Effectue un encaissement mobile money.
Exemple
await duticotac.mobileMoney.cashin({
amount: 5000,
phone: "+2250700000000",
paymentMethod: "OM_CI",
password: "password123",
});mobileMoney.cashout()
Effectue un décaissement. Lance une DuticotacError si l’OTP est manquant pour Orange Money, ou si ref et idFromClient sont tous les deux absents.
Exemple
await duticotac.mobileMoney.cashout({
transactionId: "txn_123",
ref: "ref_123",
phone: "+2250700000000",
name: "Jean Dupont",
email: "jean@example.com",
paymentMethod: "OM_CI",
otp: "1234", // requis pour OM_CI
});Méthodes de paiement
paymentMethod.get()
Récupère les méthodes de paiement configurées.
Exemple
const response = await duticotac.paymentMethod.get();paymentMethod.set()
Configure les méthodes de paiement disponibles.
Exemple
await duticotac.paymentMethod.set({
providers: ["OM_CI", "MTN_CI", "WAVE_CI"],
});Transactions
transaction.get()
Récupère les détails d’une transaction.
Exemple
const response = await duticotac.transaction.get({
id: "transaction_id",
});transaction.poll()
Suit le statut d’une transaction avec polling et backoff exponentiel (1s → 2s → 3s → 5s → 8s). Idéal pour les paiements asynchrones (confirmation sur téléphone, redirection Wave).
Exemple
const controller = new AbortController();
try {
const response = await duticotac.transaction.poll("transaction_id", {
intervalMs: 2000,
timeoutMs: 90_000,
signal: controller.signal,
onPoll: (attempt, elapsed) => {
console.log(`Tentative ${attempt} (${elapsed}ms)`);
},
});
console.log("Transaction confirmée:", response.data);
} catch (e) {
if (e instanceof DuticotacError) {
// e.code: "polling-timeout" | "payment-cancelled" | "payment-failed"
}
}Webhooks
webhook.get()
Récupère l’URL du webhook.
Exemple
const response = await duticotac.webhook.get();webhook.set()
Configure l’URL du webhook.
Exemple
await duticotac.webhook.set({
url: "https://example.com/webhook",
});Gestion des erreurs
Le SDK lève des DuticotacError avec un code et un message en français :
import { DuticotacError } from "@applite/duticotac";
try {
await duticotac.mobileMoney.cashout({ ... });
} catch (e) {
if (e instanceof DuticotacError) {
console.log(e.code); // "otp-required"
console.log(e.message); // "Code OTP requis pour les paiements Orange Money"
}
}Codes d’erreur
| Code | Message |
|---|---|
otp-required | Code OTP requis pour les paiements Orange Money |
ref-or-idFromClient-required | Référence ou IDFromClient requis |
payment-failed | Échec du paiement |
payment-cancelled | Paiement annulé |
polling-timeout | Temps d’attente de la transaction expiré |
no-api-key | Clé API non fournie |
app-not-found | Application non trouvée dans AppLite UI |
unknown-error | Une erreur inconnue est survenue |
Utilitaires
import {
getProviderName, // "OM_CI" → "Orange Money"
getProviderLogo, // "OM_CI" → URL du logo
getErrorMessage, // "otp-required" → message français
} from "@applite/duticotac";Types
import type {
TransactionStatus, // "PENDING" | "CONFIRMED" | "CANCELLED" | "FAILED"
PlatformType, // "STORE" | "TRANSPORT" | "RESTAURATION" | ...
PaymentProvider, // "OM_CI" | "MTN_CI" | "MOOV_CI" | "WAVE_CI" | ...
Currency, // "USD" | "EUR" | "XOF" | "XAF"
CoreApp, // "XORAIA" | "MONSMSPRO" | "FREE"
TransactionModel,
OfferModel,
} from "@applite/duticotac";