| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438 |
- function safeDecrypt(encryptedData) {
- try {
- // 检查数据是否为空或无效
- if (!encryptedData || encryptedData === 'undefined' || encryptedData === 'null') {
- console.warn('Empty or invalid encrypted data provided');
- return '';
- }
- // 尝试解密
- const decrypted = CryptToJS.Decrypt(encryptedData);
- return decrypted;
- } catch (error) {
- console.error('Decryption failed:', error.message);
- // 返回空字符串而不是抛出错误
- return '';
- }
- }
- function setLang(that) {
- var jsSrc = (navigator.language || navigator.browserLanguage);
- // jsSrc = 'ko-IN'
- if (jsSrc.indexOf('zh-C') >= 0) {
- that.language = 'cn'
- that.lang = content['cn'];
- } else if (jsSrc.indexOf('es') >= 0) {
- that.language = 'es'
- that.lang = content['es'];
- } else if (jsSrc.indexOf('zh-') >= 0) {
- that.language = 'zhHant'
- that.lang = content['zhHant'];
- } else if (jsSrc.indexOf('ar') >= 0) {
- that.language = 'ar'
- that.lang = content['ar'];
- } else if (jsSrc.indexOf('de') >= 0) {
- that.language = 'de'
- that.lang = content['de'];
- } else if (jsSrc.indexOf('id') >= 0) {
- that.language = 'id'
- that.lang = content['id'];
- } else if (jsSrc.indexOf('ko') >= 0 && jsSrc.indexOf('kok') == -1) {
- that.language = 'ko'
- that.lang = content['ko'];
- } else if (jsSrc.indexOf('ms') >= 0) {
- that.language = 'ms'
- that.lang = content['ms'];
- } else if (jsSrc.indexOf('th') >= 0) {
- that.language = 'th'
- that.lang = content['th'];
- } else if (jsSrc.indexOf('vi') >= 0) {
- that.language = 'vn'
- that.lang = content['vn'];
- } else if (jsSrc.indexOf('fa') >= 0) {
- that.language = 'fa'
- that.lang = content['fa'];
- } else if (jsSrc.indexOf('pt') >= 0) {
- that.language = 'pt'
- that.lang = content['pt'];
- } else if (jsSrc.indexOf('tr') >= 0) {
- that.language = 'tr'
- that.lang = content['tr'];
- } else {
- that.language = 'en'
- that.lang = content['en'];
- }
- sessionStorage.setItem("lang", that.language);
- }
- function parseParams(str) {
- const params = new URLSearchParams(str);
- return {
- addresses: params.get('addresses'),
- successUrl: params.get('successUrl'),
- amount: params.get('amount'),
- blockchainEnName: params.get('blockchainEnName'),
- blockchainName: params.get('blockchainName'),
- currency: params.get('currency')
- };
- }
- var content = {
- cn: {
- item1: "如果你没有任何",
- item2: ", 可在",
- item3: "得到",
- item4: "送出",
- item5: " (ㄧ次付款)到提供的地址!",
- item6: "如果你送出任何其他金额,系统无论如何都会接受!",
- item7: "地址已被复制",
- item8: "复制",
- item9: "已支付",
- item10: "取消",
- item11: "总计",
- item12: "支付方式:",
- item13: "扫码或者点击复制按钮,复制地址进行付款!",
- item14: "请务必核对收款地址与金额,转账不可撤销",
- item15: "转账完成后,通常需要1–5分钟 网络确认",
- item16: "在网络拥堵时,确认时间可能延长,请耐心等待",
- item17: "若长时间未到账,请保存 交易哈希(TxHash) 并联系客服",
- item18: "交易确认后,系统将自动更新订单状态",
- item19: "温馨提示:",
- },
- zhHant: {
- item1: "如果你沒有任何",
- item2: ", 可在",
- item3: "得到",
- item4: "送出",
- item5: " (ㄧ次付款)到下列提供的地址!",
- item6: "如果你送出任何其他金額,系統無論如何都會接受!",
- item7: "地址已複製",
- item8: "複製",
- item9: "已支付",
- item10: "取消",
- item11: "总计",
- },
- en: {
- item1: "If you don't have any",
- item2: ", at",
- item3: "you can get",
- item4: "sent out",
- item5: "(One payment) to the provided address!",
- item6: "If you send any other amount, the system will accept it anyway!",
- item7: "Address copied",
- item8: "Copy",
- item9: "Paid",
- item10: "Cancel",
- item11: "Total",
- item12: "Pay with:",
- item13: "Scan the code or click the copy button to copy the address for payment!",
- item14: "Please carefully verify the recipient address and amount. Blockchain transactions are irreversible.",
- item15: "After the transfer is completed, network confirmation usually takes 1–5 minutes.",
- item16: "During periods of network congestion, confirmation times may be longer. Please wait patiently.",
- item17: "If the funds are not credited for a long time, please save the transaction hash (TxHash) and contact customer support.",
- item18: "Once the transaction is confirmed, the system will automatically update the order status.",
- item19: "Friendly Reminder:",
- },
- vn: {
- item1: "Nếu bạn không có bất kỳ",
- item2: ", bạn có thể nhận được",
- item3: "Nhận",
- item4: "Gửi",
- item5: " (Thanh toán một lần) đến địa chỉ được cung cấp dưới đây!",
- item6: "Nếu bạn gửi bất kỳ số tiền khác, hệ thống sẽ chấp nhận mà không cần xác nhận!",
- item7: "Địa chỉ đã được sao chép",
- item8: "Sao chép",
- item9: "Đã thanh toán",
- item10: "Hủy",
- item11: "Tổng cộng",
- },
- de: {
- item1: "Wenn du keine hast",
- item2: "haben, können Sie",
- item3: "Erhalten",
- item4: "Senden",
- item5: " (Einmalzahlung) an die unten angegebene Adresse!",
- item6: "Wenn Sie einen anderen Betrag senden, akzeptiert das System dies ohne Bestätigung!",
- item7: "Adresse wurde kopiert",
- item8: "Kopieren",
- item9: "Bezahlt",
- item10: "Abbrechen",
- item11: "Insgesamt",
- },
- es: {
- item1: "Si no tienes ninguno",
- item2: ", puedes obtener",
- item3: "Recibir",
- item4: "Enviar",
- item5: " (Pago único) a la dirección proporcionada a continuación!",
- item6: "Si envías cualquier otra cantidad, el sistema la aceptará sin necesidad de confirmación!",
- item7: "La dirección se ha copiado",
- item8: "Copiar",
- item9: "Pagado",
- item10: "Cancelar",
- item11: "Total",
- },
- id: {
- item1: "Jika Anda tidak memiliki",
- item2: ", Anda dapat mendapatkan",
- item3: "Dapatkan",
- item4: "Kirim",
- item5: " (Pembayaran satu kali) ke alamat yang diberikan di bawah ini!",
- item6: "Jika Anda mengirim jumlah lain, sistem akan menerimanya tanpa konfirmasi!",
- item7: "Alamat telah disalin",
- item8: "Salin",
- item9: "Dibayar",
- item10: "Batal",
- item11: "Total",
- },
- ms: {
- item1: "Jika anda tidak mempunyai",
- item2: ", anda boleh mendapat",
- item3: "Dapat",
- item4: "Hantar",
- item5: " (Pembayaran satu kali) ke alamat yang diberikan di bawah!",
- item6: "Jika anda menghantar jumlah lain, sistem akan menerima tanpa pengesahan!",
- item7: "Alamat telah disalin",
- item8: "Salin",
- item9: "Dibayar",
- item10: "Batal",
- item11: "Total",
- },
- th: {
- item1: "ถ้าคุณไม่มี",
- item2: ", คุณสามารถได้รับ",
- item3: "ได้รับ",
- item4: "ส่ง",
- item5: " (การชำระเงินครั้งเดียว) ที่ที่ระบุด้านล่างนี้!",
- item6: "หากคุณส่งจำนวนเงินอื่นๆ ระบบก็จะยอมรับโดยไม่ต้องยืนยัน!",
- item7: "ที่อยู่ถูกคัดลอกแล้ว",
- item8: "คัดลอก",
- item9: "จ่ายแล้ว",
- item10: "ยกเลิก",
- item11: "ทั้งหมด",
- },
- ar: {
- item1: " لم يكن لديك أي",
- item2: "، يمكنك الحصول على",
- item3: "احصل على",
- item4: "إرسال",
- item5: " (الدفع مرة واحدة) إلى العنوان المقدم أدناه!",
- item6: "إذا قمت بإرسال أي مبلغ آخر، ستقبل النظام دون الحاجة إلى تأكيد!",
- item7: "تم نسخ العنوان",
- item8: "نسخ",
- item9: "تم الدفع",
- item10: "إلغاء",
- item11: "مجموع",
- },
- ko: {
- item1: "당신이 없으면",
- item2: ", 당신은 받을 수 있습니다",
- item3: "받기",
- item4: "보내기",
- item5: " (일시불) 아래 제공된 주소로!",
- item6: "다른 금액을 보내도 시스템이 확인없이 받습니다!",
- item7: "주소가 복사되었습니다",
- item8: "복사",
- item9: "지불 완료",
- item10: "취소",
- item11: "합계",
- },
- pt: {
- item1: "Se você não tem nenhum",
- item2: ", pode obter",
- item3: "Obter",
- item4: "Enviar",
- item5: " (Pagamento único) para o endereço fornecido abaixo!",
- item6: "Se enviar qualquer outro montante, o sistema aceitará sem confirmação!",
- item7: "O endereço foi copiado",
- item8: "Copiar",
- item9: "Pago",
- item10: "Cancelar",
- item11: "Total",
- },
- fa: {
- item1: "ااگر هیچ ندارید",
- item2: "ندارید، میتوانید",
- item3: "دریافت",
- item4: "ارسال",
- item5: " (پرداخت یکباره) به آدرس زیر!",
- item6: "اگر مقدار دیگری ارسال کنید، سیستم بدون تایید آن را قبول میکند!",
- item7: "آدرس کپی شده است",
- item8: "کپی",
- item9: "پرداخت شده",
- item10: "لغو",
- item11: "جمع",
- },
- tr: {
- item1: "Eğer hiç yoksa",
- item2: ", xxx'te",
- item3: "alabilirsiniz",
- item4: "gönderebilirsiniz",
- item5: " (tek seferlik ödeme) aşağıdaki adrese!",
- item6: "Başka bir miktar gönderirseniz, sistem yine de kabul eder!",
- item7: "Adres kopyalandı",
- item8: "Kopyala",
- item9: "Ödendi",
- item10: "İptal",
- item11: "Toplam",
- },
- };
- let config = {
- Pattern: {
- Password:
- /^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?!.*([~!@&%$^\\(\\)#_]).*\\1.*\\1.*\\1)[A-Za-z0-9~!@&%$^\\(\\)#_]{8,16}$/,
- },
- };
- let vm = new Vue({
- el: "#onchainpay",
- data() {
- return {
- imgUrl: "",
- ho: "",
- //多语言
- langList: {
- en: "ENGLISH",
- cn: "中文简体",
- zhHant: "中文繁體",
- vn: "Tiếng Việt",
- de: "Deutsch",
- es: "Español",
- id: "Indonesian",
- ms: "Melayu",
- th: "ภาษาไทย",
- ar: "العربية",
- ko: "한국어",
- pt: "Português",
- fa: "زبان پارسی",
- tr: "Türkçe",
- },
- language: "cn",
- lang: {},
- Host04: '',
- addresses: "",
- successUrl: "",
- amount: "",
- currency: "",
- isShow: false,
- };
- },
- computed: {
- // AccessToken(){
- // return{
- // 'Access-Token': window.location.search.split('?token=')[1]
- // }
- // }
- shortAddress() {
- const addr = this.addresses || '';
- if (addr.length > 16) {
- return addr.slice(0, 8) + '...' + addr.slice(-8);
- }
- return addr;
- },
- name() {
- return this.language == "en" ? this.blockchainEnName : this.blockchainName;
- },
- },
- methods: {
- // 语言切换函数
- chooseLang(key) {
- this.lang = content[key];
- this.language = key;
- sessionStorage.setItem("lang", this.language);
- },
- // 复制分享链接
- CopyShareLink() {
- // 优先使用现代API
- if (navigator.clipboard) {
- navigator.clipboard.writeText(this.addresses).then(() => {
- this.$message.success(this.lang.item7 || '地址已复制');
- }).catch(() => {
- this.$message.error('复制失败');
- });
- } else {
- // 兼容旧浏览器
- const input = document.createElement('input');
- input.value = this.addresses;
- document.body.appendChild(input);
- input.select();
- try {
- document.execCommand('copy');
- this.$message.success(this.lang.item7 || '地址已复制');
- } catch (e) {
- this.$message.error('复制失败');
- }
- document.body.removeChild(input);
- }
- },
- //成功跳转页面
- Pay() {
- window.location.href = this.Host04 + this.successUrl;
- },
- //取消关闭页面
- Cancle() {
- if (navigator.userAgent.indexOf("MSIE") > 0) {
- // close IE
- if (navigator.userAgent.indexOf("MSIE 6.0") > 0) {
- window.opener = null;
- window.close();
- } else {
- window.open("", "_top", "");
- window.top.close();
- }
- } else {
- // close chrome;It is effective when it is only one.
- window.opener = null;
- window.open("", "_self", "");
- window.close();
- }
- },
- },
- mounted() {
- let ht = window.location.protocol;
- let ho = window.location.host.split('.')[1];
- this.Host04 = ht + "//pay." + ho + ".com"
- try {
- const searchParams = new URLSearchParams(window.location.search);
- let params = searchParams.get('params');
- this.isShow = false
- if (params) {
- const str = parseParams(safeDecrypt(params));
- this.addresses = str.addresses
- this.successUrl = str.successUrl
- // 去除末尾多余的0和小数点
- if (str.amount) {
- let amt = str.amount;
- if (typeof amt === 'string') {
- amt = amt.replace(/(\.\d*?[1-9])0+$/, '$1').replace(/\.0+$/, '').replace(/\.$/, '');
- }
- this.amount = amt;
- } else {
- this.amount = str.amount;
- }
- this.currency = str.currency
- this.blockchainEnName = str.blockchainEnName
- this.blockchainName = str.blockchainName
- this.isShow = true;
- this.$nextTick(() => {
- if (sessionStorage.getItem("lang")) {
- this.language = sessionStorage.getItem("lang");
- this.lang = content[this.language];
- } else {
- if (!this.lang?.item1) {
- setLang(this)
- }
- }
- jQuery('#qrcode').qrcode({ width: 200, height: 200, correctLevel: 0, text: this.addresses });
- });
- } else {
- this.isShow = false
- }
- } catch (error) {
- console.error('解析URL参数时出错:', error);
- }
- },
- });
|