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

asked 2 months ago350 viewsfr

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.

AI diagnosis

AI-generated. Not an answer — the community below confirms or corrects it. Always verify before relying on it.

asked 2 months ago

1 Answer

8
✓
✓ Accepted answer

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.

Sign in to tell others whether this worked.

answered 2 months ago

Sign in and verify your email to post an answer.