diff options
| author | Miqdad <ahmadmiqdad27@gmail.com> | 2025-08-29 10:42:05 +0700 |
|---|---|---|
| committer | Miqdad <ahmadmiqdad27@gmail.com> | 2025-08-29 10:42:05 +0700 |
| commit | 308563b3f45255450206decc03329dcc64c4bc50 (patch) | |
| tree | b116dbd5eea73ecb14047388539326e77dab5397 | |
| parent | 321bd5214ba00867d38866e401146bcc79157cec (diff) | |
<MIqdad> Fix payment
| -rw-r--r-- | src/lib/transaction/components/Transaction.jsx | 19 | ||||
| -rw-r--r-- | src/lib/transaction/components/Transactions.jsx | 20 |
2 files changed, 31 insertions, 8 deletions
diff --git a/src/lib/transaction/components/Transaction.jsx b/src/lib/transaction/components/Transaction.jsx index cc5f862c..0a399f12 100644 --- a/src/lib/transaction/components/Transaction.jsx +++ b/src/lib/transaction/components/Transaction.jsx @@ -213,17 +213,32 @@ const Transaction = ({ id }) => { const handlePayNow = async () => { try { setContLoading(true); - // 1) gunakan URL yang sudah dikirim backend (jika ada) + + // (0) minta backend cek status & generate link baru jika expired/cancel + let ensuredUrl = ''; + try { + const { data } = await axios.post( + `${process.env.NEXT_PUBLIC_SELF_HOST}/api/shop/so-payment-link?soId=${transaction.data.id}` + ); + ensuredUrl = data?.redirectUrl || ''; + } catch (_) { + // biarkan silent; lanjut ke existing/fallback + } + + // (1) pakai URL yang paling terjamin dulu const existingUrl = + ensuredUrl || transaction?.data?.paymentSummary?.redirectUrl || transaction?.data?.paymentLinkMidtrans || ''; + if (existingUrl) { window.open(existingUrl, '_blank', 'noopener,noreferrer'); toast.success('Membuka halaman pembayaran…'); return; } - // 2) fallback: panggil Next API untuk generate + + // (2) fallback terakhir: pakai Next API (mis. bikin Snap baru) const res = await axios.post( `${process.env.NEXT_PUBLIC_SELF_HOST}/api/shop/midtrans-payment?transactionId=${transaction.data.id}` ); diff --git a/src/lib/transaction/components/Transactions.jsx b/src/lib/transaction/components/Transactions.jsx index 79ccdcb4..e22cd490 100644 --- a/src/lib/transaction/components/Transactions.jsx +++ b/src/lib/transaction/components/Transactions.jsx @@ -70,9 +70,7 @@ const Transactions = ({ context = '' }) => { const [isOpenCalender, setIsOpenCalender] = useState(false); const calendarRef = useRef(null); const isUnpaid = (s) => - ['belum_bayar'].includes( - String(s || '').toLowerCase() - ); + ['belum_bayar'].includes(String(s || '').toLowerCase()); // loading id utk tombol lanjutkan transaksi const [contLoadingId, setContLoadingId] = useState(null); @@ -381,13 +379,22 @@ const Transactions = ({ context = '' }) => { return `${day} ${months[parseInt(month, 10) - 1]} ${year}`; }; - // ==== Lanjutkan Transaksi (tanpa endpoint baru) ==== const handleContinuePayment = async (saleOrder) => { try { setContLoadingId(saleOrder.id); - // 1) pakai URL yang dikirim server di list + // (0) Minta backend pastikan/generate link terbaru + let ensuredUrl = ''; + try { + const { data } = await axios.post( + `${process.env.NEXT_PUBLIC_SELF_HOST}/api/shop/so-payment-link?soId=${saleOrder.id}` + ); + ensuredUrl = data?.redirectUrl || ''; + } catch (e) { + } + const existingUrl = + ensuredUrl || saleOrder?.paymentSummary?.redirectUrl || saleOrder?.paymentLinkMidtrans || ''; @@ -398,12 +405,13 @@ const Transactions = ({ context = '' }) => { return; } - // 2) kalau masih kosong, refetch list (server bisa auto-generate saat list) + // (2) Fallback: refetch list (kalau backend auto-generate saat list) await transactions.refetch(); const updated = transactions?.data?.saleOrders?.find((s) => s.id === saleOrder.id) || null; const updatedUrl = + ensuredUrl || // kalau step (0) akhirnya sukses updated?.paymentSummary?.redirectUrl || updated?.paymentLinkMidtrans || ''; |
