diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/.DS_Store differ diff --git a/functions/.env.example b/functions/.env.example index d78480a..0a823da 100644 --- a/functions/.env.example +++ b/functions/.env.example @@ -11,3 +11,4 @@ GOOGLE_MAPS_API_KEY=#{GOOGLE_MAPS_API_KEY}# FITLIENHOST=#{FITLIENHOST}# CASHFREE_URL=#{CASHFREE_URL}# CASHFREE_LINK_URL=#{CASHFREE_LINK_URL}# +CASHFREE_LINK_NOTIFY_URL=#{CASHFREE_LINK_NOTIFY_URL}# diff --git a/functions/src/index.ts b/functions/src/index.ts index 21f92ae..1ccb811 100644 --- a/functions/src/index.ts +++ b/functions/src/index.ts @@ -524,6 +524,7 @@ export const createCashfreeLink = onRequest({ const clientId = process.env.CASHFREE_CLIENT_ID; const clientSecret = process.env.CASHFREE_CLIENT_SECRET; let apiUrl = process.env.CASHFREE_LINK_URL; + console.log(`API URL: ${apiUrl}`); if (!clientId || !clientSecret) { logger.error('Cashfree credentials not configured'); @@ -533,46 +534,43 @@ export const createCashfreeLink = onRequest({ const linkId = uuidv4(); try { - const options = { - method: 'POST', - headers: { - 'x-api-version': '2025-01-01', - 'x-client-id': `${process.env.CASHFREE_CLIENT_ID}`, - 'x-client-secret': `${process.env.CASHFREE_CLIENT_SECRET}`, - 'Content-Type': 'application/json' - }, - body: `{ - "customer_details": { - "customer_email": "${customerEmail}", - "customer_name": "${customerName}", - "customer_phone": "${customerPhone}" - }, - "link_amount": ${amount}, - "link_auto_reminders": true, - "link_currency": "INR", - "link_expiry_time": "${expirationString}", - "link_id": "${linkId}", - "link_meta": { - "notify_url": "https://ee08e626ecd88c61c85f5c69c0418cb5.m.pipedream.net", - "return_url": "https://www.cashfree.com/devstudio/thankyou", - "upi_intent": false - }, - "link_notes": { - "userId": "${userId}", - "gymId": "${gymId}", - "orderId": "${orderId}", - "requestUserId": "${uid}" - }, - "link_notify": { - "send_email": true, - "send_sms": true - }, - "link_partial_payments": false, - "link_purpose": "${productInfo}", - "order_splits": [] - }` + const requestHeqaders = { + 'x-client-id': clientId, + 'x-client-secret': clientSecret, + 'x-api-version': '2025-01-01', + 'Content-Type': 'application/json' }; - const cashfreeResponse = await axios.post(apiUrl!, options); + console.log(`Header: ${JSON.stringify(requestHeqaders)}`); + const requestBody = { + "link_id": linkId, + "link_amount": amount, + "link_currency": "INR", + "link_purpose": productInfo, + "customer_details": { + "customer_phone": customerPhone, + "customer_email": customerEmail, + "customer_name": customerName, + }, + "link_partial_payments": false, + "link_notify": { + "send_sms": true, + "send_email": true + }, + "link_expiry_time": expirationString, + "link_notes": { + "order_id": orderId, + "gym_id": gymId, + "user_id": userId + }, + "link_meta": { + "notify_url": process.env.CASHFREE_LINK_NOTIFY_URL + } + }; + console.log(`Body: ${JSON.stringify(requestBody)}`); + const cashfreeResponse = await axios.post(apiUrl!, requestBody, { + headers: requestHeqaders + }); + try { await admin.firestore().collection('payment_links').doc(orderId).set({ requestUserId: uid, @@ -594,7 +592,8 @@ export const createCashfreeLink = onRequest({ linkId: linkId, linkUrl: cashfreeResponse.data.link_url, linkExpiryTime: cashfreeResponse.data.link_expiry_time, - linkStatus: cashfreeResponse.data.link_status + linkStatus: cashfreeResponse.data.link_status, + linkQRCode: cashfreeResponse.data.link_qrcode }); } catch (axiosError: any) {