// material-ui import { Grid, Typography, Stack, Button, } from '@mui/material'; import * as React from "react"; import * as HttpUtils from "utils/HttpUtils"; 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 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 location = useLocation(); const [paymentData, setPaymentData] = React.useState({}); const [onReady, setOnReady] = React.useState(false); const [paymentid, setPaymentid] = React.useState(""); const [fpsmerchanttimeoutdatetime, setFpsmerchanttimeoutdatetime] = React.useState(""); const [fpsqrcodeimgbase64, setFpsqrcodeimgbase64] = React.useState(""); const [paymentstatuscode, setPaymentstatuscode] = React.useState(""); // const [fpsqrcodeurl, setFpsqrcodeurl] = React.useState(""); // const pasgPath = 'https://fps.payapps.hkicl.com.hk'; //PRD // const pasgPath = 'https://sim.fps.payapps.hkicl.com.hk'; //Testing const loadPaymentUrl = "/api/payment/wallet/fps"; const cancelPaymentUrl = "/api/payment/cancelpayment"; const paymentStatusApi = "/api/payment/status/"; // const payloadUrl = "/api/payment/wallet/fps/enquiryfpspayload/"; // const receiverUrl = "/noti-api/payment/payment-notification"; //timer const currentTimer = React.useRef(); const [time, setTime] = React.useState(0); React.useEffect(() => { setFpsqrcodeimgbase64("") if(location.state != undefined){ setPaymentData(location.state) loadForm(); } }, []); React.useEffect(() => { setOnReady(true); }, [fpsqrcodeimgbase64]); const loadForm = () => { // const timeoutdatetime = "2023-10-26T09:04:30Z[UTC]" // const convertedDateString = timeoutdatetime.replace("[UTC]", ""); // setFpsmerchanttimeoutdatetime(convertedDateString) // setPaymentid("C202310268000681") // setPaymentstatuscode("APPR") HttpUtils.post({ url: paymentPath+loadPaymentUrl, params:{ "transactionid": paymentData.transactionid, "webtoken": paymentData.webtoken, "paymentmethod":"04,BCFP,FPS", "order": { "totalamount":paymentData.amount, "currency":"HKD", "orderdetail": [ { "itemid": "1", "qty":"1", "unitprice":paymentData.amount, "amount":paymentData.amount }, ] }, // "locale":"", // "eserviceid":"" }, onSuccess: function(responseData){ /* { "paymentid": "", "paymentstatus": "", "fpsmerchanttimeoutdatetime": , "fpsqrcodeimgbase64": "", "fpsqrcodeurl": "" } */ setFpsqrcodeimgbase64(responseData.fpsqrcodeimgbase64); setPaymentid(responseData.paymentid); const timeoutdatetime = responseData.fpsmerchanttimeoutdatetime const convertedDateString = timeoutdatetime.replace("[UTC]", ""); setFpsmerchanttimeoutdatetime(convertedDateString) setPaymentstatuscode(responseData.paymentstatuscode); // const parsedUrl = new URL(responseData.fpsqrcodeurl); // const fpsqrcodeurl = parsedUrl.pathname; // const openPASGUrl = pasgPath + '?pay_req_obj=' + encodeURIComponent(responseData.fpsqrcodeurl) + '&callback=' // + encodeURIComponent(paymentPath + payment.config.fpscallbackPage); // setFpsqrcodeurl(openPASGUrl) } }); currentTimer.current = setInterval(() => { setTime((prevTime) => prevTime + 1); }, 1000); return () => clearInterval(currentTimer.current); } const getPaymentStatus = () => { console.log(paymentstatuscode) // if (paymentstatuscode != "" && paymentstatuscode != "INPR" ){ // if (paymentstatuscode === 'APPR') { // const timestamp = Date.now(); // navigate('/payment/fps/ackpage', {state:{transactionDateTime:timestamp,transactionid:"",webtoken:"", paymentid:paymentid} }); // } else if (paymentstatuscode === 'CANC') { // navigate('/payment'); // } else { // alert("error") // } // } HttpUtils.post({ url: paymentPath+paymentStatusApi+paymentid, params:{ "apprefid": paymentData.transactionid, "webtoken": paymentData.webtoken, }, onSuccess: function(responseData){ const paymentstatuscode = responseData.paymentdetail.result.paymentstatuscode; if (paymentstatuscode === 'APPR') { const timestamp = Date.now(); navigate('/payment/fps/ackpage', {state:{transactionDateTime:timestamp,transactionid:"",webtoken:"", paymentid:paymentid} }); } else if (paymentstatuscode === 'CANC') { window.top.location.href = paymentPath + payment.config.indexPagePath; } else { window.top.location.href = paymentPath + payment.config.errPagePath; } }, onError: function(){ cancelPayment() clearInterval(currentTimer.current); } }); }; React.useEffect(() => { const timeOutDate = new Date(fpsmerchanttimeoutdatetime); const currentTime = new Date; console.log(time) getPaymentStatus(); if (timeOutDate.getTime(){ HttpUtils.post({ url: paymentPath+cancelPaymentUrl, params:{ "transactionid": paymentData.transactionid, "webtoken": paymentData.webtoken, "paymentid": paymentid }, onSuccess: function(){ navigate("/dashboard"); } }); } return ( !onReady ? : (
公共啟事:FPS付款
{/*row 1*/}
FPS
支付金額
{"$HK " + paymentData.amount}
請掃描以下二維碼
QR Code
二維碼有效期限10分鐘
請在規定時間內完成付款流程 ({fpsmerchanttimeoutdatetime})
{/*row 2*/}
) ); }; export default Index;