diff --git a/src/modules/user/services/payment.service.ts b/src/modules/user/services/payment.service.ts index 6f8c662..c0a9603 100644 --- a/src/modules/user/services/payment.service.ts +++ b/src/modules/user/services/payment.service.ts @@ -12,6 +12,17 @@ const razorpay = new Razorpay({ key_secret: config.RAZORPAY_KEY_SECRET, }); +const buildUniqueReceipt = (input?: string) => { + const normalizedPrefix = (input?.trim() || 'receipt') + .replace(/[^a-zA-Z0-9_-]/g, '_') + .replace(/_+/g, '_') + .slice(0, 20); + const timePart = Date.now().toString(36); + const randomPart = crypto.randomBytes(4).toString('hex'); + + return `${normalizedPrefix}_${timePart}_${randomPart}`.slice(0, 100); +}; + type RazorpayWebhookPayload = { event?: string; payload?: { @@ -91,7 +102,7 @@ export class PaymentService { } const amountInPaise = Math.round(payload.amount * 100); - const receipt = payload.receipt ?? `receipt_${Date.now()}`; + const receipt = buildUniqueReceipt(payload.receipt); const currency = payload.currency ?? 'INR'; const order = (await razorpay.orders.create({