🟢 Google Sheets Cloud Auto-Sync ActiveAll devices (PC, Laptop & Mobile) are live synchronized.
🔔
Live Customer Activation Requests (0)
कस्टमर ने ऐप से WhatsApp/UPI रिक्वेस्ट भेजी है — 1-क्लिक में Key बनाकर WhatsApp पर भेजें (बिना टाइप किए!)
⚡ Generate New License Key
🔥 3-Day PassUnlimited Access (₹39)
👑 Lifetime ProOffer ₹999 (MRP ₹2,499)
🔑 Generated License Key
CCPRO-XXXX-XXXX-XXXX
🔍 Quick Key Decoder & Verifier
💡 Admin Key Structure:
👑 Lifetime Pro:CCPRO-LT-[HWID4]-[SIG8]
⚡ 3-Day Pass:CCPRO-D3-[HWID4]-[EXP_HEX]-[SIG8]
👥 User License Registry (0 Records)
🔍
#
Customer / Shop
Mobile
Machine HWID
Plan
Generated License Key
Status / Expiry
Payment
Actions
☁️ Google Sheets Cloud Sync Setup
Aap apne kisi bhi Google Sheet se is portal ko connect kar sakte hain. Jab bhi aap kisi device (Mobile ya PC) se key banayenge, wo turant aapki Google Sheet me save aur sync ho jayegi.
Yahan aapki actual Google Sheet ka link save hoga. "Test Connection" karne par yeh automatically detect ho jayega.
Yeh password aapki Google Sheet ko 100% private aur safe rakhega. Bina is password ke koi bhi sheet ko access nahi kar sakega.
📱 Mobile Se Key Banate Hain?Mobile ko Google Sheet se connect karne ke liye QR Code scan karein ya WhatsApp link bhejein:
🛡️ Google Sheet Disaster Recovery & RebuilderAgar Google Sheet delete ho jaye, toh naye blank sheet me dashboard ka pura data 1-click me wapas bhej sakte hain:
💡 Instant Cloud Sync & Fix Guide:
Jab bhi aap Mobile ya PC se Generate dabayenge, naya code turant background me data ko Google Sheet me write kar dega. Naya Code Update Karein: Niche diya gaya code Google Apps Script me paste karke dobara Deploy ➔ Manage Deployments ➔ New version select karke deploy karein!
📖 2-Minute Easy Setup / Update Guide:
Naya Google Sheet kholein (ya apni purani connected sheet).
Top menu me Extensions ➔ Apps Script par click karein.
// 🔒 Smart AI Card - 100% Reliable Cloud Sync & Mobile Portal
var ADMIN_SECRET = "SmartAI_Secret_2026"; // Change to your own secret password if desired
function isAuthorized(providedSecret) {
if (!ADMIN_SECRET || ADMIN_SECRET === "SmartAI_Secret_2026") return true;
if (!providedSecret) return false;
return String(providedSecret).trim().toLowerCase() === String(ADMIN_SECRET).trim().toLowerCase();
}
function doGet(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheetUrl = ss ? ss.getUrl() : "";
var param = (e && e.parameter) ? e.parameter : {};
var providedSecret = param.secret ? String(param.secret).trim() : "";
var action = param.action ? String(param.action).trim() : "";
// 1. Agar user ne Google Sheet open karne ko kaha ho:
if (action === "open_sheet") {
var html = '<!DOCTYPE html><html><head><meta charset="UTF-8">' +
'<meta http-equiv="refresh" content="0;url=' + sheetUrl + '">' +
'<title>Opening Google Sheet...</title>' +
'<style>' +
' body { background:#0f172a; color:#fff; font-family:system-ui,-apple-system,sans-serif; display:flex; align-items:center; justify-content:center; height:100vh; margin:0; text-align:center; padding:20px; box-sizing:border-box; }' +
' .box { background:#1e293b; padding:32px; border-radius:14px; border:1px solid #334155; max-width:440px; box-shadow:0 10px 30px rgba(0,0,0,0.5); }' +
' .btn { display:inline-block; margin-top:18px; padding:12px 24px; background:#10b981; color:#fff; text-decoration:none; border-radius:8px; font-weight:700; }' +
'</style>' +
'</head><body><div class="box">' +
' <div style="font-size:32px;margin-bottom:10px;">📊</div>' +
' <h2 style="margin:0 0 8px 0;">Opening Google Sheet...</h2>' +
' <p style="color:#94a3b8;font-size:13.5px;margin:0 0 16px 0;">Aapki Google Sheet open ho rahi hai. Click karein agar automatically open na ho:</p>' +
' <a class="btn" href="' + sheetUrl + '" target="_top">Open Google Sheet Now ➔</a>' +
'</div><script>try{window.top.location.href="' + sheetUrl + '";}catch(e){window.location.href="' + sheetUrl + '";}<\/script></body></html>';
return HtmlService.createHtmlOutput(html)
.setTitle("Opening Google Sheet...")
.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
}
var sheet = ss.getActiveSheet();
// 2. Test Connection from Admin Portal
if (action === "test") {
if (!isAuthorized(providedSecret)) {
return ContentService.createTextOutput(JSON.stringify({ error: "Access Denied: Secret Password mismatch. Apps Script has '" + ADMIN_SECRET + "', received '" + providedSecret + "'" })).setMimeType(ContentService.MimeType.JSON);
}
return ContentService.createTextOutput(JSON.stringify({ success: true, sheetUrl: sheetUrl, count: Math.max(0, sheet.getLastRow() - 1) })).setMimeType(ContentService.MimeType.JSON);
}
// 3. INSTANT ADD KEY from Mobile or PC (via GET - 100% Reliable, Zero CORS issues)
if (action === "add_key") {
if (!isAuthorized(providedSecret)) {
return ContentService.createTextOutput(JSON.stringify({ error: "Access Denied: Secret Password mismatch. Apps Script has '" + ADMIN_SECRET + "', received '" + providedSecret + "'" })).setMimeType(ContentService.MimeType.JSON);
}
return ContentService.createTextOutput(JSON.stringify(saveKeyRecord(sheet, param))).setMimeType(ContentService.MimeType.JSON);
}
// 4. Return Users Data for portal sync
if (action === "sync" || param.format === "json") {
if (!isAuthorized(providedSecret)) {
return ContentService.createTextOutput(JSON.stringify({ error: "Access Denied: Secret Password mismatch. Apps Script has '" + ADMIN_SECRET + "', received '" + providedSecret + "'" })).setMimeType(ContentService.MimeType.JSON);
}
var data = sheet.getDataRange().getValues();
if (data.length <= 1) return ContentService.createTextOutput(JSON.stringify([])).setMimeType(ContentService.MimeType.JSON);
var users = [];
for (var i = 1; i < data.length; i++) {
var row = data[i];
var cTime = (!isNaN(Number(row[1])) && Number(row[1]) > 0) ? Number(row[1]) : (new Date(row[1]).getTime() || Date.now());
var eTime = (row[8] === "Lifetime" || !row[8]) ? null : (!isNaN(Number(row[8])) ? Number(row[8]) : (new Date(row[8]).getTime() || null));
users.push({
id: row[0],
createdAt: cTime,
customerName: row[2],
customerPhone: row[3],
customerCity: row[4],
hwid: row[5],
plan: row[6],
licenseKey: row[7],
expiresAt: eTime,
paymentStatus: row[9],
notes: row[10]
});
}
return ContentService.createTextOutput(JSON.stringify({ success: true, sheetUrl: sheetUrl, users: users })).setMimeType(ContentService.MimeType.JSON);
}
// 5. Restore License by Mobile Number (Format / Reinstall 1-Click Restore)
if (action === "restore_by_phone") {
var phone = String(param.phone || "").replace(/[^0-9]/g, "").slice(-10);
if (phone.length < 10) {
return ContentService.createTextOutput(JSON.stringify({ success: false, error: "Invalid mobile number" })).setMimeType(ContentService.MimeType.JSON);
}
var data = sheet.getDataRange().getValues();
var matched = null;
for (var i = data.length - 1; i >= 1; i--) {
var row = data[i];
var rPhone = String(row[3] || "").replace(/[^0-9]/g, "").slice(-10);
var rPay = String(row[9] || "Paid").trim();
if (rPhone === phone && (rPay === "Paid" || rPay === "Active" || rPay === "Free Trial")) {
var eTime = (row[8] === "Lifetime" || !row[8]) ? null : (!isNaN(Number(row[8])) ? Number(row[8]) : (new Date(row[8]).getTime() || null));
matched = {
customerName: row[2] || "",
customerPhone: row[3] || "",
customerCity: row[4] || "",
hwid: row[5] || "",
plan: row[6] || "LT",
licenseKey: row[7] || "",
expiresAt: eTime,
paymentStatus: rPay
};
break;
}
}
if (matched) {
return ContentService.createTextOutput(JSON.stringify({ success: true, user: matched })).setMimeType(ContentService.MimeType.JSON);
} else {
return ContentService.createTextOutput(JSON.stringify({ success: false, error: "Is mobile number par koi active license nahi mila." })).setMimeType(ContentService.MimeType.JSON);
}
}
// 6. Default: Direct Mobile QR Scan ya Browser me open karne par Mobile Key Generator Portal:
return HtmlService.createHtmlOutput(getMobilePortalHtml(sheetUrl, ADMIN_SECRET))
.setTitle("Smart AI Card - Mobile Admin Portal")
.addMetaTag("viewport", "width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no")
.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
}
function saveKeyRecord(sheet, param) {
if (sheet.getLastRow() === 0) {
sheet.appendRow(["ID", "Created At", "Customer Name", "Phone", "City", "HWID", "Plan", "License Key", "Expires At", "Payment", "Notes"]);
}
var expVal = (!param.expiresAt || param.expiresAt === "null" || param.expiresAt === "Lifetime") ? "Lifetime" : param.expiresAt;
var createdEpoch = param.createdAt && !isNaN(Number(param.createdAt)) ? Number(param.createdAt) : new Date().getTime();
var pId = param.id || ('usr_' + createdEpoch);
var pHwid = (param.hwid || '').replace(/[^A-Za-z0-9]/g, '').toUpperCase();
// Check if existing record exists by ID or by HWID (to update pending requests without duplicates)
var data = sheet.getDataRange().getValues();
var foundRow = -1;
for (var i = 1; i < data.length; i++) {
var rId = String(data[i][0] || '');
var rHwid = String(data[i][5] || '').replace(/[^A-Za-z0-9]/g, '').toUpperCase();
if (rId === pId || (pHwid && rHwid === pHwid && (data[i][7] === 'PENDING_APPROVAL' || data[i][9] === 'Pending'))) {
foundRow = i + 1;
break;
}
}
var rowData = [
pId,
createdEpoch,
param.customerName || "",
param.customerPhone || "",
param.customerCity || "",
param.hwid || "",
param.plan || "",
param.licenseKey || "",
expVal,
param.paymentStatus || "Paid",
param.notes || ""
];
if (foundRow > 0) {
sheet.getRange(foundRow, 1, 1, rowData.length).setValues([rowData]);
return { success: true, message: "Record updated in Google Sheet" };
} else {
sheet.appendRow(rowData);
return { success: true, message: "Key saved instantly to Google Sheet" };
}
}
function saveKeyFromMobile(data) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
return saveKeyRecord(sheet, data);
}
function doPost(e) {
try {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var body = {};
if (e.postData && e.postData.contents) {
try {
body = JSON.parse(e.postData.contents);
} catch (pErr) {
body = e.parameter || {};
}
} else if (e.parameter) {
body = e.parameter;
}
if (!isAuthorized(body.secret)) {
return ContentService.createTextOutput(JSON.stringify({ success: false, error: "Access Denied: Invalid Admin Secret" })).setMimeType(ContentService.MimeType.JSON);
}
if (body.action === "sync_all") {
sheet.clearContents();
sheet.appendRow(["ID", "Created At", "Customer Name", "Phone", "City", "HWID", "Plan", "License Key", "Expires At", "Payment", "Notes"]);
body.users.forEach(function(u) {
var uExp = (!u.expiresAt || u.expiresAt === "null" || u.expiresAt === "Lifetime") ? "Lifetime" : u.expiresAt;
sheet.appendRow([u.id, u.createdAt, u.customerName, u.customerPhone, u.customerCity, u.hwid, u.plan, u.licenseKey, uExp, u.paymentStatus, u.notes]);
});
return ContentService.createTextOutput(JSON.stringify({ success: true, count: body.users.length })).setMimeType(ContentService.MimeType.JSON);
}
return ContentService.createTextOutput(JSON.stringify(saveKeyRecord(sheet, body))).setMimeType(ContentService.MimeType.JSON);
} catch (err) {
return ContentService.createTextOutput(JSON.stringify({ success: false, error: err.message })).setMimeType(ContentService.MimeType.JSON);
}
}
function getMobilePortalHtml(sheetUrl, adminSecret) {
var SALT = "CCPRO_SECURE_SALT_2026_CSC_MPO_INDIA_V1";
return '<!DOCTYPE html><html><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">' +
'<title>Smart AI Card - Mobile Admin</title>' +
'<style>' +
' * { box-sizing: border-box; -webkit-tap-highlight-color: transparent; }' +
' body { background: #0b0f19; color: #f3f4f6; font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; margin: 0; padding: 14px; }' +
' .card { background: #111827; border: 1px solid #1f2937; border-radius: 16px; padding: 18px; margin-bottom: 14px; box-shadow: 0 10px 25px rgba(0,0,0,0.5); }' +
' h1 { font-size: 17px; font-weight: 800; margin: 0 0 6px 0; color: #fff; display: flex; align-items: center; justify-content: space-between; }' +
' .badge { background: #064e3b; color: #34d399; font-size: 10px; font-weight: 800; padding: 3px 8px; border-radius: 99px; }' +
' label { font-size: 11px; font-weight: 700; color: #9ca3af; text-transform: uppercase; margin-bottom: 4px; display: block; }' +
' input, select { width: 100%; background: #030712; border: 1px solid #374151; border-radius: 8px; padding: 10px; color: #fff; font-size: 14px; margin-bottom: 10px; outline: none; }' +
' input:focus { border-color: #10b981; }' +
' .hwid { font-family: monospace; letter-spacing: 1px; color: #38bdf8; text-transform: uppercase; }' +
' .plans { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin-bottom: 12px; }' +
' .p-btn { background: #030712; border: 1px solid #1f2937; border-radius: 8px; padding: 8px 10px; text-align: left; cursor: pointer; color: #fff; }' +
' .p-btn.active { border-color: #10b981; background: rgba(16,185,129,0.15); }' +
' .p-btn .t { font-size: 12px; font-weight: 800; display: block; }' +
' .p-btn .d { font-size: 10px; color: #9ca3af; }' +
' .btn-gen { width: 100%; background: linear-gradient(135deg, #10b981, #059669); color: #030712; border: none; border-radius: 10px; padding: 14px; font-size: 14px; font-weight: 800; cursor: pointer; text-transform: uppercase; }' +
' .btn-sheet { width: 100%; background: #1f2937; border: 1px solid #374151; color: #38bdf8; border-radius: 8px; padding: 10px; font-size: 12px; font-weight: 700; text-align: center; text-decoration: none; display: block; margin-top: 10px; }' +
' .res { background: #030712; border: 1px dashed #10b981; border-radius: 12px; padding: 14px; margin-top: 14px; display: none; }' +
' .key { font-family: monospace; font-size: 15px; font-weight: 800; color: #34d399; word-break: break-all; margin: 8px 0; }' +
' .actions { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }' +
' .btn-act { background: #1f2937; border: 1px solid #374151; color: #fff; border-radius: 8px; padding: 10px; font-size: 12px; font-weight: 700; cursor: pointer; text-align: center; text-decoration: none; }' +
' .btn-wa { background: #064e3b; border-color: #059669; color: #a7f3d0; }' +
' .toast { position: fixed; bottom: 20px; left: 50%; transform: translateX(-50%); background: #10b981; color: #030712; padding: 8px 16px; border-radius: 99px; font-size: 12px; font-weight: 700; display: none; z-index: 999; }' +
'</style></head><body>' +
'<div class="card">' +
' <h1><span>⚡ Smart AI Card</span><span class="badge">Live Cloud</span></h1>' +
' <label>Customer / Shop Name</label><input type="text" id="cName" placeholder="e.g. Sharma Cyber Cafe">' +
' <label>Mobile Number (WhatsApp)</label><input type="tel" id="cPhone" placeholder="e.g. 9876543210">' +
' <label>Machine HWID (16-Digit)</label><input type="text" id="cHwid" class="hwid" placeholder="XXXX-XXXX-XXXX-XXXX" maxlength="19">' +
' <label>Select Plan</label>' +
' <div class="plans">' +
' <div class="p-btn active" onclick="setPlan(\'D3\', this)"><span class="t">🔥 3-Day Pass</span><span class="d">₹39</span></div>' +
' <div class="p-btn" onclick="setPlan(\'LT\', this)"><span class="t">👑 Lifetime Pro</span><span class="d">₹999 (MRP ₹2,499)</span></div>' +
' </div>' +
' <label>Payment Status</label>' +
' <select id="cPay"><option value="Paid">✅ Paid</option><option value="Free Trial">⚡ Free Trial</option><option value="Pending">⏳ Pending</option></select>' +
' <button class="btn-gen" onclick="genKey()">⚡ Generate & Save to Sheet</button>' +
' <div class="res" id="resBox">' +
' <div style="font-size:11px;color:#9ca3af;" id="expTxt">Validity</div>' +
' <div class="key" id="kOut"></div>' +
' <div class="actions">' +
' <button class="btn-act" onclick="copyK()">📋 Copy Key</button>' +
' <button class="btn-act btn-wa" onclick="sendWA()">💬 WhatsApp</button>' +
' </div>' +
' </div>' +
' <a class="btn-sheet" href="' + sheetUrl + '" target="_blank">📊 Open Google Sheet Spreadsheet ➔</a>' +
'</div>' +
'<div class="toast" id="toast"></div>' +
'<script>' +
' var selPlan = "D3"; var lastKey = ""; var lastPhone = ""; var lastCust = "";' +
' var SALT = "' + SALT + '"; var SECRET = "' + adminSecret + '";' +
' function setPlan(p, el) { selPlan = p; document.querySelectorAll(".p-btn").forEach(function(b){b.classList.remove("active");}); el.classList.add("active"); }' +
' function formatHwid(val) { val = (val||"").replace(/[^A-Za-z0-9]/g, "").toUpperCase(); var res = ""; for (var i=0; i<val.length && i<16; i++) { if (i>0 && i%4===0) res += "-"; res += val[i]; } return res; }' +
' document.getElementById("cHwid").addEventListener("input", function(e){ e.target.value = formatHwid(e.target.value); });' +
' function simpleHash(str) { var h = 0; for (var i=0; i<str.length; i++) { h = ((h<<5)-h) + str.charCodeAt(i); h |= 0; } return Math.abs(h); }' +
' function getSig(hwid, plan, exp) { var p = hwid.replace(/[^A-Z0-9]/gi, "").toUpperCase() + "_" + plan + "_" + exp + "_" + SALT; return (simpleHash(p).toString(16).toUpperCase().padStart(4, "0").slice(-4)) + (simpleHash(p + "_SALT2").toString(16).toUpperCase().padStart(4, "0").slice(-4)); }' +
' async function genKey() {' +
' var hwid = (document.getElementById("cHwid").value||"").replace(/[^A-Z0-9]/gi, "").toUpperCase();' +
' if (hwid.length < 16) { alert("Please enter full 16-digit Machine HWID"); return; }' +
' var name = document.getElementById("cName").value.trim() || "Anonymous";' +
' var phone = document.getElementById("cPhone").value.trim();' +
' var pay = document.getElementById("cPay").value;' +
' var h4 = hwid.slice(0, 4); var key = ""; var expMs = null; var expStr = "";' +
' if (selPlan === "LT") {' +
' key = "CCPRO-LT-" + h4 + "-" + getSig(hwid, "LT", "LIFETIME");' +
' expStr = "Lifetime Permanent";' +
' } else {' +
' var d = selPlan === "D3" ? 3 : 365;' +
' expMs = Date.now() + (d * 24 * 60 * 60 * 1000);' +
' var expHex = Math.floor(expMs / (24*60*60*1000)).toString(16).toUpperCase().padStart(4, "0");' +
' key = "CCPRO-" + selPlan + "-" + h4 + "-" + expHex + "-" + getSig(hwid, selPlan, expHex);' +
' expStr = new Date(expMs).toLocaleDateString("en-IN") + " (" + d + " Days)";' +
' }' +
' lastKey = key; lastPhone = phone; lastCust = name;' +
' document.getElementById("kOut").innerText = key;' +
' document.getElementById("expTxt").innerText = "Validity: " + expStr;' +
' document.getElementById("resBox").style.display = "block";' +
' showT("⏳ Saving to Google Sheet...");' +
' var payload = { id: "usr_" + Date.now(), createdAt: Date.now(), customerName: name, customerPhone: phone, hwid: hwid, plan: selPlan, licenseKey: key, expiresAt: expMs ? String(expMs) : "Lifetime", paymentStatus: pay, notes: "" };' +
' if (typeof google !== "undefined" && google.script && google.script.run) {' +
' google.script.run.withSuccessHandler(function(){ showT("✅ Saved Instantly to Google Sheet!"); }).withFailureHandler(function(e){ showT("⚠️ Saved locally! (" + (e.message||e) + ")"); }).saveKeyFromMobile(payload);' +
' } else {' +
' try {' +
' var q = new URLSearchParams(Object.assign({ action: "add_key", secret: SECRET }, payload));' +
' await fetch(window.location.href.split("?")[0] + "?" + q.toString());' +
' showT("✅ Saved Instantly to Google Sheet!");' +
' } catch(_) { showT("⚠️ Saved locally!"); }' +
' }' +
' }' +
' function copyK() { if (navigator.clipboard) { navigator.clipboard.writeText(lastKey); } else { window.prompt("Copy:", lastKey); } showT("✓ Copied!"); }' +
' function sendWA() { if (!lastKey) return; var msg = encodeURIComponent("Hello " + lastCust + ",\\n\\nHere is your activation license key for *Smart AI Card Print*:\\n\\n🔑 *Key:* `" + lastKey + "`\\n\\nThank you!"); window.open("https://web.whatsapp.com/send?phone=" + (lastPhone.replace(/[^0-9]/g, "")) + "&text=" + msg, "_whatsapp"); }' +
' function showT(m) { var t = document.getElementById("toast"); t.innerText = m; t.style.display = "block"; setTimeout(function(){ t.style.display = "none"; }, 2500); }' +
'<\/script></body></html>';
}
Top right me Deploy ➔ Manage Deployments (ya New Deployment) par click karein.
Edit pencil icon click karein ➔ Version: New version select karein aur Deploy click karein.
Mila hua Web App URL portal me save karein!
📲 Connect on Mobile (Instant Sync)
Apne mobile se is QR Code ko scan karein ya WhatsApp par link bhejein. Mobile me kholte hi Google Sheets automatically connect ho jayegi aur jo bhi key banayenge wo turant Google Sheet me save hogi!