SDK de cartão (qorvie-pay.js)

Para ter o formulário de cartão dentro do seu próprio site sem tocar nos dados do cartão. Os campos rodam num iframe nosso e você recebe só um token de uso único.

Por que assim: o número e o CVV ficam numa página de outra origem. O JavaScript do seu site não consegue lê-los (o navegador bloqueia), e os dados vão direto do iframe para o Qorvie Pay. Isso mantém a sua plataforma fora do escopo mais pesado de segurança de cartões. Se você só quer receber, o checkout hospedado é ainda mais simples.

1. Prepare a plataforma

  • Pegue a chave pública (pk_test_…) no painel, em Chaves de API. Ela não é segredo, mas nunca use a chave secreta no navegador.
  • Cadastre os domínios do seu site no painel (ou em PUT /v1/plataforma/dominios). Só eles podem mostrar os campos. O domínio do site informado no credenciamento já vem cadastrado.

2. Monte os campos

HTML
<div id="cartao"></div>
<button id="pagar">Pagar</button>

<script src="https://checkout.pay.qorvie.com/qorvie-pay.js"></script>
<script>
  var fp = QorviePay('pk_test_...');
  var campos = fp.campos();               // opções: { tema: 'claro' | 'escuro' }
  campos.on('estado', function (e) {      // { completo, bandeira, campos }
    document.getElementById('pagar').disabled = !e.completo;
  });
  campos.on('erro', function (e) { console.error(e.codigo, e.mensagem); });
  campos.montar('#cartao');

  document.getElementById('pagar').onclick = function () {
    campos.tokenizar().then(function (r) {
      // r = { token, bandeira, final, expiraEm }  → envie r.token ao SEU servidor
      fetch('/pagar', { method: 'POST', body: JSON.stringify({ token: r.token }) });
    }, function (e) {
      alert(e.mensagem);                  // e.codigo identifica o problema
    });
  };
</script>

3. Cobre no seu servidor

POST /v1/cobrancas
curl -X POST https://api.pay.qorvie.com/v1/cobrancas \
  -H "Authorization: Bearer $CHAVE_SECRETA" \
  -H "Idempotency-Key: pedido-42" \
  -H "Content-Type: application/json" \
  -d '{
    "metodo": "cartao",
    "valorCentavos": 4990,
    "descricao": "Pedido 42",
    "cartaoToken": "tok_...",
    "parcelas": 1,
    "cliente": { "nome": "Maria Silva", "documento": "12345678909", "email": "maria@exemplo.com" }
  }'

O token vale uma vez e por 15 minutos. Se a cobrança for recusada, peça o cartão de novo e gere outro token.

Referência do SDK

MétodoO que faz
QorviePay(chavePublica, opcoes?)Cria o cliente. Recusa chave secreta ou inválida.
fp.campos({ tema })Cria os campos (ainda sem aparecer).
campos.montar(alvo)Mostra o iframe no seletor ou elemento.
campos.tokenizar()Promise com { token, bandeira, final, expiraEm }, ou erro com codigo e mensagem.
campos.on(evento, fn)Eventos pronto, estado e erro.
campos.desmontar()Remove o iframe e cancela pedidos pendentes.

O evento estado só informa se os campos estão completos e a bandeira, nunca o número. Códigos de erro do SDK: chave_publica_invalida, nao_montado, campos_incompletos, campos_indisponiveis (domínio não cadastrado ou chave errada), tempo_esgotado.

Cartões de teste (sandbox)

NúmeroResultado
4242 4242 4242 4242Aprovado.
4000 0000 0000 0002Recusado (cartao_recusado).
4000 0000 0000 9995Recusado (saldo_insuficiente).

Use qualquer validade futura e CVV de 3 dígitos (4 na Amex). O sandbox só aceita cartões de teste conhecidos: um número real é recusado (cartao_somente_teste), então nunca digite um cartão real no sandbox. Para testar só pela API, os tokens tok_ok e tok_recusado funcionam sem passar pelos campos.

Produção

Em produção a tokenização passa a usar o SDK do provedor de pagamento, no mesmo formato de campos hospedados. A chamada /v1/tokens existe só no sandbox e responde 501 com um provedor real. O código da sua integração (montar, tokenizar) não muda.

Segurança, em resumo

  • Os campos só aparecem nos domínios cadastrados (o navegador impõe isso por frame-ancestors).
  • A tokenização só é aceita a partir dos nossos campos: o servidor recusa chamadas diretas com os dados do cartão.
  • Há limite de tentativas por origem e por chave contra teste de cartões em massa.
  • Número e CVV não são guardados nem devolvidos; os campos são limpos depois do token.