瀏覽代碼

Eu kyc 信息

zhejiushizhuce 1 年之前
父節點
當前提交
70520af0ec

+ 2 - 1
src/api/config.js

@@ -58,6 +58,7 @@ export const APP_PAY_ORDER_LIST=BASE_PREFIX+"pay/orderList";
 export const APP_PAYMENT_ORDER_QR=BASE_PREFIX+"payment_entry/payqr";
 export const APP_FIRST_PAY_MULTI=BASE_PREFIX+"pay/first_pay_multi";
 export const APP_GET_SECOND=BASE_PREFIX+"pay/get_second";
+export const APP_PAY_KYC_EU=BASE_PREFIX+"kyc/eu";
 //pay
 //withdraw
 export const APP_WITHDRAW_TAX="api/api/withDrawTax";
@@ -132,4 +133,4 @@ export const APP_PROTECT_GET=BASE_PREFIX+"protect/get";
 export const APP_APK_LOADNEW=BASE_PREFIX+"apk/loadnew";
 
 //save cpf
-export const APP_SAVE_CPF=BASE_PREFIX+"withDraw/savecpf";
+export const APP_SAVE_CPF=BASE_PREFIX+"withDraw/savecpf";

+ 24 - 1
src/features/api.js

@@ -29,7 +29,7 @@ import {
     APP_MAIL_LIST,
     APP_MAIL_READ,
     APP_MAIL_TAKE, APP_MEX_WITHDRAW_SET_INFO,
-    APP_PAGE_MODULES,
+    APP_PAGE_MODULES, APP_PAY_KYC_EU,
     APP_PAY_ORDER_LIST,
     APP_PAYMENT_ORDER, APP_PAYMENT_ORDER_QR, APP_PROTECT_CHECK, APP_PROTECT_GET,
     APP_RECHARGE_CONFIG,
@@ -1067,4 +1067,27 @@ export const reqForgetPass=createAsyncThunk(
         return response;
     },
 )
+//kyc eu
+export const reqKycEU=createAsyncThunk(
+    APP_PAY_KYC_EU,
+    async (arg,thunkAPI)=>{
+        // firstName
+        // lastName
+        // phone
+        // email
+        // city
+        let params={
+            url:APP_PAY_KYC_EU,
+            data:{
+                firstName:arg.firstName,
+                lastName:arg.lastName,
+                phone:arg.phone,
+                email:arg.email,
+                city:arg.city
+            }
+        }
+        const response = await Http.post(params);
+        return response;
+    },
+)
 //api

+ 27 - 2
src/features/paySlice.js

@@ -8,7 +8,7 @@ import {
     reqFirstPayMulti,
     reqForgetPayPass, reqGameInfo,
     reqGetAccountsPayInfo,
-    reqGetSecond,
+    reqGetSecond, reqKycEU,
     reqMexWithdrawSetInfo,
     reqPaymentOrder,
     reqPaymentOrderQR,
@@ -113,6 +113,7 @@ const reducerPaymentOrder=(state,action,arg)=>{
             let msg=getHttpMsg(payload);
             toast.error(msg);
         }
+        if (arg.callbackError!=null)arg.callbackError(payload);
     }
 }
 const paymentOrderStatus=(state,status,arg)=>{
@@ -364,6 +365,24 @@ const checkBonusPackLeftTime=(data)=>{
     }
 }
 //bonus pack
+//kyc eu
+const reducerKycEU=(state,action,arg)=>{
+    let payload=action.payload;
+    let msg=getHttpMsg(payload);
+    if (payload!=null&&payload.code===200){
+        toast.success(i18n.t("deposit.infomation.success"));
+    }
+    else {
+        toast.error(msg);
+    }
+    if (arg&&arg.callback!=null){
+        arg.callback(payload);
+    }
+}
+const kycEUStatus=(state,status,arg)=>{
+    state.status.KycEU=status;
+}
+//kyc eu
 export const Pay=createSlice({
     name: 'pay',
     initialState: {
@@ -384,6 +403,7 @@ export const Pay=createSlice({
             PaymentOrderQR:REQ_STATUS.NONE,
             FirstPayMulti:REQ_STATUS.NONE,
             GetSecond:REQ_STATUS.NONE,
+            KycEU:REQ_STATUS.NONE,
         },
         config:[],
         payconfig:null,
@@ -399,7 +419,7 @@ export const Pay=createSlice({
         showBonus:false,
         cpfFirst:false,
         firstPayMulti:null,
-        bonusPack:null
+        bonusPack:null,
     },
     reducers: {
         updatePayFinish:((state, action) => {
@@ -459,6 +479,7 @@ export const Pay=createSlice({
         buildReqReducer(builder,reqPaymentOrderQR,reducerPaymentOrder,paymentOrderQRStatus);
         buildReqReducer(builder,reqFirstPayMulti,reducerFirstPayMulti,firstPayMultiStatus);
         buildReqReducer(builder,reqGetSecond,reducerGetSecond,getSecondStatus);
+        buildReqReducer(builder,reqKycEU,reducerKycEU,kycEUStatus)
     },
 })
 export const {updatePayFinish,setChangePayPassType,updateMultiCD,updateBonusPack,updateBonusPackCD} = Pay.actions;
@@ -582,6 +603,10 @@ export const getGetSecondStatus=(state)=>{
 export const getBonusPack=(state)=>{
     return state.pay.bonusPack;
 }
+//kyc
+export const getKycEUStatus=(state)=>{
+    return state.pay.status.KycEU;
+}
 export default Pay.reducer;
 
 export const reqPayConfig=(dispatch,userInfo)=>{

+ 1 - 1
src/hooks/useGameIFrame.js

@@ -91,4 +91,4 @@ const useGameIFrame = () => {
         setIsGameLoad
     };
 }
-export default useGameIFrame;
+export default useGameIFrame;

+ 2 - 0
src/layout/Layout.jsx

@@ -40,6 +40,7 @@ import WFirstPay from "@widgets/WFirstPay";
 import WAreaSelect from "@widgets/WAreaSelect";
 import WSaveAccount from "@widgets/WSaveAccount";
 import WBonusPack from "@widgets/WBonusPack";
+import WDepositInfo from "@widgets/WDeposit/WPayInfo/WDepositInfo";
 const PageNotFound = lazy(() => import('@pages/PageNotFound'));
 
 const Layout=({...props})=>{
@@ -138,6 +139,7 @@ const Layout=({...props})=>{
                 <WFirstPay/>
                 <WSaveAccount/>
                 <WBonusPack/>
+                <WDepositInfo/>
             </>
         )
     }

+ 16 - 0
src/locales/languages/en_US.json

@@ -304,6 +304,22 @@
       "cpfTips_1": "Please fill in the correct information to ensure the efficiency of your wallet service.",
       "cpf_error": "Please enter a valid CPF",
       "btn_confirm": "Confirm"
+    },
+    "infomation": {
+      "modifyInfoTitle": "Recharge Information",
+      "title_firstName": "First Name",
+      "ph_firstName": "Enter First Name",
+      "title_lastName": "Last Name",
+      "ph_lastName": "Enter Last Name",
+      "title_email": "Email",
+      "ph_email": "Enter Email ID",
+      "title_city": "City",
+      "ph_city": "Enter your city",
+      "btn_confirm": "Confirm",
+      "info_tips": "Please fill in the correct information to ensure the efficiency of your wallet service.",
+      "title_phone": "Telephone",
+      "ph_phone": "Phone Number",
+      "success":"Saved successfully"
     }
   },
   "game": {

+ 16 - 0
src/locales/languages/es_MX.json

@@ -299,6 +299,22 @@
       "cpfTips_1": "Por favor, rellene la información correcta para garantizar la eficiencia de su servicio de billetera.",
       "cpf_error": "Por favor ingrese un CPF válido",
       "btn_confirm": "Confirmar"
+    },
+    "infomation": {
+      "modifyInfoTitle": "Información de recarga",
+      "title_firstName": "Nombre de pila",
+      "ph_firstName": "Ingrese el nombre",
+      "title_lastName": "Apellido",
+      "ph_lastName": "Ingrese Apellido",
+      "title_email": "Correo electrónico",
+      "ph_email": "Ingrese su ID de correo electrónico",
+      "title_city": "Ciudad",
+      "ph_city": "Introduce tu ciudad",
+      "btn_confirm": "Confirmar",
+      "info_tips": "Por favor, rellene la información correcta para garantizar la eficiencia de su servicio de billetera.",
+      "title_phone": "Teléfono",
+      "ph_phone": "Número de teléfono",
+      "success":"Guardado exitosamente"
     }
   },
   "game": {

+ 16 - 0
src/locales/languages/pt_BR.json

@@ -299,6 +299,22 @@
       "cpfTips_1": "Preencha as informações corretas para garantir a eficiência do seu serviço de carteira.",
       "cpf_error": "Por favor, insira um CPF válido",
       "btn_confirm": "Confirmar"
+    },
+    "infomation": {
+      "modifyInfoTitle": "Informações de recarga",
+      "title_firstName": "Primeiro nome",
+      "ph_firstName": "Digite o primeiro nome",
+      "title_lastName": "Sobrenome",
+      "ph_lastName": "Digite o sobrenome",
+      "title_email": "E-mail",
+      "ph_email": "Insira o ID de e-mail",
+      "title_city": "Cidade",
+      "ph_city": "Insira sua cidade",
+      "btn_confirm": "Confirmar",
+      "info_tips": "Preencha as informações corretas para garantir a eficiência do seu serviço de carteira.",
+      "title_phone": "Telefone",
+      "ph_phone": "Número de telefone",
+      "success":"Salvo com sucesso"
     }
   },
   "game": {

+ 16 - 0
src/locales/languages/ru_RU.json

@@ -299,6 +299,22 @@
       "cpfTips_1": "Пожалуйста, заполните правильную информацию, чтобы обеспечить эффективность обслуживания вашего кошелька.",
       "cpf_error": "Введите действительный CPF",
       "btn_confirm": "Подтвердить"
+    },
+    "infomation": {
+      "modifyInfoTitle": "Информация о пополнении счета",
+      "title_firstName": "Имя",
+      "ph_firstName": "Введите имя",
+      "title_lastName": "Фамилия",
+      "ph_lastName": "Введите фамилию",
+      "title_email": "Электронная почта",
+      "ph_email": "Введите адрес электронной почты",
+      "title_city": "Город",
+      "ph_city": "Введите ваш город",
+      "btn_confirm": "Подтверждать",
+      "info_tips": "Пожалуйста, заполните правильную информацию, чтобы обеспечить эффективность обслуживания вашего кошелька.",
+      "title_phone": "Телефон",
+      "ph_phone": "Номер телефона",
+      "success":"Сохранено успешно"
     }
   },
   "game": {

+ 16 - 0
src/locales/languages/zh_TW.json

@@ -299,6 +299,22 @@
       "cpfTips_1": "請填寫正確的訊息,以確保您的錢包服務的效率。",
       "cpf_error": "請輸入有效的CPF",
       "btn_confirm": "確認"
+    },
+    "infomation": {
+      "modifyInfoTitle": "儲值資訊",
+      "title_firstName": "名",
+      "ph_firstName": "輸入名字",
+      "title_lastName": "姓",
+      "ph_lastName": "輸入姓氏",
+      "title_email": "電子郵件",
+      "ph_email": "輸入電子郵件 ID",
+      "title_city": "城市",
+      "ph_city": "輸入您的城市",
+      "btn_confirm": "確認",
+      "info_tips": "請填寫正確的訊息,以確保您的錢包服務的效率。",
+      "title_phone": "電話",
+      "ph_phone": "電話號碼",
+      "success":"保存成功"
     }
   },
   "game": {

+ 13 - 1
src/widgets/WBonusPack/index.jsx

@@ -50,8 +50,20 @@ const WBonusPack = () => {
         let reqOrder=()=>{
             data.user=user;
             data.callback=onGetPaymentCallback;
+            data.callbackError=callbackErr;
             dispatch(reqPaymentOrder(data));
         }
+        let callbackErr=(payload)=>{
+            if (payload&&payload.code===301){
+                if (areaItem.code===APP_COUNTRY_CODE.EU){
+                    if (global.wdepositInfo!=null){
+                        global.wdepositInfo.show(()=>{
+                            reqOrder();
+                        });
+                    }
+                }
+            }
+        }
         if (areaItem.code===APP_COUNTRY_CODE.RU){
             if (global.ruPaytypeSelect!=null){
                 global.ruPaytypeSelect.show((eventType)=>{
@@ -209,4 +221,4 @@ const WBonusPack = () => {
         </>
     )
 }
-export default WBonusPack;
+export default WBonusPack;

+ 12 - 0
src/widgets/WDeposit/BR/BRDeposit.jsx

@@ -83,8 +83,20 @@ const BRDeposit=()=>{
         let reqOrder=()=>{
             data.user=user;
             data.callback=onGetPaymentCallback;
+            data.callbackError=callbackErr;
             dispatch(reqPaymentOrder(data));
         }
+        let callbackErr=(payload)=>{
+            if (payload&&payload.code===301){
+                if (areaItem.code===APP_COUNTRY_CODE.EU){
+                    if (global.wdepositInfo!=null){
+                        global.wdepositInfo.show(()=>{
+                            reqOrder();
+                        });
+                    }
+                }
+            }
+        }
         if (areaItem.code===APP_COUNTRY_CODE.RU){
             if (global.ruPaytypeSelect!=null){
                 global.ruPaytypeSelect.show((eventType)=>{

+ 204 - 0
src/widgets/WDeposit/WPayInfo/WDepositInfo.jsx

@@ -0,0 +1,204 @@
+import React, {useEffect, useState} from "react";
+import Popup from "@components/Popup";
+import styles from "./styles.module.scss";
+import {Controller, useForm} from "react-hook-form";
+import classNames from "classnames";
+import {validateCountryPhone, validateEmail} from "@utils/helpers";
+import {REQ_STATUS} from "@api/config";
+import SmallLoading from "@components/SmallLoading";
+import PhoneInput from "@components/UInput/PhoneInput";
+import {useDispatch, useSelector} from "react-redux";
+import {getKycEUStatus} from "@features/paySlice";
+import {reqKycEU} from "@features/api";
+
+const i18n=global.i18n;
+const WDepositInfo = ({})=>{
+    const [isShow, setIsShow] = useState(false);
+    const [country, setCountry] = useState("55");
+    const reqKycStatus=useSelector(getKycEUStatus);
+    const dispatch = useDispatch();
+    const {register, handleSubmit, formState: {errors}, control} = useForm({
+        defaultValues: {
+            firstName:'',
+            lastName:'',
+            phone:'',
+            email:'',
+            city:''
+        }
+    });
+    const show=(callback)=>{
+        global.wdepositInfo.callback=callback;
+        setIsShow(true);
+    }
+    const hide=()=>{
+        setIsShow(false);
+    }
+    useEffect(()=>{
+        const wdepositInfo={
+            show,
+            hide
+        };
+        global.wdepositInfo=wdepositInfo;
+    },[])
+    const onCallback=(payload)=>{
+        if (payload&&payload.code===200){
+            if (global.wdepositInfo.callback)global.wdepositInfo.callback();
+            hide();
+        }
+    }
+    const onSubmitInfo=(data)=>{
+        if (reqKycStatus===REQ_STATUS.LOADING)return;
+        let phone=country+data.phone;
+        let new_data=Object.assign({},data,{phone:phone});
+        dispatch(reqKycEU(new_data)).then((data)=>{
+            onCallback(data.payload)
+        });
+    }
+    const validateMail=(value)=>{
+        return validateEmail(value);
+    }
+    const validatePhone=(value)=>{
+        return validateCountryPhone(country,value);
+    }
+    const getPhoneError=()=>{
+       return "";
+    }
+    const renderFirstName=()=>{
+        return (
+            <Controller control={control}
+                        name="firstName"
+                        rules={{required: true}}
+                        render={({field: {ref, onChange, value}, fieldState: {error}}) => (
+                            <div className={styles.form_item}>
+                                <span className={styles.form_title}>{i18n.t("deposit.infomation.title_firstName")}</span>
+                                <div className={classNames("input-control", {'input-control--error': error})}>
+                                    <input
+                                        value={value}
+                                        ref={ref}
+                                        onChange={(e) => {
+                                            onChange(e.target.value);
+                                        }}
+                                        placeholder={i18n.t('deposit.infomation.ph_firstName')}
+                                    />
+                                </div>
+                            </div>
+                        )}
+            />
+        )
+    }
+    const renderLastName = () => {
+        return (
+            <Controller control={control}
+                        name="lastName"
+                        rules={{required: true}}
+                        render={({field: {ref, onChange, value}, fieldState: {error}}) => (
+                            <div className={styles.form_item}>
+                                <span className={styles.form_title}>{i18n.t("deposit.infomation.title_lastName")}</span>
+                                <div className={classNames("input-control", {'input-control--error': error})}>
+                                    <input
+                                        value={value}
+                                        ref={ref}
+                                        onChange={(e) => {
+                                            onChange(e.target.value);
+                                        }}
+                                        placeholder={i18n.t('deposit.infomation.ph_lastName')}
+                                    />
+                                </div>
+                            </div>
+                        )}
+            />
+        )
+    }
+    const renderEmail = () => {
+        return (
+            <Controller control={control}
+                        name="email"
+                        rules={{required: true, validate: validateMail}}
+                        render={({field: {ref, onChange, value}, fieldState: {error}}) => (
+                            <div className={styles.form_item}>
+                                <span className={styles.form_title}>{i18n.t("deposit.infomation.title_email")}</span>
+                                <div className={`input-control ${error ? 'input-control--error' : ''}`}>
+                                    <input
+                                        value={value}
+                                        onChange={e => onChange(e.target.value)}
+                                        placeholder={i18n.t('deposit.infomation.ph_email')}
+                                        ref={ref}
+                                    />
+                                </div>
+                            </div>
+                        )}
+            />
+        )
+    }
+    const renderCity = () => {
+        return (
+            <Controller control={control}
+                        name="city"
+                        rules={{required: true}}
+                        render={({field: {ref, onChange, value}, fieldState: {error}}) => (
+                            <div className={styles.form_item}>
+                                <span className={styles.form_title}>{i18n.t("deposit.infomation.title_city")}</span>
+                                <div className={classNames("input-control", {'input-control--error': error})}>
+                                    <input
+                                        value={value}
+                                        ref={ref}
+                                        onChange={(e) => {
+                                            onChange(e.target.value);
+                                        }}
+                                        placeholder={i18n.t('deposit.infomation.ph_city')}
+                                    />
+                                </div>
+                            </div>
+                        )}
+            />
+        )
+    }
+    const renderPhone=()=>{
+        return (
+            <Controller control={control}
+                        name="phone"
+                        rules={{required: true, validate: validatePhone}}
+                        render={({field: {ref, onChange, value}, fieldState: {error}}) => {
+                            let message = error ? getPhoneError() : "";
+                            return (
+                                <div className={styles.form_item}>
+                                    <span className={styles.form_title}>{i18n.t("deposit.infomation.title_phone")}</span>
+                                    <PhoneInput
+                                        className={classNames({'input-control--error': error})}
+                                        value={value}
+                                        message={message}
+                                        onChange={e => onChange(e.target.value)}
+                                        onChangeCountry={(country) => {
+                                            setCountry(country);
+                                        }}
+                                        placeholder={i18n.t('deposit.infomation.ph_phone')}
+                                        innerRef={ref}/>
+                                </div>
+                            )
+                        }}/>
+        )
+    }
+    return (
+        <Popup onClose={()=>{
+            hide();
+        }} open={isShow}>
+            <div className={styles.container}>
+                <span className={styles.title}>{i18n.t("deposit.infomation.modifyInfoTitle")}</span>
+                <form autoComplete="off" className={styles.l_form} onSubmit={handleSubmit((data) => {
+                    onSubmitInfo(data);
+                })}>
+                    {renderFirstName()}
+                    {renderLastName()}
+                    {renderPhone()}
+                    {renderEmail()}
+                    {renderCity()}
+                    <button className={`button-green ${styles.form_submit}`}>
+                        {reqKycStatus===REQ_STATUS.LOADING?(<SmallLoading fill={"#fff"}/>):i18n.t("deposit.infomation.btn_confirm")}
+                    </button>
+                </form>
+                <span className={styles.tips}>{i18n.t("deposit.infomation.info_tips")}</span>
+            </div>
+        </Popup>
+    )
+}
+export default WDepositInfo;

+ 39 - 0
src/widgets/WDeposit/WPayInfo/styles.module.scss

@@ -0,0 +1,39 @@
+.container {
+  display: flex;
+  flex-direction: column;
+  width: 100%;
+  gap: 0.8rem;
+  pointer-events: auto;
+
+  & .title {
+    display: flex;
+    flex-direction: row;
+    align-items: center;
+    justify-content: center;
+    color: var(--header);
+    font-weight: 600;
+    font-size: 1.05rem;
+  }
+  & .l_form {
+    display: flex;
+    flex-direction: column;
+    gap: 0.5rem;
+    width: 100%;
+    & .form_item{
+      display: flex;
+      flex-direction: column;
+      gap: 0.3rem;
+      & .form_title{
+        font-size: 1rem;
+        color: var(--header);
+      }
+    }
+    & .form_submit{
+      margin-top: 1rem;
+    }
+  }
+  & .tips{
+    color: var(--coin-yellow);
+    text-align: center;
+  }
+}

+ 13 - 1
src/widgets/WFirstPay/index.jsx

@@ -128,8 +128,20 @@ const WFirstPay=()=>{
         let reqOrder=()=>{
             data.user=user;
             data.callback=onGetPaymentCallback;
+            data.callbackError=callbackErr;
             dispatch(reqPaymentOrder(data));
         }
+        let callbackErr=(payload)=>{
+            if (payload&&payload.code===301){
+                if (areaItem.code===APP_COUNTRY_CODE.EU){
+                    if (global.wdepositInfo!=null){
+                        global.wdepositInfo.show(()=>{
+                            reqOrder();
+                        });
+                    }
+                }
+            }
+        }
         if (areaItem.code===APP_COUNTRY_CODE.RU){
             if (global.ruPaytypeSelect!=null){
                 global.ruPaytypeSelect.show((eventType)=>{
@@ -396,4 +408,4 @@ const WFirstPay=()=>{
         </>
     )
 }
-export default WFirstPay;
+export default WFirstPay;

+ 22 - 2
src/widgets/WPaymentOrder/WOrderHeader/WOrderHeader.jsx

@@ -1,7 +1,10 @@
 import styles from "./styles.module.scss";
 import SvgIcon from "@components/SvgIcon";
 import MXHeaderRight from "@widgets/WPaymentOrder/WOrderHeader/MXHeaderRight";
+import {ROUTE_PATH} from "@constants/routes";
+import {useEffect} from "react";
 const i18n=global.i18n;
+const objInfo={};
 const WOrderHeader = ({...props})=>{
     const route=props.route;
     const close=props.close;
@@ -14,6 +17,23 @@ const WOrderHeader = ({...props})=>{
         }
         return (<></>);
     }
+    const checkClose=()=>{
+        close();
+        if (objInfo.backTimer)clearTimeout(objInfo.backTimer);
+        objInfo.backTimer=setTimeout(()=>{
+            if (window.location.hash.indexOf(ROUTE_PATH.PAY_ORDER) !== -1){
+                checkClose();
+            }
+        },10)
+    }
+    useEffect(() => {
+        return () => {
+            if (objInfo.backTimer){
+                clearTimeout(objInfo.backTimer);
+                objInfo.backTimer = null;
+            }
+        };
+    }, []);
     const renderHeader=()=>{
         let title=route?route.title:"";
         return (
@@ -24,7 +44,7 @@ const WOrderHeader = ({...props})=>{
                 <div className={styles.top}>
                     <div className={styles.left}>
                         <button className={styles.close} onClick={() => {
-                            close();
+                            checkClose();
                         }}>
                             <SvgIcon className={styles.arrow} herf={"icon_Arrow"}/>
                         </button>
@@ -40,4 +60,4 @@ const WOrderHeader = ({...props})=>{
         </div>
     )
 }
-export default WOrderHeader;
+export default WOrderHeader;

+ 41 - 3
src/widgets/WPaymentOrder/index.jsx

@@ -3,19 +3,57 @@ import BRPayOrder from "@widgets/WPaymentOrder/BR/BRPayOrder";
 import MXPayOrder from "@widgets/WPaymentOrder/MX/MXPayOrder";
 import RUPayOrder from "@widgets/WPaymentOrder/RU/RUPayOrder";
 import MXOrderQR from "@widgets/WPaymentOrder/MX/QR/MXOrderQR";
-import {useLocation} from "react-router-dom";
+import {useLocation, useNavigate} from "react-router-dom";
 import {ROUTE_PATH} from "@constants/routes";
-import React from "react";
+import React, {useEffect, useRef} from "react";
 import {useSelector} from "react-redux";
 import {getCurrPayOrder} from "@features/paySlice";
+import {useThemeProvider} from "@contexts/themeContext";
+const objInfo={};
 const WPaymentOrder=({close})=>{
-    const {hash} = useLocation();
+    const {hash,pathname} = useLocation();
     const orderInfo=useSelector(getCurrPayOrder);
+    const navigate=useNavigate();
     const components={
         "br":BRPayOrder,
         "mx":MXPayOrder,
         "ru":RUPayOrder
     }
+    const onBackToHome=()=>{
+        close();
+        if (objInfo.backTimer)clearTimeout(objInfo.backTimer);
+        objInfo.backTimer=setTimeout(()=>{
+            if (window.location.hash.indexOf(ROUTE_PATH.PAY_ORDER) !== -1){
+                onBackToHome();
+            }
+        },10)
+    }
+    const receiveMessage=(event)=>{
+        let data=event.data;
+        // console.log(data);
+        if (data&&data.cmd!=null){
+            // toast.success(JSON.stringify(data))
+            if (data.cmd==="back"){
+                onBackToHome();
+            }
+        }
+    }
+    const initEvent=()=>{
+        window.addEventListener("message", receiveMessage, false);
+    }
+    const removeEvent=()=>{
+        window.removeEventListener("message", receiveMessage);
+        if (objInfo.backTimer){
+            clearTimeout(objInfo.backTimer);
+            objInfo.backTimer = null;
+        }
+    }
+    useEffect(() => {
+        initEvent();
+        return () => {
+            removeEvent();
+        };
+    }, []);
     const renderOrderRedirect=()=>{
         return (
             <iframe