ayushyadav7970824760/goldensellingstore_botPublic · Bot Template

AIThis Telegram store bot lets customers browse digital products and plans, apply coupons, add funds via UPI, and receive purchased keys. It includes a full admin panel for managing products, reordering items, setting reseller prices, viewing and removing key stock, configuring UPI payment details and update links, and checking user balances. Co-admins and resellers are supported, and support tickets are forwarded to the admin.

Commercedigital_storeadmin_panelupi_paymentsresellercouponskey_stock
ProfileTelegram
146 commands0 envUpdated 2d agoCreated Sep 5, 2026
Back to folder

commands/_onBuyQR.js

javascript · 128 lines

Raw
1/**#command2name: /onBuyQR3answer: 4keyboard: 5parse_mode: markdown6aliases: 7allow_only_group: false8need_reply: false9is_web: 010#command**/11 12try {13  if (!content) { 14    Api.sendMessage({ 15      chat_id: chat.chatid, 16      text: "❌ Error: No response from payment server. Please try again later.", 17      parse_mode: "HTML" 18    }); 19    return; 20  }21 22  var res;23  try {24    res = (typeof content === "object") ? content : JSON.parse(content);25  } catch (parseErr) {26    Api.sendMessage({27      chat_id: chat.chatid,28      text: "❌ <b>QR Parse Failed</b>\n<code>" + String(content).substring(0, 500) + "</code>",29      parse_mode: "HTML"30    });31    return;32  }33 34  if (!res || res.status !== "success" || !res.data) {35    Api.sendMessage({36      chat_id: chat.chatid,37      text: "<tg-emoji emoji-id='6219547832169273793'>❌</tg-emoji><b>QR Generation Failed</b>\n<code>" + JSON.stringify(res).substring(0, 500) + "</code>",38      parse_mode: "HTML"39    });40    return;41  }42 43  var order_id = res.data.order_id || res.data.orderid;44  var qr = res.data.qr_url || res.data.qrurl;45  var expire = res.data.expires_at_ist || res.data.expiresatist || "5 Minutes";46  var userId = user.telegramid;47 48  var price = Number(User.getProperty("buy_price") || 0);49  var userBal = Number(Libs.ResourcesLib.userRes("balance").value() || 0);50  var totalUserBal = userBal;51 52  var needpay = Number(User.getProperty("buy_needpay") || (price > totalUserBal ? price - totalUserBal : 0));53  var prodName = User.getProperty("buy_prod_name") || "Product";54 55  try {56    var genMsgid = Bot.getProperty("gen_msg_id_" + userId);57    if (genMsgid) {58      Api.deleteMessage({ chat_id: chat.chatid, message_id: genMsgid });59      Bot.setProperty("gen_msg_id_" + userId, null, "string");60    }61  } catch (e) {}62 63  var gatewayMsg = 64    "<tg-emoji emoji-id='6267225207560214192'>⚠️</tg-emoji><b>PAYMENT GATEWAY</b>\n\n" +65    "<tg-emoji emoji-id='6147767796097884213'>🏷️</tg-emoji><b>Product:</b> " + prodName + "\n" +66    "<tg-emoji emoji-id='6041705726206808304'>💰</tg-emoji><b>Price:</b> ₹" + price.toFixed(2) + "\n" +67    "<tg-emoji emoji-id='5348392971207194994'>💳</tg-emoji><b>Balance:</b> ₹" + totalUserBal.toFixed(2) + "\n" +68    "<tg-emoji emoji-id='619491118249881916'>📥</tg-emoji><b>Pay Now:</b> ₹" + needpay.toFixed(2) + "\n" +69    "<tg-emoji emoji-id='6266866272848321043'>⏳</tg-emoji><b>Expire Time:</b> <code>" + expire + "</code>\n\n" +70    "<tg-emoji emoji-id='5330237710655306682'>⚡</tg-emoji><b>Scan QR & pay exact amount</b>\n";71 72  var inlineButtons = [73    [74      {75        text: "I have paid",76        callback_data: "/check_buy " + order_id,77        style: "success",78        icon_custom_emoji_id: "5330237710655306682"79      },80      {81        text: "Cancel Order",82        callback_data: "/cancel_buy " + order_id,83        style: "danger",84        icon_custom_emoji_id: "6219547832169273793"85      }86    ]87  ];88 89  var sentQrMsg;90  try {91    sentQrMsg = Api.sendPhoto({92      chat_id: chat.chatid,93      photo: qr,94      caption: gatewayMsg,95      parse_mode: "HTML",96      reply_markup: JSON.stringify({ inline_keyboard: inlineButtons })97    });98  } catch (photoErr) {99    Api.sendMessage({100      chat_id: chat.chatid,101      text: "❌ <b>sendPhoto failed</b>\nQR URL: <code>" + qr + "</code>\nError: <code>" + photoErr.message + "</code>",102      parse_mode: "HTML"103    });104    return;105  }106 107  try {108    if (sentQrMsg) {109      var qrMsgId = sentQrMsg.result ? sentQrMsg.result.message_id : sentQrMsg.message_id;110      if (qrMsgId) {111        Bot.setProperty("buy_qr_msg_id_" + userId, qrMsgId, "string");112        User.setProperty("buy_qr_msg_id_" + userId, qrMsgId, "string");113        User.setProperty("buy_pending_order_id", order_id, "string");114        Bot.setProperty("buy_qr_watch_order_" + userId, order_id, "string");115        User.setProperty("buy_qr_watch_order_" + userId, order_id, "string");116        Bot.setProperty("buy_qr_created_ts_" + userId, String(Date.now()), "string");117      }118    }119  } catch (e) {}120  // ⏰ Remove unpaid purchase QR after 5 minutes.121  try { HTTP.get({ url: "https://httpbin.org/delay/300?buy_order=" + encodeURIComponent(order_id), success: "/onQRExpire", error: "/onQRExpire" }); } catch (expiryErr) {}122} catch (err) {123  Api.sendMessage({124    chat_id: chat.chatid,125    text: "⚠️ <b>System Error:</b> <code>" + (err && err.message ? err.message : String(err)) + "</code>",126    parse_mode: "HTML"127  });128}