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
-
Obtém a tua Chave de Encriptação na SalesPark.
-
Cola o snippet na tua página e ajusta os seletores dos campos (se necessário).
-
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)
-
A SalesPark envia o cliente para a tua página com
?sp=<token_encriptado>. -
Na tua página, um script:
-
lê
?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
?spdo URL para evitar partilhas acidentais.
-
Detalhes técnicos (para quem gosta de saber)
- Algoritmo:
AES-GCM (Advanced Encryption Standard in Galois Counter Mode) 256 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
?spdo 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:
lê ?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:
-
No redirecionamento, a SalesPark acrescenta automaticamente o parâmetro encriptado
?sp=…, ficando assim: -
Ao chegar, o teu script desencripta o token e usa os dados (por exemplo, para autopreencher ou personalizar a página).
-
De seguida, o
?spé removido e o endereço volta a ficar limpo, ou seja: -
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.
-
Cola o URL de exemplo acima (ou um URL teu que contenha
?sp=…). -
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 já 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:
-
Cola a tua Chave de Encriptação no campo indicado.
-
Cola um URL real com
?sp=…(da SalesPark) ou um token de teste. -
Clica em Desencriptar & Preencher e vê os campos a serem preenchidos.
-
O parâmetro
spserá removido do URL do próprio playground.
Passo-a-passo rápido (checklist)
-
Obtém a tua Chave de Encriptação na SalesPark.
-
Escolhe um snippet (Comentado ou Minimalista).
-
Substitui a chave no código.
-
Confere os seletores dos inputs (IDs ou names) e ajusta se necessário.
-
Cola o script na tua página de destino.
-
Teste real:
faz uma compra de teste e confirma o autopreenchimento.
- 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>.
- O URL deve conter
-
Campos não preenchem
- Os seletores podem não coincidir. Ajusta
id/namedos inputs no snippet.
- Os seletores podem não coincidir. Ajusta
-
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.