Comprador ──► iFrame SyncPay ──(postMessage: token)──► sua página
sua página ──(token + id do pedido)──► seu servidor
seu servidor ──(POST /api/partner/v1/credit-card)──► SyncPay
SyncPay ──(webhook transaction)──► seu servidor → libera o pedido em "completed"| Produção | |
|---|---|
| Origem do iFrame (painel) | https://app.syncpayments.com.br |
| API | https://api.syncpayments.com.br/api |
https://loja.exemplo.com.br. Se a origem não estiver na lista, o navegador não mostra o iFrame e as chamadas dele voltam 403.pk_live_...) na mesma tela.https://<seu-dominio>/.well-known/apple-developer-merchantid-domain-association. Sem o domínio verificado, o botão não aparece.Com o iFrame liberado, o painel mostra a aba Developer API → iFrame de pagamento. Ela traz os mesmos códigos desta página, já preenchidos com a sua chave e o seu domínio.
| Parâmetro | Regra |
|---|---|
amount | Valor em centavos, um número inteiro de 100 (R 19,90. Fora dessa faixa, o formulário não aparece. |
parent_origin | A origem exata da página que embute, só https://host[:porta]. Não coloque caminho, query nem barra no fim. Ela tem que ser igual à origem real da página. |
allow="payment" | Obrigatório para o Apple Pay. |
amount.background no iFrame. Ele é transparente e desenha o próprio cartão.referrerpolicy="no-referrer". Sem esse atributo, o navegador usa o padrão, que é o correto. Com no-referrer, a origem da sua página fica escondida e o formulário não carrega.height: 440px é só a altura inicial. O iFrame avisa a altura real pela mensagem resize (passo 3).type | Campos | Quando |
|---|---|---|
ready | — | O iFrame carregou e o site foi aceito. Pode chegar mais de uma vez. |
resize | height | A altura do conteúdo mudou. |
token | method: "card", token, brand, last4, expires_at | O cartão foi selado. |
token | method: "apple_pay", token, expires_at | O Apple Pay foi selado. |
error | code: "tokenize_failed" | A selagem falhou. O comprador pode tentar de novo. |
error | code: "apple_pay_unavailable" | O Apple Pay não abriu. Ofereça o cartão. |
error | code: "config_unavailable" | O formulário não carregou. Confira a chave, o domínio e a liberação. |
token, o iFrame fica em "Processando…" para sempre. Quem mostra o resultado é a sua página. Para tentar de novo, recarregue o src do iFrame.card_token. ou com apple_pay_token.. Veja todos os campos em Cobrar no cartão.19.90 na API é o mesmo valor que 1990 no iFrame.installments 1 (ou omita o campo). O amount precisa ser exatamente o valor do iFrame. Se não for, a cobrança volta 422 e o token é gastado.device.ip é o IP do comprador. Se o seu servidor está atrás de um proxy, pegue o IP do X-Forwarded-For.client_secret e o bearer ficam só no servidor. Nunca vão para a página.transaction_id: null. Nesse caso, espere o webhook.transaction, pelo painel (Developer API → Webhooks) ou por Criar webhook.X-SyncPay-Signature em cada entrega.completed. Veja os outros status em Transação teve mudança de status.webhook_url da cobrança. Ele manda o formato antigo, sem assinatura.postMessage. O token só prova que o cartão foi selado, não que o pagamento foi aprovado.transaction.updated antes de marcar o pedido como falho.allow="payment" no iFrame.amount em centavosevent.origin e data.sourcedevice.metadatatransaction, com a assinatura conferidacompleted