const confirmPayment = async (req, res) => { const { billingKey, customerKey, paymentKey, orderName, amount, email, zip, phone } = req.body; const cleanEmail = email?.trim() || "test@gmail.com"; const cleanOrderName = orderName?.trim() || "My Product"; const cleanZip = zip && zip !== "null" ? zip : "00000"; const cleanPhone = phone?.trim() || "01000000000"; // if (!amount || parseInt(amount) <= 0) { // return res.status(400).json({ // status: 400, // message: "Invalid amount. Payment amount must be greater than 0.", // }); // } let retryCount = 0; let success = false; console.log("after", amount) const orderId = "order_" + Date.now(); console.log("billingKey", billingKey) console.log("customerKey", customerKey) console.log("orderId", cleanOrderName) console.log("amount", amount) let response; // console.log("order1",order1) setTimeout(async () => { while (retryCount < 3 && !success) { try { response = await axios.post( `https://api.tosspayments.com/v1/billing/${billingKey}`, { customerKey: customerKey, amount: amount, orderId: orderId, orderName: cleanOrderName, // billingKey, // paymentKey, // order1, // amount1, }, { headers: { Authorization: "Basic " + Buffer.from(process.env.TOSS_SECRET_KEY + ":").toString("base64"), "Content-Type": "application/json", }, } ); success = true; const user = await authUser(req); if (!user) { return res.status(404).json({ message: "User not found" }); } const data = response.data; console.log("data", data) await TossPayment.create({ user_id: user.id, customerName: user.name || user.email, payment_type_card: 'Toss', phone_number: cleanPhone || null, email: cleanEmail || null, zip_code: cleanZip || null, orderName: data?.orderName, lastTransactionKey: data?.lastTransactionKey, paymentKey: data?.paymentKey, status: data?.status, provider: data?.card?.ownerType || null, amount: data?.card?.amount || null, discountAmount: data?.easyPay?.discountAmount || 0, country: data?.country, receipt: data?.receipt?.url || null, checkout: data?.checkout?.url || null, currency: data?.currency, totalAmount: data?.totalAmount, balanceAmount: data?.balanceAmount, suppliedAmount: data?.suppliedAmount, vat: data?.vat, taxFreeAmount: data?.taxFreeAmount, billingKey: billingKey, customerKey: data.customerKey }); return res.status(200).json({ status: 200, message: "Payment confirmed and saved", data: data, }); } catch (error) { if (error?.response?.data?.code === 'PROVIDER_ERROR') { retryCount++; await new Promise(resolve => setTimeout(resolve, 1000)); // Retry delay } else { console.error("Payment confirmation failed:", error?.response?.data); return res.status(400).json({ status: 400, message: "Payment confirmation failed", error: error?.response?.data || error.message, }); } } } }, 1000) };