MonCash : comment gérer les paiements abandonnés et les commandes en attente ?
poze a month ago546 gadefr
Beaucoup de clients lancent le paiement MonCash puis abandonnent. Mes stocks restent réservés et j'ai des centaines de commandes « en attente ». Comment gérer proprement ce cycle ?
Dyagnostik IA
Se IA ki fè l. Se pa yon repons — kominote a anba a konfime oswa korije l. Toujou verifye anvan ou fye l.
1 Repons
Modélisez explicitement le cycle de vie, avec des délais :
CRÉÉE ──► EN_ATTENTE_PAIEMENT ──► PAYÉE
│
└──(30 min sans paiement confirmé)──► EXPIRÉE ──► stock libéré
- Réservation limitée dans le temps : à la création de la tentative, réservez le stock avec une date d'expiration (
reservedUntil = now + 30 min). - Balayage périodique (toutes les 5 minutes) :
const stale = await db.paymentAttempt.findMany({
where: { status: "PENDING", createdAt: { lt: new Date(Date.now() - 30 * 60_000) } },
});
for (const a of stale) {
const payment = await moncash.order(a.id); // RetrieveOrderPayment
if (payment?.message === "successful") await markPaidOnce(a.orderId, payment.transaction_id);
else await expireAttempt(a.id); // libère le stock
}
Toujours interroger MonCash avant d'expirer : le client a peut-être payé sans revenir sur le site.
3. Paiement arrivé après expiration (rare mais possible) : ne le rejetez pas. Si le stock est encore disponible, honorez la commande, sinon remboursez. Prévoyez une file « à traiter manuellement ».
4. Relance : un SMS ou WhatsApp « Votre commande vous attend » avec un lien pour réessayer (nouvelle tentative, nouvel orderId) récupère une bonne partie des paniers abandonnés.
Côté client, affichez clairement le délai : « Payez dans les 30 minutes pour garder votre commande. »
Konekte pou di lòt moun si li te mache.
Sign in and verify your email to post an answer.