diff options
Diffstat (limited to 'src/lib/transaction/components')
| -rw-r--r-- | src/lib/transaction/components/Transaction.jsx | 51 | ||||
| -rw-r--r-- | src/lib/transaction/components/Transactions.jsx | 30 |
2 files changed, 41 insertions, 40 deletions
diff --git a/src/lib/transaction/components/Transaction.jsx b/src/lib/transaction/components/Transaction.jsx index 0a399f12..803b60bd 100644 --- a/src/lib/transaction/components/Transaction.jsx +++ b/src/lib/transaction/components/Transaction.jsx @@ -209,40 +209,37 @@ const Transaction = ({ id }) => { transaction.refetch(); }; - // ===== Bayar Sekarang (pakai link dari backend; fallback generate via Next API) ===== const handlePayNow = async () => { try { setContLoading(true); - // (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 || - ''; + // Selalu minta link baru ke server + const res = await axios.post( + '/api/shop/midtrans-payment', // pakai relative path biar nggak salah host + null, + { + params: { + transactionId: transaction.data.id, + force: 1, + ts: Date.now(), + }, + } + ); - if (existingUrl) { - window.open(existingUrl, '_blank', 'noopener,noreferrer'); - toast.success('Membuka halaman pembayaran…'); - return; + const ensuredUrl = res?.data?.redirectUrl || ''; + if (!ensuredUrl) { + const fallback = + transaction?.data?.paymentSummary?.redirectUrl || + transaction?.data?.paymentLinkMidtrans || + ''; + if (fallback) { + window.open(fallback, '_blank', 'noopener,noreferrer'); + return; + } + throw new Error('redirectUrl kosong'); } - // (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}` - ); - window.location.href = res.data.redirectUrl; + window.location.href = ensuredUrl; // pakai link BARU } catch (e) { toast.error( e?.response?.data?.description || diff --git a/src/lib/transaction/components/Transactions.jsx b/src/lib/transaction/components/Transactions.jsx index 5466466c..064471d5 100644 --- a/src/lib/transaction/components/Transactions.jsx +++ b/src/lib/transaction/components/Transactions.jsx @@ -40,7 +40,7 @@ import { Calendar } from 'lucide-react'; import { DateRangePicker } from 'react-date-range'; import 'react-date-range/dist/styles.css'; import 'react-date-range/dist/theme/default.css'; - +import axios from 'axios'; const Transactions = ({ context = '' }) => { const auth = useAuth(); @@ -58,7 +58,7 @@ const Transactions = ({ context = '' }) => { const { setRefreshCart } = useProductCartContext(); const [cachedAllData, setCachedAllData] = useState(null); // Simpan data "All" - const [currentData, setCurrentData] = useState([]); + const [currentData, setCurrentData] = useState([]); const [inputQuery, setInputQuery] = useState(q); const [toOthers, setToOthers] = useState(null); const [toCancel, setToCancel] = useState(null); @@ -397,39 +397,43 @@ const Transactions = ({ context = '' }) => { try { setContLoadingId(saleOrder.id); - // (0) Minta backend pastikan/generate link terbaru - let ensuredUrl = ''; + // 1) Selalu coba generate link baru via Next API dulu + const base = (process.env.NEXT_PUBLIC_SELF_HOST || '').replace(/\/$/, ''); try { const { data } = await axios.post( - `${process.env.NEXT_PUBLIC_SELF_HOST}/api/shop/so-payment-link?soId=${saleOrder.id}` + `${base}/api/shop/midtrans-payment`, + null, + { params: { transactionId: saleOrder.id } } ); - ensuredUrl = data?.redirectUrl || ''; - } catch (e) { + if (data?.redirectUrl) { + window.open(data.redirectUrl, '_blank', 'noopener,noreferrer'); + toast.success('Membuka halaman pembayaran…'); + return; + } + } catch (err) { + // biarkan fail, lanjut fallback } + // 2) Fallback: pakai link yang sudah ada di list (mungkin masih valid) const existingUrl = - ensuredUrl || saleOrder?.paymentSummary?.redirectUrl || saleOrder?.paymentLinkMidtrans || ''; - if (existingUrl) { window.open(existingUrl, '_blank', 'noopener,noreferrer'); - toast.success('Membuka halaman pembayaran…'); + toast('Membuka link pembayaran yang sudah ada'); return; } - // (2) Fallback: refetch list (kalau backend auto-generate saat list) + // 3) Fallback terakhir: refetch 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 || ''; - if (updatedUrl) { window.open(updatedUrl, '_blank', 'noopener,noreferrer'); toast.success('Membuka halaman pembayaran…'); |
