{"id":1832,"date":"2025-12-24T21:40:40","date_gmt":"2025-12-25T00:40:40","guid":{"rendered":"https:\/\/govegan.food\/?page_id=1832"},"modified":"2025-12-26T03:54:42","modified_gmt":"2025-12-26T06:54:42","slug":"wallet","status":"publish","type":"page","link":"https:\/\/govegan.food\/index.php\/wallet\/","title":{"rendered":"wallet"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"1832\" class=\"elementor elementor-1832\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5655229 e-flex e-con-boxed e-con e-parent\" data-id=\"5655229\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f1cc382 elementor-widget elementor-widget-html\" data-id=\"f1cc382\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!DOCTYPE html>\r\n<html lang=\"es\">\r\n<head>\r\n    <meta charset=\"UTF-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n    <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Baloo+2:wght@600;800&display=swap\" rel=\"stylesheet\">\r\n    \r\n    <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/ethers\/5.7.2\/ethers.umd.min.js\"><\/script>\r\n    <script src=\"https:\/\/unpkg.com\/@walletconnect\/web3-provider@1.8.0\/dist\/umd\/index.min.js\"><\/script>\r\n    <script src=\"https:\/\/cdn.jsdelivr.net\/npm\/canvas-confetti@1.5.1\/dist\/confetti.browser.min.js\"><\/script>\r\n    \r\n    <style>\r\n        :root { \r\n            --bk-red: #D62300; --bk-orange: #F5EBDC; --bk-brown: #502314; \r\n            --gv-green: #008037; --gv-yellow: #FFB81C;\r\n        }\r\n\r\n        body { background-color: #f0f0f0; margin: 0; padding: 20px; }\r\n\r\n        .gvn-card {\r\n            font-family: 'Baloo 2', cursive;\r\n            background-color: var(--bk-orange);\r\n            border-radius: 25px; padding: 25px; max-width: 400px;\r\n            margin: 0 auto; border: 4px solid var(--bk-brown);\r\n            box-shadow: 8px 8px 0px var(--bk-brown); text-align: center;\r\n        }\r\n\r\n        .bk-title { font-size: 32px; color: var(--bk-red); font-weight: 800; margin-bottom: 20px; }\r\n\r\n        .btn-bk {\r\n            background-color: var(--bk-red); color: white; border: none; padding: 16px;\r\n            border-radius: 50px; font-weight: 800; cursor: pointer; width: 100%;\r\n            font-size: 18px; box-shadow: 0 5px 0px #A81C00; margin-bottom: 15px;\r\n            text-transform: uppercase; transition: all 0.1s ease; font-family: 'Baloo 2', cursive;\r\n            position: relative; top: 0;\r\n        }\r\n\r\n        .btn-bk:active { top: 3px; box-shadow: 0 2px 0px #A81C00; }\r\n        .btn-bk:disabled { background-color: #ccc !important; box-shadow: 0 2px 0px #999 !important; top: 3px; cursor: not-allowed; color: #666; }\r\n\r\n        .status-box { \r\n            background: white; padding: 15px; border-radius: 20px; \r\n            border: 2px solid var(--bk-brown); margin: 15px 0; \r\n        }\r\n\r\n        .gamipress-wrapper {\r\n            background: #ffffff; padding: 10px; border-radius: 15px;\r\n            border: 2px dashed var(--gv-yellow); margin-bottom: 10px;\r\n            display: flex; justify-content: center; align-items: center; min-height: 50px;\r\n        }\r\n\r\n        .section-label { margin: 0; font-size: 18px; color: var(--bk-brown); font-weight: 800; margin-bottom: 10px; display: flex; align-items: center; justify-content: center; gap: 8px; }\r\n\r\n        input { \r\n            width: 100%; padding: 12px; border-radius: 12px; border: 2px solid var(--bk-brown); \r\n            margin: 10px 0; box-sizing: border-box; font-size: 18px; font-weight: 800; \r\n            text-align: center; color: var(--bk-brown); font-family: 'Baloo 2', cursive;\r\n        }\r\n\r\n        .btn-redeem { background-color: var(--gv-yellow); color: var(--bk-brown); box-shadow: 0 5px 0px #c48e15; font-size: 14px; margin-top: 5px; }\r\n        .btn-send { background: var(--gv-green); box-shadow: 0 5px 0px #005223; }\r\n\r\n        .btn-ws-big {\r\n            background: #25D366; color: white; border: none; padding: 18px;\r\n            border-radius: 15px; font-size: 18px; cursor: pointer; font-weight: 800;\r\n            font-family: 'Baloo 2', cursive; text-transform: uppercase;\r\n            box-shadow: 0 5px 0px #128C7E; transition: 0.1s; width: 100%;\r\n            margin-top: 10px;\r\n        }\r\n        .btn-ws-big:active { transform: translateY(3px); box-shadow: 0 2px 0px #128C7E; }\r\n\r\n        .login-alert { font-size: 13px; color: #D62300; font-weight: 800; text-decoration: none; display: block; margin-bottom: 10px; }\r\n        \r\n        hr { border: 1px dashed var(--bk-brown); margin: 20px 0; }\r\n    <\/style>\r\n<\/head>\r\n<body>\r\n\r\n<div class=\"gvn-card\">\r\n    <div class=\"bk-title\">Go Vegan Wallet \ud83c\udf54<\/div>\r\n    \r\n    <button id=\"btnConnect\" class=\"btn-bk\" onclick=\"connect()\">CONECTAR WALLET<\/button>\r\n\r\n    <div class=\"status-box\">\r\n        <p class=\"section-label\">\ud83c\udf81 ZONA DE CANJE<\/p>\r\n        <div class=\"gamipress-wrapper\">\r\n            \r\n<div class=\"gamipress-user-points gamipress-is-current-user gamipress-columns-1 gamipress-columns-small-1 gamipress-layout-left gamipress-align-none\">\r\n\r\n    \r\n    \r\n        \r\n        <div class=\"gamipress-points gamipress-user-points-token\">\r\n\r\n                            <div class=\"gamipress-user-points-image gamipress-user-points-token-image\">\r\n                    <img decoding=\"async\" width=\"50\" height=\"50\" src=\"https:\/\/govegan.food\/wp-content\/uploads\/2025\/06\/WhatsApp-Image-2025-06-25-at-14.00.42.jpeg\" class=\"gamipress-points-thumbnail wp-post-image\" alt=\"\" srcset=\"https:\/\/govegan.food\/wp-content\/uploads\/2025\/06\/WhatsApp-Image-2025-06-25-at-14.00.42.jpeg 1024w, https:\/\/govegan.food\/wp-content\/uploads\/2025\/06\/WhatsApp-Image-2025-06-25-at-14.00.42-300x300.jpeg 300w, https:\/\/govegan.food\/wp-content\/uploads\/2025\/06\/WhatsApp-Image-2025-06-25-at-14.00.42-150x150.jpeg 150w, https:\/\/govegan.food\/wp-content\/uploads\/2025\/06\/WhatsApp-Image-2025-06-25-at-14.00.42-768x768.jpeg 768w, https:\/\/govegan.food\/wp-content\/uploads\/2025\/06\/WhatsApp-Image-2025-06-25-at-14.00.42-508x508.jpeg 508w, https:\/\/govegan.food\/wp-content\/uploads\/2025\/06\/WhatsApp-Image-2025-06-25-at-14.00.42-600x600.jpeg 600w, https:\/\/govegan.food\/wp-content\/uploads\/2025\/06\/WhatsApp-Image-2025-06-25-at-14.00.42-100x100.jpeg 100w\" sizes=\"(min-width: 960px) 75vw, 100vw\" \/>                <\/div><!-- .gamipress-user-points-image -->\r\n\r\n                \r\n            \r\n            <div class=\"gamipress-user-points-description\">\r\n\r\n                \r\n                <span class=\"gamipress-user-points-amount\">0<\/span>\r\n\r\n                \r\n                                    <span class=\"gamipress-user-points-label\">Tokens<\/span>\r\n\r\n                    \r\n                \r\n            <\/div><!-- .gamipress-user-points-description -->\r\n\r\n        <\/div><!-- .gamipress-points -->\r\n\r\n        \r\n    \r\n    \r\n<\/div><!-- .gamipress-user-points -->\r\n\r\n        <\/div>\r\n        \r\n        <div id=\"wp-user-data\" style=\"display:none;\">[current_user_display_name]<\/div>\r\n        \r\n        <div id=\"login-helper\"><\/div>\r\n        <input type=\"text\" id=\"userName\" placeholder=\"NOMBRE DE USUARIO\">\r\n        \r\n        <button id=\"btnRedeem\" class=\"btn-bk btn-redeem\" onclick=\"redeemPoints()\">CANJEAR PUNTOS POR GVN<\/button>\r\n        \r\n        <hr>\r\n        \r\n        <p class=\"section-label\">\ud83d\uded2 PAGAR PEDIDO<\/p>\r\n        <div style=\"font-size: 26px; font-weight: 800; color: var(--bk-brown); margin-bottom: 10px;\">\r\n            <span id=\"balDisplay\">0.0000<\/span> GVN\r\n        <\/div>\r\n        <input type=\"number\" id=\"amt\" placeholder=\"CANTIDAD GVN\">\r\n        <button id=\"btnSend\" class=\"btn-bk btn-send\" onclick=\"send()\">ENVIAR PAGO<\/button>\r\n\r\n        <div id=\"historyContainer\" class=\"history-box\" style=\"display:none; margin-top:15px; background:#fff; padding:10px; border-radius:15px; border:1px solid var(--bk-brown);\">\r\n            <p style=\"text-align:center; font-weight:800; margin: 0 0 10px 0; font-size:14px;\">\ud83d\udccb COMPROBANTE LISTO<\/p>\r\n            <div id=\"historyList\"><\/div>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\r\n\r\n<script>\r\n    const GVN = \"0xC7501EA6965C82D27b3bA1718D17CbacbC67c611\";\r\n    const ME = \"0x896B98C0eB6a1f7a59B7C2235130b616e0B7908A\";\r\n    const ABI = [\"function balanceOf(address a) view returns (uint256)\",\"function transfer(address t, uint v) returns (bool)\",\"function decimals() view returns (uint8)\"];\r\n    \r\n    let provider, signer, contract, userWalletAddress;\r\n    let lastTxHash = \"\";\r\n\r\n    \/\/ --- FUNCI\u00d3N DE AUTODETECCI\u00d3N DE NOMBRE ---\r\n    window.addEventListener('load', () => {\r\n        const input = document.getElementById('userName');\r\n        const wpData = document.getElementById('wp-user-data').innerText.trim();\r\n        \r\n        \/\/ Si el shortcode devolvi\u00f3 un nombre real (no el texto del shortcode)\r\n        if (wpData && wpData !== \"[current_user_display_name]\" && wpData !== \"\") {\r\n            input.value = wpData;\r\n        } else {\r\n            \/\/ Plan B: Buscar en elementos comunes de WordPress si el shortcode fall\u00f3\r\n            const wpNameHeader = document.querySelector('.display-name, .user-name, #wp-admin-bar-my-account .display-name');\r\n            if (wpNameHeader) {\r\n                input.value = wpNameHeader.innerText;\r\n            } else {\r\n                document.getElementById('login-helper').innerHTML = '<a href=\"\/mi-cuenta\/\" class=\"login-alert\">\u26a0\ufe0f Inicia sesi\u00f3n para autocompletar<\/a>';\r\n            }\r\n        }\r\n    });\r\n\r\n    async function connect() {\r\n        const btn = document.getElementById('btnConnect');\r\n        btn.innerText = \"CONECTANDO...\";\r\n        btn.disabled = true;\r\n        try {\r\n            if (window.ethereum) {\r\n                await window.ethereum.request({ method: 'eth_requestAccounts' });\r\n                provider = new ethers.providers.Web3Provider(window.ethereum);\r\n                await setupWallet();\r\n            } else {\r\n                const isMobile = \/iPhone|iPad|iPod|Android\/i.test(navigator.userAgent);\r\n                if (isMobile) {\r\n                    const cleanUrl = window.location.href.replace(\/^https?:\\\/\\\/\/, '');\r\n                    window.location.href = \"https:\/\/metamask.app.link\/dapp\/\" + cleanUrl;\r\n                } else {\r\n                    const wcProvider = new WalletConnectProvider.default({\r\n                        rpc: { 42161: \"https:\/\/arb1.arbitrum.io\/rpc\" },\r\n                        chainId: 42161\r\n                    });\r\n                    await wcProvider.enable();\r\n                    provider = new ethers.providers.Web3Provider(wcProvider);\r\n                    await setupWallet();\r\n                }\r\n            }\r\n        } catch (e) {\r\n            btn.innerText = \"CONECTAR WALLET\";\r\n            btn.disabled = false;\r\n        }\r\n    }\r\n\r\n    async function setupWallet() {\r\n        signer = provider.getSigner();\r\n        userWalletAddress = await signer.getAddress();\r\n        contract = new ethers.Contract(GVN, ABI, signer);\r\n        document.getElementById('btnConnect').innerText = userWalletAddress.substring(0,6)+\"...\"+userWalletAddress.substring(38);\r\n        document.getElementById('btnConnect').disabled = false;\r\n        updateWalletBal();\r\n    }\r\n\r\n    async function updateWalletBal() {\r\n        if(!contract || !userWalletAddress) return;\r\n        try {\r\n            const b = await contract.balanceOf(userWalletAddress);\r\n            const d = await contract.decimals();\r\n            document.getElementById('balDisplay').innerText = parseFloat(ethers.utils.formatUnits(b, d)).toFixed(4);\r\n        } catch (e) {}\r\n    }\r\n\r\n    async function send() {\r\n        if(!userWalletAddress) return alert(\"Conecta tu Wallet primero\");\r\n        const v = document.getElementById('amt').value;\r\n        const name = document.getElementById('userName').value;\r\n        if(!name) return alert(\"Por favor, ingresa tu nombre\");\r\n        if(!v || v <= 0) return alert(\"Ingresa cantidad\");\r\n\r\n        const btn = document.getElementById('btnSend');\r\n        btn.innerText = \"CONFIRMA EN TU APP...\";\r\n        btn.disabled = true;\r\n\r\n        try {\r\n            const d = await contract.decimals();\r\n            const tx = await contract.transfer(ME, ethers.utils.parseUnits(v, d));\r\n            btn.innerText = \"PROCESANDO PAGO...\";\r\n            const receipt = await tx.wait();\r\n            \r\n            confetti();\r\n            updateWalletBal();\r\n            showConfirmation(v, receipt.transactionHash);\r\n        } catch (e) { \r\n            alert(\"Pago cancelado o error.\"); \r\n        } finally {\r\n            btn.innerText = \"ENVIAR PAGO\";\r\n            btn.disabled = false;\r\n        }\r\n    }\r\n\r\n    function showConfirmation(amount, hash) {\r\n        document.getElementById('historyContainer').style.display = \"block\";\r\n        const list = document.getElementById('historyList');\r\n        list.innerHTML = `\r\n            <div style=\"background:#f9f9f9; padding:15px; border-radius:12px; border:1px solid #eee;\">\r\n                <p style=\"margin:0 0 10px 0; font-weight:800; color:var(--gv-green);\">\u2705 PAGO REALIZADO<\/p>\r\n                <button class=\"btn-ws-big\" onclick=\"shareWS('${amount}', '${hash}')\">ENVIAR WHATSAPP AHORA<\/button>\r\n            <\/div>\r\n        `;\r\n    }\r\n\r\n    function shareWS(amount, hash) {\r\n        const name = document.getElementById('userName').value || \"Cliente\";\r\n        const msg = encodeURIComponent(`\u00a1Hola Go Vegan! Acabo de pagar mi pedido \u2705\\n\\n\ud83d\udc64 Cliente: ${name}\\n\ud83d\udcb0 Cantidad: ${amount} GVN\\n\ud83d\udd17 Comprobante: https:\/\/arbiscan.io\/tx\/${hash}`);\r\n        window.open(`https:\/\/wa.me\/?text=${msg}`, '_blank');\r\n    }\r\n\r\n    function redeemPoints() {\r\n        if(!userWalletAddress) return alert(\"Conecta tu Wallet primero\");\r\n        const name = document.getElementById('userName').value;\r\n        if(!name) return alert(\"Ingresa tu nombre para el canje\");\r\n        \r\n        const btn = document.getElementById('btnRedeem');\r\n        btn.innerText = \"ABRIENDO WHATSAPP...\";\r\n        \r\n        const msg = encodeURIComponent(`\u00a1Hola Go Vegan! Soy ${name}.\\nQuiero canjear mis puntos por tokens GVN \ud83c\udf81.\\n\\nWallet:\\n${userWalletAddress}`);\r\n        setTimeout(() => {\r\n            window.open(`https:\/\/wa.me\/?text=${msg}`, '_blank');\r\n            btn.innerText = \"CANJEAR PUNTOS POR GVN\";\r\n        }, 1000);\r\n    }\r\n<\/script>\r\n<\/body>\r\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Go Vegan Wallet \ud83c\udf54 CONECTAR WALLET \ud83c\udf81 ZONA DE CANJE [current_user_display_name] CANJEAR PUNTOS POR GVN \ud83d\uded2 PAGAR PEDIDO 0.0000 GVN ENVIAR PAGO \ud83d\udccb COMPROBANTE LISTO<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1832","page","type-page","status-publish","hentry"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/govegan.food\/index.php\/wp-json\/wp\/v2\/pages\/1832","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/govegan.food\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/govegan.food\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/govegan.food\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/govegan.food\/index.php\/wp-json\/wp\/v2\/comments?post=1832"}],"version-history":[{"count":205,"href":"https:\/\/govegan.food\/index.php\/wp-json\/wp\/v2\/pages\/1832\/revisions"}],"predecessor-version":[{"id":2096,"href":"https:\/\/govegan.food\/index.php\/wp-json\/wp\/v2\/pages\/1832\/revisions\/2096"}],"wp:attachment":[{"href":"https:\/\/govegan.food\/index.php\/wp-json\/wp\/v2\/media?parent=1832"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}