//get all required params from route const token = getQueryVariable("token"); const customerId = getQueryVariable("customerId"); const upiId = getQueryVariable("upiId"); const txnId = getQueryVariable("txnId"); const txnAmt = getQueryVariable("txnAmt"); const zoloUpi = getQueryVariable("zoloUpi"); const androidToken = getQueryVariable("androidToken"); const env = getQueryVariable("env"); //set transaction amount to UI document.getElementById("txn-amt").innerHTML = txnAmt || 0; //set zolo upi payment address document.getElementById("zolo-upi").innerHTML = zoloUpi.split("%40").join("@"); //polling Timers const pollTimeout = getQueryVariable("timeout"); const pollInterval = getQueryVariable("interval"); //check for android token const apiToken = androidToken ? androidToken : token; //assign route for platform const apiTokenParam = androidToken ? "androidToken=" : "token="; //set environment const environment = env === "staging" ? "https://stagez-api.zolostays.com" : "https://api.zolostays.com"; //Define Polling API specs const url = environment + "/api/v1/zpay/upi/collect/acknowledge?" + apiTokenParam + apiToken; const data = { customerId: customerId, paymentOrderId: upiId, orderId: txnId }; const platformToken = androidToken ? { androidToken: apiToken } : { token: apiToken }; //set parameters for api call const options = { method: "POST", body: JSON.stringify(data), headers: { "Content-Type": "application/json; charset=UTF-8", ...platformToken } }; let finalResult; // The polling function function poll(timeout, interval) { var endTime = Number(new Date()) + Number(timeout); interval = interval; var checkCondition = async function(resolve, reject) { // If the condition is met, we're done! var result = await fetch(url, options) .then(data => { return data.json(); }) .then(res => { return res; }) .catch(error => console.log("error", error)); console.log("result --->", result); if (result.error === 0 && result.result[0].paymentStatus !== "initiated") { finalResult = result; resolve(result); } // If the condition isn't met but the timeout hasn't elapsed, go again else if (Number(new Date()) < endTime) { setTimeout(checkCondition, interval, resolve, reject); } // Didn't match and too much time, reject! else { reject(new Error("timed out")); } }; return new Promise(checkCondition); } // Usage: ensure element is visible poll(pollTimeout, pollInterval) .then(function() { // Polling done, now do something else! document .getElementsByClassName("zpay-progress-container")[0] .setAttribute("class", "hide"); document.getElementsByClassName("loader")[0].removeAttribute("class"); document.getElementById("z-loader").setAttribute("class", "loader"); const message = finalResult.result[0].paymentStatus.toLowerCase() !== "success" ? "Any amount deducted from your account will be refunded within 5 days." : ""; setTimeout(function() { window.location.assign( window.location.href.split("?")[0] + "result/?status=" + finalResult.result[0].paymentStatus + "&message=" + message ); }, 10000); }) .catch(function() { // Polling timed out, handle the error! document .getElementsByClassName("zpay-progress-container")[0] .setAttribute("class", "hide"); document.getElementsByClassName("loader")[0].removeAttribute("class"); document.getElementById("z-loader").setAttribute("class", "loader"); setTimeout(function() { window.location.assign( window.location.href.split("?")[0] + "result/?status=timeout" + "&message=Connection Timed Out" ); }, 10000); }); //Gets the value of a query parameter function getQueryVariable(variable) { var query = window.location.search.substring(1); var vars = query.split("&"); for (var i = 0; i < vars.length; i++) { var pair = vars[i].split("="); if (pair[0] == variable) { return pair[1]; } } return false; }