|
|
|
@@ -1,16 +1,280 @@ |
|
|
|
// material-ui |
|
|
|
import { |
|
|
|
Grid, |
|
|
|
Typography, |
|
|
|
Stack, |
|
|
|
Box |
|
|
|
// Button, |
|
|
|
// FormLabel, |
|
|
|
} from '@mui/material'; |
|
|
|
import * as React from "react"; |
|
|
|
import {useEffect} from "react"; |
|
|
|
import * as HttpUtils from "utils/HttpUtils"; |
|
|
|
import * as UrlUtils from "utils/ApiPathConst"; |
|
|
|
// import { useNavigate } from "react-router-dom"; |
|
|
|
// import FpsIcon from "assets/images/icons/fps.svg"; |
|
|
|
// import { useLocation } from 'react-router-dom'; |
|
|
|
import {paymentPath} from "auth/utils"; |
|
|
|
// import {poll} from "utils/Utils"; |
|
|
|
import * as DateUtils from "utils/DateUtils" |
|
|
|
|
|
|
|
import Loadable from 'components/Loadable'; |
|
|
|
const LoadingComponent = Loadable(React.lazy(() => import('pages/extra-pages/LoadingComponent'))); |
|
|
|
const PaymentDetails = Loadable(React.lazy(() => import('../Details_Public/PaymentDetails'))); |
|
|
|
const DataGrid = Loadable(React.lazy(() => import('../Details_Public/DataGrid'))); |
|
|
|
|
|
|
|
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 Fpscallback = () => { |
|
|
|
// const navigate = useNavigate() |
|
|
|
// const location = useLocation(); |
|
|
|
|
|
|
|
// const [locationData, setLocationData] = React.useState({}); |
|
|
|
const [paymentData, setPaymentData] = React.useState({}); |
|
|
|
const [responeData, setResponeDataData] = React.useState({}); |
|
|
|
const [itemList, setItemList] = React.useState([]); |
|
|
|
|
|
|
|
const [transactionData, setTransactionData] = React.useState({}); |
|
|
|
// const [transactionDate, setTransactionDate] = React.useState(""); |
|
|
|
// const [transactionTime, setTransactionTime] = React.useState(""); |
|
|
|
const [onReady, setOnReady] = React.useState(false); |
|
|
|
const paymentStatusApi = "/api/payment/status/"; |
|
|
|
|
|
|
|
useEffect(() => { |
|
|
|
window.close(); |
|
|
|
|
|
|
|
React.useEffect(() => { |
|
|
|
loadForm(); |
|
|
|
}, []); |
|
|
|
|
|
|
|
React.useEffect(() => { |
|
|
|
console.log(responeData) |
|
|
|
if(Object.keys(responeData).length > 0){ |
|
|
|
setTransactionData(responeData) |
|
|
|
} |
|
|
|
}, [responeData]); |
|
|
|
|
|
|
|
React.useEffect(() => { |
|
|
|
// console.log(paymentData) |
|
|
|
console.log(transactionData) |
|
|
|
if(Object.keys(transactionData).length > 0 ){ |
|
|
|
setOnReady(true); |
|
|
|
} |
|
|
|
}, [transactionData]); |
|
|
|
|
|
|
|
const loadForm = () => { |
|
|
|
const params = new URLSearchParams(window.location.search); |
|
|
|
let transactionid = params.get("TRANSACTION_ID") |
|
|
|
let webtoken = params.get("WEB_TOKEN") |
|
|
|
let paymentId = params.get("PAYMENT_ID") |
|
|
|
|
|
|
|
console.log(transactionid) |
|
|
|
console.log(webtoken) |
|
|
|
console.log(paymentId) |
|
|
|
|
|
|
|
HttpUtils.post({ |
|
|
|
url: paymentPath+paymentStatusApi+transactionid, |
|
|
|
params:{ |
|
|
|
"apprefid": transactionid, |
|
|
|
"webtoken": webtoken, |
|
|
|
}, |
|
|
|
onSuccess: function(responseData){ |
|
|
|
setResponeDataData(responseData) |
|
|
|
if (responseData.paymentdetail?.result?.paymentstatuscode === "APPR") { |
|
|
|
localStorage.removeItem("webtoken"); |
|
|
|
localStorage.removeItem("transactionid"); |
|
|
|
} |
|
|
|
HttpUtils.post({ |
|
|
|
url: UrlUtils.PAYMENT_SAVE, |
|
|
|
params: { |
|
|
|
id: paymentId, |
|
|
|
transNo: responseData.transactionid, |
|
|
|
transDateTime: responseData.paymentdetail.time.replace("[UTC]", ""), |
|
|
|
egisRefNo: responseData.paymentdetail.paymentid, |
|
|
|
status: responseData.paymentdetail.result.paymentstatuscode, |
|
|
|
payload: responseData |
|
|
|
}, |
|
|
|
onSuccess: function (responseData2) { |
|
|
|
responseData2.data["transDateStr"] = DateUtils.dateFormat(responseData2.data.transDateTime, "DD/MM/YYYY"); |
|
|
|
responseData2.data["transTimeStr"] = DateUtils.dateFormat(responseData2.data.transDateTime, "HH:mm:ss"); |
|
|
|
setItemList(responseData2.paymentItemList) |
|
|
|
setPaymentData(responseData2.data); |
|
|
|
localStorage.removeItem("paymentId"); |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
}); |
|
|
|
|
|
|
|
// setTransactionData( |
|
|
|
// { |
|
|
|
// "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" |
|
|
|
// } |
|
|
|
// ) |
|
|
|
} |
|
|
|
|
|
|
|
return ( |
|
|
|
<div></div> |
|
|
|
!onReady ? |
|
|
|
<LoadingComponent /> |
|
|
|
: |
|
|
|
transactionData.paymentdetail?.result?.paymentstatuscode === "APPR" ? |
|
|
|
( |
|
|
|
<Grid container sx={{ minHeight: '110vh', backgroundColor: '#fff' }} direction="column" justifyContent="flex-start" alignItems="center" > |
|
|
|
<Grid item xs={12} width="100%"> |
|
|
|
<div style={BackgroundHead} width="100%"> |
|
|
|
<Stack direction="row" height='70px'> |
|
|
|
<Typography ml={15} color='#FFF' variant="h4" sx={{ pt: 2 }}>公共啟事:付款成功</Typography> |
|
|
|
</Stack> |
|
|
|
</div> |
|
|
|
</Grid> |
|
|
|
{/*row 1*/} |
|
|
|
<Grid item xs={12} md={12} > |
|
|
|
<Grid container justifyContent="flex-start" alignItems="center" > |
|
|
|
<center> |
|
|
|
<Grid item xs={12} md={12} > |
|
|
|
|
|
|
|
<Typography variant="h3" sx={{ ml: 8, mt: 4, mr: 8, textAlign: "center" }}> |
|
|
|
您的申請和付款已收到 |
|
|
|
</Typography> |
|
|
|
|
|
|
|
<Grid container> |
|
|
|
<Grid item xs={12} md={12} sx={{ textAlign: "center" }}> |
|
|
|
<Grid container justifyContent="center" spacing={2} sx={{ p: 2 }} alignitems="stretch" > |
|
|
|
<Grid item xs={12} md={5} sx={{ pt: 1, pb: 2 }} style={{ height: '100%' }}> |
|
|
|
<Box xs={12} md={12} sx={{ p: 4, border: '3px solid #eee', borderRadius: '10px' }} > |
|
|
|
<DataGrid |
|
|
|
recordList={itemList} |
|
|
|
/> |
|
|
|
</Box> |
|
|
|
</Grid> |
|
|
|
<Grid item xs={12} md={5} sx={{ pt: 2 }} style={{ height: '100%' }}> |
|
|
|
<Box xs={12} md={12} sx={{ p: 4, border: '3px solid #eee', borderRadius: '10px' }} > |
|
|
|
<PaymentDetails |
|
|
|
formData={paymentData} |
|
|
|
style={{ |
|
|
|
display: "flex", |
|
|
|
height: "100%", |
|
|
|
flex: 1 |
|
|
|
}} |
|
|
|
/> |
|
|
|
</Box> |
|
|
|
</Grid> |
|
|
|
</Grid> |
|
|
|
</Grid> |
|
|
|
|
|
|
|
</Grid> |
|
|
|
</Grid> |
|
|
|
</center> |
|
|
|
</Grid> |
|
|
|
</Grid> |
|
|
|
{/*row 2*/} |
|
|
|
</Grid > |
|
|
|
) : |
|
|
|
(transactionData.paymentdetail?.result?.paymentstatuscode === "CANC" ? |
|
|
|
<Grid container sx={{ minHeight: '110vh', backgroundColor: '#fff' }} direction="column" justifyContent="flex-start" alignItems="center" > |
|
|
|
<Grid item xs={12} width="100%"> |
|
|
|
<div style={BackgroundHead} width="100%"> |
|
|
|
<Stack direction="row" height='70px'> |
|
|
|
<Typography ml={15} color='#FFF' variant="h4" sx={{ pt: 2 }}>公共啟事:付款取消</Typography> |
|
|
|
</Stack> |
|
|
|
</div> |
|
|
|
</Grid> |
|
|
|
{/*row 1*/} |
|
|
|
<Grid item xs={12} md={12} > |
|
|
|
<Grid container justifyContent="flex-start" alignItems="center" > |
|
|
|
<center> |
|
|
|
<Grid item xs={12} md={8} > |
|
|
|
<Typography variant="h5" sx={{ ml: 8, mt: 4, mr: 8, textAlign: "left" }}> |
|
|
|
付款取消訊息: |
|
|
|
<br /><br /> |
|
|
|
您的付款已被取消。我們收到了您的付款請求,但由於某些原因,付款無法完成。請注意以下事項: |
|
|
|
<br /><br /> |
|
|
|
如果您主動取消了支付,請確認並確保取消是您的意願。 |
|
|
|
<br /> |
|
|
|
如果付款被取消是由於系統問題或其他原因,請您嘗試以下解決方法: |
|
|
|
<br /><br /> |
|
|
|
檢查您的支付帳戶是否有任何異常或限制。 |
|
|
|
<br /> |
|
|
|
確保您的付款資訊準確無誤。 |
|
|
|
<br /> |
|
|
|
檢查您的網路連線是否正常。 |
|
|
|
<br /><br /> |
|
|
|
如果您需要進一步的協助或有任何疑問,請隨時與我們聯繫,我們將盡快解決您的付款問題。謝謝! |
|
|
|
</Typography> |
|
|
|
</Grid> |
|
|
|
</center> |
|
|
|
</Grid> |
|
|
|
</Grid> |
|
|
|
{/*row 2*/} |
|
|
|
</Grid > |
|
|
|
: |
|
|
|
<Grid container sx={{ minHeight: '110vh', backgroundColor: '#fff' }} direction="column" justifyContent="flex-start" alignItems="center" > |
|
|
|
<Grid item xs={12} width="100%"> |
|
|
|
<div style={BackgroundHead} width="100%"> |
|
|
|
<Stack direction="row" height='70px'> |
|
|
|
<Typography ml={15} color='#FFF' variant="h4" sx={{ pt: 2 }}>公共啟事:付款失敗</Typography> |
|
|
|
</Stack> |
|
|
|
</div> |
|
|
|
</Grid> |
|
|
|
{/*row 1*/} |
|
|
|
<Grid item xs={12} md={12} > |
|
|
|
<Grid container justifyContent="flex-start" alignItems="center" > |
|
|
|
<center> |
|
|
|
<Grid item xs={12} md={8} > |
|
|
|
|
|
|
|
<Typography variant="h5" sx={{ ml: 8, mt: 4, mr: 8, textAlign: "left" }}> |
|
|
|
付款失敗訊息: |
|
|
|
<br /><br /> |
|
|
|
親愛的用戶,很遺憾地告訴您,您的付款操作未成功。我們在處理您的付款時遇到了問題。請您仔細檢查以下事項: |
|
|
|
<br /><br /> |
|
|
|
您的支付帳戶餘額是否足夠。 |
|
|
|
<br /> |
|
|
|
您提供的付款資訊是否準確無誤。 |
|
|
|
<br /> |
|
|
|
請檢查您的網路連線是否正常。 |
|
|
|
<br /><br /> |
|
|
|
如果您已確認以上問題無誤,但付款失敗,請您嘗試以下解決方法: |
|
|
|
<br /><br /> |
|
|
|
嘗試使用其他付款方式進行付款。 |
|
|
|
<br /> |
|
|
|
檢查您的支付帳戶是否有異常或限制。 |
|
|
|
<br /> |
|
|
|
聯絡我們的客服人員尋求協助。 |
|
|
|
<br /><br /> |
|
|
|
如果您需要進一步的協助或有任何疑問,請隨時與我們聯繫。非常抱歉給您帶來不便,我們將盡快解決您的付款問題。謝謝! |
|
|
|
</Typography> |
|
|
|
|
|
|
|
</Grid> |
|
|
|
</center> |
|
|
|
</Grid> |
|
|
|
</Grid> |
|
|
|
{/*row 2*/} |
|
|
|
</Grid > |
|
|
|
) |
|
|
|
); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
export default Fpscallback; |
|
|
|
export default Fpscallback; |