diff --git a/src/pages/Payment/PaymentCallback.js b/src/pages/Payment/PaymentCallback.js new file mode 100644 index 0000000..a4f9815 --- /dev/null +++ b/src/pages/Payment/PaymentCallback.js @@ -0,0 +1,327 @@ +// material-ui +import { + Grid, + Typography, + Stack, + // Button, + FormLabel, +} from '@mui/material'; +import * as React from "react"; +import * as HttpUtils from "utils/HttpUtils"; +//import { useNavigate } from 'react-router-dom'; +import { paymentPath } from "auth/utils"; + +import Loadable from 'components/Loadable'; +const LoadingComponent = Loadable(React.lazy(() => import('pages/extra-pages/LoadingComponent'))); + +import titleBackgroundImg from 'assets/images/dashboard/gazette-bar.png' +const BackgroundHead = { + backgroundImage: `url(${titleBackgroundImg})`, + width: '100%', + height: '100%', + backgroundSize: 'contain', + backgroundRepeat: 'no-repeat', + backgroundColor: '#0C489E', + backgroundPosition: 'right' +} + +// ==============================|| DASHBOARD - DEFAULT ||============================== // + +const Index = () => { + //const navigate = useNavigate() + const [responeData, setResponeDataData] = React.useState({}); + + const [transactionData, setTransactionData] = React.useState({}); + const [transactionDate, setTransactionDate] = React.useState(""); + const [transactionTime, setTransactionTime] = React.useState(""); + const [onReady, setOnReady] = React.useState(false); + const updatePaymentApi = "/api/payment/updatepayment"; + //const paymentStatusApi = "/api/payment/status/"; + + + React.useEffect(() => { + console.log("webtoken: " + localStorage.getItem("webtoken")); + if (localStorage.getItem("webtoken") != null && localStorage.getItem("webtoken") != "") { + loadForm(); + } + // else{ + // navigate("/dashboard"); + // } + }, []); + + React.useEffect(() => { + console.log(responeData) + if (Object.keys(responeData).length > 0) { + setTransactionData(responeData) + } + }, [responeData]); + + React.useEffect(() => { + console.log(transactionData) + if (Object.keys(transactionData).length > 0) { + setOnReady(true); + } + }, [transactionData]); + + const loadForm = () => { + const date = new Date(); + const trnDate = date.getDate() + "/" + date.getMonth() + "/" + date.getFullYear(); + const trnTime = date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds(); + setTransactionDate(trnDate) + setTransactionTime(trnTime) + const params = new URLSearchParams(window.location.search); + let transactionid = params.get("TRANSACTION_ID") + let receipt_token = params.get("RECEIPT_TOKEN").replace("%3D", "=") + + HttpUtils.post({ + url: paymentPath + updatePaymentApi, + params: { + "transactionid": transactionid, + "receipttoken": receipt_token, + }, + onSuccess: function () { + // { + // "amount": 999.99, + // "currencycode": "HKD", + // "paymentdetail": { + // "attemptno": 1, + // "channel": "MobileWallet", + // "paymentid": "C202310268000681", + // "paymentmethod": "04", + // "result": { + // "canretry": "Y", + // "description": "CANC - Cancelled by user or Payment Server.", + // "paymentstatuscode": "CANC", + // "rejectreasoncode": "Payment Cancelled. [PAY-E-9022]" + // }, + // "subtype": "FPS", + // "time": "2023-10-26T09:02:17Z[UTC]" + // }, + // "transactionid": "20231026170103921" + // } + // ) + + HttpUtils.post({ + url: paymentPath + paymentStatusApi + transactionid, + params: { + "apprefid": transactionid, + "webtoken": localStorage.getItem("webtoken"), + }, + onSuccess: function (responseData) { + setResponeDataData(responseData) + if (responseData.paymentdetail?.result?.paymentstatuscode === "APPR") { + localStorage.removeItem("webtoken"); + localStorage.removeItem("transactionid"); + } + } + }); + } + }); + + + } + + return ( + !onReady ? + + : + transactionData.paymentdetail?.result?.paymentstatuscode === "APPR" ? + ( + + +
+ + 公共啟事:付款成功 + +
+
+ {/*row 1*/} + + +
+ + + + 您的申請和付款已收到 + + + + + + + + 交易參考號: + + + + + {"P" + transactionData.transactionid} + + + + + + + + + 交易日期: + + + + + {transactionDate + " (DD/MM/YYYY)"} + + + + + + + + + 交易時間: + + + + + {transactionTime + " (HH:MI:SS)"} + + + + + + + + + EGIS 參考號: + + + + + {transactionData.transactionid} + + + + + + + + + 支付金額 + + + + + {"HK$ " + transactionData.amount} + + + + + + + + + 付款方式: + + + + + {transactionData.paymentdetail.subtype ?? (transactionData.paymentdetail.paymentmethod === "01" ? "PPS" : "")} + + + + + + +
+
+
+ {/*row 2*/} +
+ ) : + (transactionData.paymentdetail?.result?.paymentstatuscode === "CANC" ? + + + +
+ + 公共啟事:付款取消 + +
+
+ {/*row 1*/} + + +
+ + + 付款取消訊息: +

+ 您的付款已被取消。我們收到了您的付款請求,但由於某些原因,付款無法完成。請注意以下事項: +

+ 如果您主動取消了支付,請確認並確保取消是您的意願。 +
+ 如果付款被取消是由於系統問題或其他原因,請您嘗試以下解決方法: +

+ 檢查您的支付帳戶是否有任何異常或限制。 +
+ 確保您的付款資訊準確無誤。 +
+ 檢查您的網路連線是否正常。 +

+ 如果您需要進一步的協助或有任何疑問,請隨時與我們聯繫,我們將盡快解決您的付款問題。謝謝! +
+
+
+
+
+ {/*row 2*/} +
+ : + + +
+ + 公共啟事:付款失敗 + +
+
+ {/*row 1*/} + + +
+ + + + 付款失敗訊息: +

+ 親愛的用戶,很遺憾地告訴您,您的付款操作未成功。我們在處理您的付款時遇到了問題。請您仔細檢查以下事項: +

+ 您的支付帳戶餘額是否足夠。 +
+ 您提供的付款資訊是否準確無誤。 +
+ 請檢查您的網路連線是否正常。 +

+ 如果您已確認以上問題無誤,但付款失敗,請您嘗試以下解決方法: +

+ 嘗試使用其他付款方式進行付款。 +
+ 檢查您的支付帳戶是否有異常或限制。 +
+ 聯絡我們的客服人員尋求協助。 +

+ 如果您需要進一步的協助或有任何疑問,請隨時與我們聯繫。非常抱歉給您帶來不便,我們將盡快解決您的付款問題。謝謝! +
+ +
+
+
+
+ {/*row 2*/} +
+ ) + + ); +}; + +export default Index; diff --git a/src/pages/Payment/PaymentSuccess.js b/src/pages/Payment/PaymentSuccess.js deleted file mode 100644 index 01960dc..0000000 --- a/src/pages/Payment/PaymentSuccess.js +++ /dev/null @@ -1,330 +0,0 @@ -// material-ui -import { - Grid, - Typography, - Stack, - // Button, - FormLabel, -} from '@mui/material'; -import * as React from "react"; -import * as HttpUtils from "utils/HttpUtils"; -//import { useNavigate } from 'react-router-dom'; -import { paymentPath } from "auth/utils"; - -import Loadable from 'components/Loadable'; -const LoadingComponent = Loadable(React.lazy(() => import('pages/extra-pages/LoadingComponent'))); - -import titleBackgroundImg from 'assets/images/dashboard/gazette-bar.png' -const BackgroundHead = { - backgroundImage: `url(${titleBackgroundImg})`, - width: '100%', - height: '100%', - backgroundSize: 'contain', - backgroundRepeat: 'no-repeat', - backgroundColor: '#0C489E', - backgroundPosition: 'right' -} - -// ==============================|| DASHBOARD - DEFAULT ||============================== // - -const Index = () => { - //const navigate = useNavigate() - const [responeData, setResponeDataData] = React.useState({}); - - const [transactionData, setTransactionData] = React.useState({}); - const [transactionDate, setTransactionDate] = React.useState(""); - const [transactionTime, setTransactionTime] = React.useState(""); - const [onReady, setOnReady] = React.useState(false); - const updatePaymentApi = "/api/payment/updatepayment"; - //const paymentStatusApi = "/api/payment/status/"; - - - React.useEffect(() => { - console.log("webtoken: " + localStorage.getItem("webtoken")); - if (localStorage.getItem("webtoken") != null && localStorage.getItem("webtoken") != "") { - loadForm(); - } - // else{ - // navigate("/dashboard"); - // } - }, []); - - React.useEffect(() => { - console.log(responeData) - if (Object.keys(responeData).length > 0) { - setTransactionData(responeData) - } - }, [responeData]); - - React.useEffect(() => { - console.log(transactionData) - if (Object.keys(transactionData).length > 0) { - setOnReady(true); - } - }, [transactionData]); - - const loadForm = () => { - const date = new Date(); - const trnDate = date.getDate() + "/" + date.getMonth() + "/" + date.getFullYear(); - const trnTime = date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds(); - setTransactionDate(trnDate) - setTransactionTime(trnTime) - const params = new URLSearchParams(window.location.search); - let transactionid = params.get("TRANSACTION_ID") - let receipt_token = params.get("RECEIPT_TOKEN").replace("%3D", "=") - - HttpUtils.post({ - url: paymentPath + updatePaymentApi, - params: { - "transactionid": transactionid, - "receipttoken": receipt_token, - }, - onSuccess: function (responseData) { - // { - // "transactionid": "", - // "currencycode":"", - // "amount":, - // "paymentdetail":{ - // "paymentid": "", - // "paymentmethod": "", - // "time": "