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.
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
<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
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étodo | O 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úmero | Resultado |
|---|---|
4242 4242 4242 4242 | Aprovado. |
4000 0000 0000 0002 | Recusado (cartao_recusado). |
4000 0000 0000 9995 | Recusado (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
/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.