summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiqdad <ahmadmiqdad27@gmail.com>2025-08-29 10:42:05 +0700
committerMiqdad <ahmadmiqdad27@gmail.com>2025-08-29 10:42:05 +0700
commit308563b3f45255450206decc03329dcc64c4bc50 (patch)
treeb116dbd5eea73ecb14047388539326e77dab5397
parent321bd5214ba00867d38866e401146bcc79157cec (diff)
<MIqdad> Fix payment
-rw-r--r--src/lib/transaction/components/Transaction.jsx19
-rw-r--r--src/lib/transaction/components/Transactions.jsx20
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 ||
'';