Erreur MonCash quand je réutilise le même orderId — que faire ?

poze 2 months ago348 gadefr

5

Un client a abandonné le paiement puis a voulu réessayer. CreatePayment renvoie maintenant une erreur, apparemment parce que l'orderId a déjà été utilisé. Je ne veux pas créer une nouvelle commande à chaque tentative.

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.

poze 2 months ago

1 Repons

8
✓
✓ Repons yo aksepte

C'est voulu : pour MonCash, l'orderId identifie un paiement unique. Réutiliser le même identifiant pour un deuxième paiement est refusé, et c'est une bonne chose (protection contre les doublons).

La solution : séparer la commande et la tentative de paiement.

Commande #1042 (votre objet métier)
 ├── tentative 1042-a  → abandonnée
 └── tentative 1042-b  → payée ✔
const attempt = await db.paymentAttempt.create({
  data: { orderId: order.id, provider: "MONCASH", amountHtg: order.totalHtg },
});
// orderId envoyé à MonCash = identifiant de la TENTATIVE
await createMonCashPayment({ orderId: attempt.id, amount: attempt.amountHtg });

Au retour, payment.reference vous donne l'identifiant de la tentative, qui pointe vers la commande.

Bonus :

  • Avant de créer une nouvelle tentative, vérifiez la précédente avec RetrieveOrderPayment. Si le client a finalement payé, ne lui faites pas payer deux fois.
  • Utilisez des identifiants non devinables (cuid, UUID) plutôt que des entiers qui se suivent.

Konekte pou di lòt moun si li te mache.

answered 2 months ago

Sign in and verify your email to post an answer.