A carregar...

Autopreenchimento campos após compra (com encriptação AES-GCM)

Visão geral

Quando um comprador finaliza uma compra, podes redirecioná-lo para uma página tua (WordPress, ClickFunnels, Systeme.io, site estático, etc.). Nessa navegação, a SalesPark acrescenta ao URL um parâmetro ?sp= com os dados encriptados (AES-GCM) — assim não expões dados pessoais (PII) em claro nos URLs.

Na tua página, um pequeno script desencripta o token e permite-te usar a informação como preferires: autopreencher campos (opcional), personalizar mensagens (“Obrigada, Ana!”), mostrar instruções específicas com base no método de pagamento, pré-selecionar opções ou preencher campos ocultos para métricas internas. Após utilização, o script remove o ?sp do URL para evitar partilhas acidentais.

Vantagens (também para quem não é técnico)

  • Rápido de aplicar:

basta colar um <script> na tua página.

  • Flexível:

escolhes se queres autopreencher e o que fazer com os dados.

  • Menos fricção/erros:

se quiseres, evitas pedir de novo nome/email/telefone.

  • Privacidade & RGPD:

dados encriptados em trânsito; o parâmetro é limpo do URL.

  • Compatível com tudo:

WordPress, sites estáticos e construtores de páginas tais como WordPress (Gutenberg, Elementor), Webflow, Wix, Squarespace, Framer, ClickFunnels, Leadpages, Unbounce, Systeme.io, Kajabi, Carrd, Shopify (PageFly, Shogun), Tilda, Builder.io.

Como ativar em minutos

  1. Obtém a tua Chave de Encriptação na SalesPark.

  2. Cola o snippet na tua página e ajusta os seletores dos campos (se necessário).

  3. Testa no Playground com um URL de exemplo (?sp=…) e publica quando estiver ok.

O que isto não faz

  • Não altera o teu design nem a tua plataforma — só usa os campos que já tens.

  • Não envia os dados para o teu servidor por defeito — tudo acontece no navegador do cliente.


Porquê usar encriptação?

  • Privacidade por defeito:

evita passar email/telefone em query strings legíveis (que acabam em históricos, logs, ferramentas de analytics, proxies/CDNs, etc.).

  • Menos fuga de dados:

se o URL for partilhado/copiado, os dados continuam cifrados.

  • Compatibilidade total:

funciona em páginas estáticas e construtores de páginas apenas com JavaScript no cliente/browser.


Enquadramento RGPD

  • Minimização e confidencialidade (art. 5.º, 32.º):

reduzir exposição de dados pessoais (PII) em canais não necessários (URL, logs), aplicando medidas técnicas adequadas (encriptação).

  • Privacidade em trânsito e em repouso:

apesar de ser um token de uso imediato no browser, a encriptação reduz o risco de acesso não autorizado durante o percurso e armazenamento acidental (ex.: logs).

  • Partilha com terceiros:

ao remover o parâmetro sp do URL após uso, evitas que a PII chegue a trackers e heatmaps.

  • Responsabilidade do produtor:

tu continuas responsável pelo tratamento na tua página (ex.: consentimentos, políticas, segurança local, não reenviar sp para serviços de terceiros, etc.).

Nota:

A encriptação no cliente não substitui controlos no servidor nem outras obrigações RGPD (informação ao titular, base legal, segurança organizacional, etc.). É uma medida adicional para reduzir riscos.


Como funciona (em 30 segundos)

  1. A SalesPark envia o cliente para a tua página com ?sp=<token_encriptado>.

  2. Na tua página, um script:

    • ?sp=…

    • desencripta o payload com a tua Chave de Encriptação (uma chave única por produtor)

    • preenche automaticamente os teus inputs (nome, email, telefone)

    • remove ?sp do URL para evitar partilhas acidentais.


Detalhes técnicos (para quem gosta de saber)

  • Algoritmo:

AES-GCM (Advanced Encryption Standard in  Galois Counter Mode256 bits, com IV de 96 bits ( recomendado para GCM).

  • Formato do token:

v1.<iv>.<ciphertext> (todos em Base64URL).

  • Chave de Encriptação:

string Base64URL (43 caracteres) que representa 32 bytes (256 bits).

  • API no browser:

[Web Crypto API] crypto.subtle.

  • Boas práticas recomendadas:

    • TTL lato sensu (o token inclui ts; podes recusar se tiver > 10–15 min)

    • remover ?sp do URL após uso

    • não reenviar sp/dados desencriptados para terceiros

    • rotação periódica da chave (p. ex., trimestral)


Pré-requisitos

  • Teres a tua Chave de Encriptação: disponível em

  • app.salespark.io › Conta › Dados pessoais

  • Conseguir editar o cabeçalho/HTML da tua página de destino para colar um bloco <script>.


Exemplos de código

Exemplo 1 — Script comentado (recomendado para começar)

Quando usar:

primeiras integrações, páginas com seletores “normais”.

O que faz:

?sp, desencripta e preenche [name="name"], [name="email"], [name="phone"].

Onde colar:

bloco HTML/JS da tua página (antes do </body>).

O que deves alterar:

a Chave de Encriptação e, se necessário, os seletores dos inputs.

<script>
/**
 * Exemplo: Auto-preenchimento de campos do checkout para página após compra com dados encriptados
 * ----------------------------------------------------------------------
 * 1. A SalesPark envia o comprador para a tua página com ?sp=<dados_encriptados>
 * 2. Este script desencripta os dados usando a tua Chave de Encriptação (chave disponível em https://app.salespark.io/account/personal-data)
 * 3. Preenche automaticamente os campos do formulário (ex.: [name="name"], [name="email"], [name="phone"])
 *
 * ⚠️ Substitui "COLOCA_AQUI_A_TUA_CHAVE_ENCRIPTACAO" pela tua Chave de Encriptação.
 * ⚠️ Caso os teus campos tenham outros nomes/IDs, ajusta o querySelector no bloco de auto-preenchimento
 */

(async function () {
  // === Chave de Encriptação (fornecida pela SalesPark) ===
  // 👇 👇 👇 👇 👇
  const ENCRYPTION_KEY = "COLOCA_AQUI_A_TUA_CHAVE_ENCRIPTACAO"; // Base64URL string (32 bytes)

  // --- Funções auxiliares ---
  function b64UrlToAb(b64url) {
    const b64 = b64url.replace(/-/g, "+").replace(/_/g, "/") + "===".slice((b64url.length + 3) % 4);
    const bin = atob(b64);
    const bytes = new Uint8Array(bin.length);
    for (let i = 0; i < bin.length; i++) bytes[i] = bin.charCodeAt(i);
    return bytes.buffer;
  }
  function utf8Decode(ab) {
    return new TextDecoder().decode(new Uint8Array(ab));
  }
  async function importKey(base64url) {
    const raw = b64UrlToAb(base64url);
    return crypto.subtle.importKey("raw", raw, { name: "AES-GCM" }, false, ["decrypt"]);
  }

  // --- Ler o parâmetro ?sp= do URL ---
  const url = new URL(window.location.href);
  const sp = url.searchParams.get("sp");
  if (!sp) return;

  // --- Desencriptar os dados ---
  const [v, ivB64, ctB64] = sp.split(".");
  if (v !== "v1") return;
  const key = await importKey(ENCRYPTION_KEY);
  try {
    const plain = await crypto.subtle.decrypt(
      { name: "AES-GCM", iv: new Uint8Array(b64UrlToAb(ivB64)) },
      key,
      b64UrlToAb(ctB64)
    );
    const data = JSON.parse(utf8Decode(plain));

    // --- Preencher os campos automaticamente ---
     // 👇 👇 👇 👇 👇
    // IMPORTANTE: Ajusta aqui os querySelector caso os teus inputs tenham outros nomes/IDs
    if (data.name)  { 
      let el = document.querySelector('[name="name"]');  
      if (el) el.value = data.name; 

      // Exemplo alternativo: usar ID em vez de name
      // let el = document.getElementById("nome-cliente");
      // if (el) el.value = data.name;
    }

    if (data.email) { 
      let el = document.querySelector('[name="email"]'); 
      if (el) el.value = data.email; 
    }

    if (data.phone) { 
      let el = document.querySelector('[name="phone"]'); 
      if (el) el.value = data.phone; 
    }

    // --- Limpar o URL para o cliente não partilhar o token encriptado ---
    url.searchParams.delete("sp");
    history.replaceState(null, "", url.toString());
  } catch (e) {
    console.warn("Falhou a desencriptação dos dados de autopreenchimento:", e?.message || e);
  }
})();
</script>

Exemplo 2 — Script minimalista (variáveis no topo)

Quando usar:

já sabes os IDs/ names exatos dos teus inputs e queres uma versão curta.

O que faz:

define ENCRYPTION_KEY e FIELD_NAME/EMAIL/PHONE no topo; tenta por ID e depois por name automaticamente.

Onde colar:

igual ao anterior.

O que deves alterar:

as variáveis no topo.

<script>
/**
 * Exemplo: Auto-preenchimento de campos do checkout para página após compra com dados encriptados
 * ----------------------------------------------------------------------
 * 1. A SalesPark envia o comprador para a tua página com ?sp=<dados_encriptados>
 * 2. Este script desencripta os dados usando a tua Chave de Encriptação (chave disponível em https://app.salespark.io/account/personal-data)
 * 3. Preenche automaticamente os campos do formulário (ex.: [name="name"], [name="email"], [name="phone"])
 *
 * ⚠️ Substitui "COLOCA_AQUI_A_TUA_CHAVE_ENCRIPTACAO" pela tua Chave de Encriptação.
 * ⚠️ Substitui as variáveis abaixo conforme o teu formulário.
 */
/* ===================== VARIÁVEIS A EDITAR ===================== */ 
const ENCRYPTION_KEY = "COLOCA_AQUI_A_TUA_CHAVE_ENCRIPTACAO"; // Base64URL (43 chars) 
const FIELD_NAME = "name"; // ID ou name do input do nome (ex.: "nome-cliente" ou "name") 
const FIELD_EMAIL = "email"; // ID ou name do input do email 
const FIELD_PHONE = "phone"; // ID ou name do input do telefone 
/* =============================================================== */ 
(function(){function fromB64Url(b64url){const b64=b64url.replace(/-/g,"+").replace(/_/g,"/");const pad=b64.length%4===0?"":"=".repeat(4-(b64.length%4));return new Uint8Array(atob(b64+pad).split("").map(c=>c.charCodeAt(0)))} function utf8Decode(u8){return new TextDecoder().decode(u8)} function findInput(idOrName){return document.getElementById(idOrName)||document.querySelector('[name="'+idOrName+'"]')} function setIfExists(idOrName,value){if(!value)return;const el=findInput(idOrName);if(el)el.value=value} const url=new URL(window.location.href);const sp=url.searchParams.get("sp");if(!sp)return;(async function run(){try{const rawKey=fromB64Url(ENCRYPTION_KEY);if(rawKey.byteLength!==32){console.warn("Chave inválida (precisa de 32 bytes base64url).");return} const parts=sp.split(".");if(parts.length!==3||parts[0]!=="v1")return;const iv=fromB64Url(parts[1]);const ct=fromB64Url(parts[2]);const key=await crypto.subtle.importKey("raw",rawKey,{name:"AES-GCM"},!1,["decrypt"]);const plainAb=await crypto.subtle.decrypt({name:"AES-GCM",iv},key,ct);const data=JSON.parse(utf8Decode(new Uint8Array(plainAb)));setIfExists(FIELD_NAME,data.name);setIfExists(FIELD_EMAIL,data.email);setIfExists(FIELD_PHONE,data.phone);url.searchParams.delete("sp");history.replaceState(null,"",url.toString())}catch(e){console.warn("Falhou a desencriptação do autopreenchimento:",e?.message||e)}})()})() </script>

Página de exemplo (página pública)

URL definido após compra:

https://produtodigital.pt/exemplo-pagina-apos-compra/

O que vais ver no percurso:

  1. No redirecionamento, a SalesPark acrescenta automaticamente o parâmetro encriptado ?sp=…, ficando assim:

  2. https://produtodigital.pt/exemplo-pagina-apos-compra/?sp=v1.tZjrNdjLu9dKYhyy.Sv5EhvvpCqIH3tCMjNYCpaQcB3jXAqwn90SIP4lwYjeL45KuQ8GzC0WivCuQriX7G31mWK_YDZgb6XDDdZOhpumUL6ABQjDrB99C-6A9XkcIrUpohmJwUwXQNGXA74jzCM4EElrdtUZEJ0ulNloHPvBJcR2dX0ijQO6GWREXcw

  3. Ao chegar, o teu script desencripta o token e usa os dados (por exemplo, para autopreencher ou personalizar a página).

  4. De seguida, o ?sp é removido e o endereço volta a ficar limpo, ou seja:

  5. https://produtodigital.pt/exemplo-pagina-apos-compra/

Resumo: defines o teu URL “após compra”, a SalesPark acrescenta ?sp=… apenas durante o encaminhamento, e a página retoma o URL original após ler os dados — sem expor informação pessoal.

Playground interativo (CodePen)

Queres testar sem mexer no teu site? Usa o nosso Playground:

CodePen:

https://codepen.io/SalesPark/pen/azvgqda

Dados de exemplo para teste:

Usa estes dados para validar rapidamente o Playground e o teu snippet.

URL de exemplo após compra (exemplo para Playground):

 

https://o-teu-dominio.pt/pagina-apos-compra/?s p=v1.tZjrNdjLu9dKYhyy. Sv5EhvvpCqIH3tCMjNYCpaQcB3jXAqwn90SIP4lwYjeL45KuQ8GzC0WivCuQriX7G31m WK_YDZgb6XDDdZOhpumUL6ABQjDrB99C-6A9XkcIrUpohmJwUwXQNGXA74jzCM4EElrdtUZEJ0ulNloHPvBJcR2dX0ijQO6GWREXcw

Chave de Encriptação (exemplo para Playground):

DteivADTnxMbXiZDD-XuSvk4edpSEdCs22QODh2CcoU

Como testar no Playground:

Cola a **Chave de Encriptação** no campo respetivo.
  1. Cola o URL de exemplo acima (ou um URL teu que contenha ?sp=…).

  2. Clica em Desencriptar & Preencher para veres os campos a serem preenchidos.

💡 Importante:

em ambiente real, não precisas construir o URL manualmente.

A SalesPark adiciona automaticamente a parte sp=… ao URL que definires como “página após compra”.

No Playground, deves colar um URL com ?sp=… para simular o comportamento real.

Campos adicionais disponíveis

Além de name, email e phone, o token ?sp= pode incluir também estes campos (quando aplicável), para te permitir personalizar a página/upsell:

  • purchase_id — Identificador único da compra.

  • product_id — Identificador do produto principal comprado.

  • amount — Valor total pago pelo comprador (com duas casas decimais).

  • payment_method — Método de pagamento utilizado, em minúsculas.

Nota:

  • Estes campos vêm dentro do payload encriptado e só ficam disponíveis depois de desencriptares o sp.

  • Podes usá-los para mostrar mensagens dinâmicas (ex.: “Obrigada pela tua compra de 97,00€”...), ou para pré-preencher campos/ocultos no teu formulário.

  • Alguns campos podem não estar presentes em todos os cenários; valida sempre a existência antes de os utilizares.

Como testar:

  1. Cola a tua Chave de Encriptação no campo indicado.

  2. Cola um URL real com ?sp=… (da SalesPark) ou um token de teste.

  3. Clica em Desencriptar & Preencher e vê os campos a serem preenchidos.

  4. O parâmetro sp será removido do URL do próprio playground.


Passo-a-passo rápido (checklist)

  1. Obtém a tua Chave de Encriptação na SalesPark.

  2. Escolhe um snippet (Comentado ou Minimalista).

  3. Substitui a chave no código.

  4. Confere os seletores dos inputs (IDs ou names) e ajusta se necessário.

  5. Cola o script na tua página de destino.

  6. Teste real:

faz uma compra de teste e confirma o autopreenchimento.

  1. Boa prática:

após confirmar, verifica se ?sp é removido do URL.


Resolução de problemas

  • “Chave inválida”

    • Garante que tem 43 caracteres Base64URL e representa 32 bytes.
  • “Formato sp inválido”

    • O URL deve conter ?sp=v1.<iv>.<ciphertext>.
  • Campos não preenchem

    • Os seletores podem não coincidir. Ajusta id/ name dos inputs no snippet.
  • Token “antigo”

    • Se o script avisar que o token tem > 15 minutos, gera novo fluxo de compra/redirect.

FAQ

Posso usar este método em qualquer página?

Sim. Basta conseguires inserir um bloco de <script>.

O sp é seguro se alguém o copiar?

Sem a tua Chave de Encriptação, o conteúdo é indecifrável. Ainda assim, o script remove ?sp do URL após uso.

Onde guardo a chave?

Num local seguro (por exemplo, nos teus registos de conta). No script do cliente ela é estritamente necessária para desencriptar — não a publiques fora do contexto da tua página.

Que campos posso preencher?

Por omissão, name, email e phone entre outros (ver em Campos adicionais disponíveis). Podes adaptar o snippet para outros campos (ex.: first_name, telefone, etc.).


Conclusão

Com a encriptação AES-GCM 256 e o token ?sp, consegues autopreencher a tua página de upsell/obrigado/instruções  com privacidade e compatibilidade total, reduzindo a exposição de PII (Personally Identifiable Information/Dados Pessoais Identificáveis) e alinhando-te com boas práticas RGPD.

Escolhe um dos nossos snippets, testa no Playground e ativa já no teu fluxo.