zhejiushizhuce 1 год назад
Родитель
Сommit
d5b4ad6637
5 измененных файлов с 124 добавлено и 1 удалено
  1. 1 0
      package.json
  2. 9 0
      src/features/api.js
  3. 1 1
      src/layout/Routes/index.jsx
  4. 53 0
      src/utils/TGHelper.js
  5. 60 0
      src/utils/TonHelper.js

+ 1 - 0
package.json

@@ -35,6 +35,7 @@
     "colyseus.js": "^0.15.19",
     "country-state-city": "^3.1.2",
     "craco": "^0.0.3",
+    "crypto-js": "^4.2.0",
     "dayjs": "^1.11.7",
     "fontfaceobserver": "^2.3.0",
     "gsap": "^3.12.5",

+ 9 - 0
src/features/api.js

@@ -63,6 +63,7 @@ import {preDelMail} from "@features/mailSlice";
 import {getInAppBrowser} from "@utils/UAUtils";
 import {APP_LOGIN_TYPE} from "@constants/app";
 import {updateBonusPack} from "@features/paySlice";
+import TGHelper from "@utils/TGHelper";
 const i18n=global.i18n;
 export const buildReqReducer=(builder,thunk,callback,statusCB=null)=>{
     if (builder==null||thunk==null)return;
@@ -102,6 +103,14 @@ export const reqGetRoutes = createAsyncThunk(
         if (ia!=null&&ia!==""){
             params.params.ia=ia;
         }
+        //telgram
+        await TGHelper.init();
+        //hashadd={type:"tele",data:"...."}
+        //telgram 平台
+        let tgData=TGHelper.getInitData();
+        if (tgData&&tgData!==""){
+            params.params.hashadd={type:"tele",data:tgData};
+        }
         const response = await Http.get(params)
         if (response&&response.user!=null){
             thunkAPI.dispatch(updateBonusPack(response.user));

+ 1 - 1
src/layout/Routes/index.jsx

@@ -79,7 +79,7 @@ const CHashRouter=(props)=>{
     }
     const handleClose = () => {
         let state=window.history.state;
-        if (state!=null&&state.idx<=0){
+        if (state!=null&&state.idx<=1){
             navigate("",{replace:true});
         }
         else navigate(ROUTE_PATH.BACK);

+ 53 - 0
src/utils/TGHelper.js

@@ -0,0 +1,53 @@
+const tgInfo={
+    isInit:false,
+}
+const checkLoadTelegramJs=async ()=>{
+    if (tgInfo.isInit)return true;
+    let isInTG=window.location.hash.indexOf("tgWebAppData") !== -1;
+    if (!isInTG)return false;
+    return new Promise( (t, n) => {
+        var q = document.createElement("script");
+        q.type = "text/javascript";
+        q.src = "https://telegram.org/js/telegram-web-app.js?56";
+        document.body.appendChild(q);
+        const r = setTimeout( () => {
+                q.onerror = null;
+                q.onload = null;
+                t(false);
+            }, 10000);
+        q.onload = () => {
+                clearTimeout(r);
+                console.log("finish telegram js");
+                tgInfo.isInit=true;
+                t(true);
+        };
+        q.onerror = () => {
+            clearTimeout(r);
+            q.onerror = null;
+            q.onload = null;
+            n(false)
+        }
+    });
+}
+const init=async ()=>{
+    return await checkLoadTelegramJs();
+}
+const getTGWebApp=()=>{
+    let Telegram=window.Telegram;
+    if (Telegram){
+        return Telegram.WebApp;
+    }
+    return null;
+}
+const getInitData=()=>{
+    //window.Telegram.WebApp.initData
+    let webApp=getTGWebApp();
+    if (webApp)return webApp.initData;
+    return "";
+}
+const TGHelper={
+    init,
+    getTGWebApp,
+    getInitData
+}
+export default TGHelper;

+ 60 - 0
src/utils/TonHelper.js

@@ -0,0 +1,60 @@
+import axios from "axios";
+import HMAC_SHA256 from "crypto-js/hmac-sha256";
+const BASE_URL="https://devmini.tongifts.app/"
+const config={
+    _id:"",
+    apiKey:""
+}
+const service = axios.create({
+    baseURL: BASE_URL,
+    withCredentials: true,
+    timeout: 10000, // Request timeout
+});
+const init=(_id,apiKey)=>{
+    if (_id!=null)config._id=_id;
+    if (apiKey!=null)config.apiKey=apiKey;
+}
+const signHash=(params)=>{
+    let keys = Object.keys(params)
+    let signData = []
+    keys.forEach(key => {
+        if (key === 'k' || key === 's') return
+        if (typeof params[key] === 'object')
+            signData.push(`${key}=${JSON.stringify(params[key])}`)
+        else
+            signData.push(`${key}=${params[key]}`)
+    })
+    let rawStr = signData.sort().join('&')
+
+    let selfHash = HMAC_SHA256(rawStr, config.apiKey)
+    return selfHash.toString();
+}
+const tonHttpReq=(url,params={})=>{
+    if (config._id===""||config.apiKey==="")return null;
+    if (params==null)params={};
+    let timestamp=Math.floor(Date.now()/1000);
+    params={...params,k:config._id,t:timestamp};
+    let data={
+        ...params,
+        s:signHash(params)
+    }
+    return service({
+        method: 'post',
+        url,
+        data
+    });
+}
+const updateTask=(userId,taskId,status="completed")=>{
+    let params={
+        userIds:[userId],
+        taskId:taskId,
+        status:status,
+    }
+    return tonHttpReq("api/open/updateTask",params);
+}
+
+const TonHelper={
+    init,
+    updateTask
+}
+export default TonHelper;