summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lib/transaction/components/Transaction.jsx51
-rw-r--r--src/lib/transaction/components/Transactions.jsx30
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…');