diff --git a/package-lock.json b/package-lock.json index f669fa4..493398b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "1.0.0", "dependencies": { "axios": "^1.6.8", + "date-fns": "^3.0.2-rc.1", "jwt-decode": "^4.0.0", "qrcode": "^1.5.3", "serialize-error": "^11.0.3", @@ -710,6 +711,16 @@ "node": ">=4" } }, + "node_modules/date-fns": { + "version": "3.0.2-rc.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.0.2-rc.1.tgz", + "integrity": "sha512-rtLgW/u9feeKuSjYjDZVDoe47sdA7QnGRbyEtFtmNB8SXVQnL3g3SIKlcQkHwk5X7uhmF9vP7/B1ZGXtGsF+IA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, "node_modules/decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", diff --git a/package.json b/package.json index de16347..9d832cb 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ }, "dependencies": { "axios": "^1.6.8", + "date-fns": "^3.0.2-rc.1", "jwt-decode": "^4.0.0", "qrcode": "^1.5.3", "serialize-error": "^11.0.3", diff --git a/src/Pages/DepositPage.svelte b/src/Pages/DepositPage.svelte index 9d405ad..5846af9 100644 --- a/src/Pages/DepositPage.svelte +++ b/src/Pages/DepositPage.svelte @@ -5,11 +5,18 @@ import axios from "axios"; import { sayError, sayInfo } from "../lib/toaster"; import LoadingSpinner from "../lib/loadingSpinner.svelte"; + import { addMinutes, formatDistanceToNow, parseISO } from "date-fns"; + import { ca, ru } from "date-fns/locale"; const apiBase = "https://24paymentgateway.ru/api/v1/"; - const delay = (ms) => new Promise((res) => setTimeout(res, ms)); + let showAccept = false; + let showReject = false; + let showNormal = false; + let showTimeout = false; + const delay = (ms) => new Promise((res) => setTimeout(res, ms)); + //http://localhost:8080/?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXUyJ9.eyJleHAiOjE3MjQzNjEzOTgsImlhdCI6MTcyMTk0MjE5OCwiaW5fY3VycmVuY3lfY29kZSI6IktHUyIsImlzcyI6Ikhvc3RhcGF5Iiwib3JkZXJfaWQiOiIxZjhjOTI2NC1lZWQ3LTRhYzMtYTEyZC0xYzEzMjg4MWM4NzQiLCJvdXRfY3VycmVuY3lfY29kZSI6IktHUyJ9.w_ki56Hb81kX2SoS9qm0Je3atBhmUWTQaYYrLX-udCM /** * hpp: 1) GET: /api/v1/getPaymentMethods @@ -29,6 +36,36 @@ // await delay(5000); const urlParams = new URLSearchParams(queryString); tokenURL = urlParams.get("token"); + console.log(tokenURL); + validateJWT(tokenURL); + // console.log(); + if (invalidURL == true) { + sayError("Неверный ID заявки"); + } else { + await getOrderStatus(); + + switch (orderStatus) { + case 1: + getPaymentMethods(); + break; + case 2: + showReject = true; + break; + case 3: + showAccept = true; + break; + case 4: + getPaymentMethods(); + case 5: + getPaymentMethods(); + case 6: + showTimeout = true; + default: + break; + } + + // getPaymentMethods(); + } // console.log(urlParams.get("token")); } getTokenFromURL(); @@ -41,17 +78,23 @@ invalidURL = false; } catch (error) { invalidURL = true; - // console.log(error); + console.log(error); } } - $: tokenURL, validateJWT(tokenURL); - $: invalidURL, - (() => { - if (!invalidURL) { - getPaymentMethods(); - } - })(); + let timeLeft = ""; + let timeLeftInterval = -1; + function calculateDate(src) { + const originalDate = parseISO(src); + const newDate = addMinutes(originalDate, 10); + timeLeftInterval = setInterval(() => { + timeLeft = formatDistanceToNow(newDate, { + addSuffix: true, + includeSeconds: true, + locale: ru, + }); + }, 1000); + } let selectedBank = ""; let depositTimeLeft = 60; //seconds @@ -102,7 +145,7 @@ // }, 1000); // } - // function stopTimer() { + // function stopTimer() {loaded-file // clearInterval(timerInterval); // depositTimeLeft = 60; // } @@ -173,50 +216,71 @@ requestingReqs = true; disableGetReqBtn = true; await delay(2000); - let result = await axios.post( - apiBase + "getRequisites", - { - bank_id: selectedBank, - }, - { - headers: { - Authorization: "Bearer " + tokenURL, - "Content-Type": "application/json", + try { + let result = await axios.post( + apiBase + "getRequisites", + { + bank_id: selectedBank, }, - }, - ); - requestingReqs = false; - requisites = result.data; - console.log(result); - showReqs = true; + { + headers: { + Authorization: "Bearer " + tokenURL, + "Content-Type": "application/json", + }, + }, + ); + requestingReqs = false; + requisites = result.data; + console.log(result); + showReqs = true; + calculateDate(result.data["requisite_creation_time"]); + } catch (error) { + sayError("Срок заявки истёк"); + showTimeout = true; + orderStatus = 6; + } } // getRequisites(); let orderStatus; async function getOrderStatus() { - let result = await axios.get(apiBase + "getOrderStatus", { + try { + let result = await axios.get(apiBase + "getOrderStatus", { headers: { - Authorization: "Bearer " + "jwt", + Authorization: "Bearer " + tokenURL, "Content-Type": "application/json", }, }); + orderStatus = result.data.status; console.log(result); + if(orderStatus === 4) + { + selectedBank = result.data["bank_id"]; + } + else if (orderStatus === 5) + { + selectedBank = result.data["bank_id"]; + requisites = result.data["requisites"]; + calculateDate(requisites["requisite_creation_time"]); + showReqs = true; + } + } catch (error) { + orderStatus=6; + } + } - // getOrderStatus(); async function loadReceipt() { - let result = await axios.post( - apiBase + "loadDisputeReceipt", - { - //data form + const formData = new FormData(); + let file = document.getElementById("loaded-file").files[0]; + // formData.append("uuid", orderID); + formData.append("data", file); + let result = await axios.post(apiBase + "openDispute", formData, { + headers: { + Authorization: "Bearer " + tokenURL, + "Content-Type": "multipart/form-data", }, - { - headers: { - Authorization: "Bearer " + "jwt", - "Content-Type": "application/json", - }, - }, - ); + }); console.log(result); } @@ -260,7 +324,7 @@ }, { headers: { - Authorization: "Bearer " + "jwt", + Authorization: "Bearer " + tokenURL, "Content-Type": "application/json", }, }, @@ -268,18 +332,39 @@ console.log(result); } - - - - async function copyToClipboard() { - try { - await navigator.clipboard.writeText(requisites.requisite[1]); - sayInfo('Скопировано!'); - } catch (err) { - console.error('Failed to copy: ', err); - } + try { + await navigator.clipboard.writeText(requisites.requisite[1]); + sayInfo("Скопировано!"); + } catch (err) { + console.error("Failed to copy: ", err); } + } + + function startPingingStatus() {ping();} + + async function ping() { + await getOrderStatus(); + if (orderStatus === 2) { + showReject = true; + showLoadingScreen = false; + return; + } + if(orderStatus === 3) + { + showAccept = true; + showLoadingScreen = false; + return; + } + if(orderStatus===6) + { + showTimeout = true; + showLoadingScreen = false; + return; + } + await delay(1000); + ping(); + } {#if invalidURL} @@ -319,7 +404,147 @@ >
Заявка {orderID}
-Выбор банка
+ {#each paymentMethods as pm} +Номер карты для перевода
++ {requisites.requisite[1]} +
+ +Получатель: {requisites.requisite[0]}
++ Время на оплату: {timeLeft} +
++ Загрузите чек, чтобы мы могли подтвердить перевод +
+ +Загружен файл: {loadedFile}
+ + {/if} + { + loadedFile = e.target.files[0].name; + }} + id="loaded-file" + type="file" + hidden + accept=".png, .jpg, .jpeg, .pdf" + /> + {/if} + {/if} +Выбор банка
- {#each paymentMethods as pm} -+ @hosta_pay +
+support@24paymentgateway.ru
+Номер карты для перевода
-{requisites.requisite[1]}
- -Получатель: {requisites.requisite[0]}
-- Время на оплату -
-- Загрузите чек, чтобы мы могли подтвердить перевод -
- -Загружен файл: {loadedFile}
- - {/if} - { - loadedFile = e.target.files[0].name; - }} - id="loaded-file" - type="file" - hidden - accept=".png, .jpg, .jpeg, .pdf" - /> - {/if} - {/if}Отмена заявки
@@ -514,7 +617,9 @@ // stopTimer(); // stopTotalTimer(); // showAlertQuit = false; - window.open("https://www.google.com", "__blank"); + // window.open("https://www.google.com", "__blank"); + cancelOrder(); + window.location.reload(); }} class="text-xl p-4 bg-slate-950 ring-2 ring-slate-800 rounded-3xl hover:ring-red-800" >Да, отменить
Ваш платёж обрабатывается
Это не займет много времени
+Номер платежа: {orderID}
++ Телеграм: @hosta_pay +
++ Почта: support@24paymentgateway.ru +
Заявка исполнена
+Номер платежа: {orderID}
++ Телеграм: @hosta_pay +
++ Почта: support@24paymentgateway.ru +
+Время заявки истекло
+Номер платежа: {orderID}
++ Телеграм: @hosta_pay +
++ Почта: support@24paymentgateway.ru +
+