Marketplace multi-vendeurs Africa = besoin splits payments : split commission plateforme + montant vendeur. Wave Business API permet via custom logic. Voici architecture 2026.
TL;DR
- Marketplace = commission 5-25 % par transaction.
- Wave : pas de split natif, custom logic requis.
- Architecture : escrow + payouts vendeurs.
- Réconciliation rigoureuse = critique.
Architecture marketplace splits
`
- Customer paie 100K FCFA (produit) :
- Wave Checkout : 100K → compte plateforme
- Plateforme reçoit :
- 100K - 1K (frais Wave) = 99K
- Commission plateforme 10 % : 10K
- Reste vendeur : 89K
- Payout vendeur (J+7 selon politique) :
- Wave Business → vendeur : 89K
- Frais payout : 0-500 FCFA
`
DB schema marketplace
`sql
-- Commande
CREATE TABLE orders (
id UUID PRIMARY KEY,
customer_id UUID,
vendor_id UUID,
amount_total INT, -- 100000 FCFA
amount_commission INT, -- 10000 (10 %)
amount_vendor INT, -- 89000 (après frais Wave)
status ENUM ('pending_payment', 'paid', 'shipped', 'delivered', 'refunded'),
wave_session_id VARCHAR,
wave_transaction_id VARCHAR,
paid_at TIMESTAMP,
payout_to_vendor_at TIMESTAMP, -- null until paid out
created_at TIMESTAMP
);
-- Compte vendeur
CREATE TABLE vendors (
id UUID PRIMARY KEY,
name VARCHAR,
wave_phone VARCHAR, -- numéro Wave vendeur
bank_account VARCHAR, -- alternative bancaire
pending_payout INT DEFAULT 0,
total_payout INT DEFAULT 0
);
`
Payout vendeur via API
`typescript
async function payoutVendor(vendorId: string, orderId: string) {
const order = await db.orders.findOne({ id: orderId });
const vendor = await db.vendors.findOne({ id: vendorId });
if (order.status !== 'delivered') {
throw new Error('Order not delivered yet');
}
if (order.payout_to_vendor_at) {
throw new Error('Already paid out');
}
// Wave B2B transfer
const res = await axios.post(
${WAVE_API}/payouts,
{
currency: 'XOF',
receive_amount: order.amount_vendor.toString(),
mobile: vendor.wave_phone,
name: vendor.name,
client_reference: payout_${orderId},
},
{
headers: { Authorization: Bearer ${WAVE_TOKEN} },
}
);
// Update DB
await db.orders.updateOne(
{ id: orderId },
{
payout_to_vendor_at: new Date(),
payout_wave_id: res.data.id,
}
Besoin d'un site web professionnel ?
Kolonell crée des sites web qui attirent des clients, optimisés pour le marché sénégalais. Devis gratuit en 2 minutes.
);
await db.vendors.updateOne(
{ id: vendorId },
{
$inc: { pending_payout: -order.amount_vendor, total_payout: order.amount_vendor },
}
);
return res.data;
}
`
Cron payouts batch
`typescript
// Tous les vendredis : payout vendeurs commandes livrées + 7 jours
cron.schedule('0 9 * * 5', async () => {
const sevenDaysAgo = new Date(Date.now() - 7 * 24 * 3600 * 1000);
const ordersToPayout = await db.orders.find({
status: 'delivered',
payout_to_vendor_at: null,
deliveredAt: { $lt: sevenDaysAgo },
});
for (const order of ordersToPayout) {
try {
await payoutVendor(order.vendor_id, order.id);
await sendVendorEmail(order.vendor_id, {
subject: 'Paiement reçu',
body: ${order.amount_vendor} FCFA pour commande ${order.id},
});
} catch (err) {
console.error(Payout failed: ${order.id}, err);
await alertAdmin('Payout failed', err);
}
await sleep(1000); // Rate limit
}
});
`
Calculs commission
`typescript
function calculateSplit(grossAmount: number, commissionRate: number) {
// Frais Wave : 1 % du brut
const waveFee = Math.ceil(grossAmount * 0.01);
const netAfterWave = grossAmount - waveFee;
// Commission plateforme : sur net après Wave
const platformCommission = Math.ceil(netAfterWave * commissionRate);
// Reste vendeur
const vendorAmount = netAfterWave - platformCommission;
return {
grossAmount,
waveFee,
netAfterWave,
platformCommission,
vendorAmount,
};
}
// Exemple : 100K FCFA, 10 % commission
const split = calculateSplit(100000, 0.10);
// { grossAmount: 100000, waveFee: 1000, netAfterWave: 99000,
// platformCommission: 9900, vendorAmount: 89100 }
`
FAQ
Q : Wave fait splits natifs ?
R : Non. Custom logic requis dans plateforme.
Q : Délai payout vendeur ?
R : Variable. Standard : 7 jours après livraison + délai retours.
Q : Risque trésorerie ?
R : Oui. Plateforme tient cash entre paiement client et payout vendeur. Cash flow management critique.
Conclusion
Wave Business marketplace splits 2026 : custom logic + escrow + cron payouts. Architecture rigoureuse + réconciliation = success. Calcul splits + cash flow management = critique.
Mohamed Bah
Fondateur, Kolonell
Passionné par le digital et l'entrepreneuriat en Afrique, Mohamed accompagne les entreprises sénégalaises dans leur transformation digitale depuis 2020. Fondateur de Kolonell, il croit que chaque PME mérite une présence en ligne professionnelle et accessible.

