Pular para o conteúdo principal
ℹ️ Conteúdo em atualização

Estamos revisando estes procedimentos. Pessoas técnicas podem encontrar ajustes em códigos de erro ou mapeamentos de payload; valide com os logs e o OpenAPI mais recente. Pessoas não técnicas podem continuar usando o passo a passo e acionar o time de suporte caso algo pareça diferente do descrito.

🛍️ API de Venda E-commerce

Este guia apresenta o passo a passo para integração com o serviço de vendas online para plataformas de e-commerce, permitindo processar pagamentos com cartão de crédito de forma segura.

🎯 Visão Geral

A API de Venda E-commerce permite que você:

  • 💳 Consulte limites e situação de cartões
  • 🔐 Crie pré-autorizações para validar vendas online
  • 🎫 Use tokens transacionais para maior segurança
  • 🔍 Consulte status de transações
  • Desfaça vendas com cartão ou token
  • Capture (efetive) vendas após aprovação
  • 📋 Cancele contratos de vendas

URL Base:

  • Homologação: https://apihml.credsystem.com.br/venda-ecommerce/api/v1

🔐 Autenticação

Todos os endpoints requerem autenticação via Bearer Token (JWT).

Header obrigatório:

Authorization: Bearer <seu_token_jwt>
Atenção

Tokens inválidos ou expirados retornarão erro 401 Unauthorized.


📚 Endpoints Disponíveis

1️⃣ Consultar Limite e Situação do Cartão

Consulta o limite disponível e a situação do cartão antes de realizar uma venda. Use este endpoint para verificar se o cliente tem limite suficiente.

Endpoint: GET /limite-situacao

Parâmetros:

ParâmetroTipoLocalObrigatórioDescrição
AuthorizationstringHeader✅ SimBearer token JWT
cartaostringHeader✅ SimNúmero do cartão
cpfstringHeader✅ SimCPF do cliente
estabelecimentointegerQuery✅ SimCódigo do estabelecimento
valorCompranumberQuery✅ SimValor da compra a ser validado
isInfoPlanosbooleanQuery❌ NãoSe deve retornar planos disponíveis (default: false)

Exemplo de Requisição:

curl -X GET "https://apihml.credsystem.com.br/venda-ecommerce/api/v1/limite-situacao?estabelecimento=12345&valorCompra=250.00&isInfoPlanos=true" \
-H "Authorization: Bearer SEU_TOKEN_JWT" \
-H "cartao: 1234567890123456" \
-H "cpf: 12345678901"

Exemplo de Resposta (200 Success):

{
"limiteDisponivel": 5000.00,
"limiteTotal": 10000.00,
"limiteUtilizado": 5000.00,
"situacaoCartao": "ATIVO",
"podeComprar": true,
"planos": [
{
"codigoPlano": "PLANO01",
"descricao": "Parcelamento sem juros - até 3x",
"quantidadeMaxParcelas": 3,
"taxaJuros": 0.00
},
{
"codigoPlano": "PLANO02",
"descricao": "Parcelamento com juros - até 12x",
"quantidadeMaxParcelas": 12,
"taxaJuros": 2.99
}
]
}

Situações do Cartão:

SituaçãoPode Comprar?Descrição
ATIVO✅ SimCartão ativo e funcionando normalmente
BLOQUEADO❌ NãoCartão bloqueado temporariamente
CANCELADO❌ NãoCartão cancelado definitivamente
VENCIDO❌ NãoCartão com validade expirada
LIMITE_INSUFICIENTE❌ NãoSem limite disponível para a compra
Melhor Prática

Consulte o limite antes de exibir as opções de parcelamento no checkout. Assim você mostra apenas as parcelas que o cliente pode realmente utilizar.


2️⃣ Criar Pré-Autorização com Cartão

Cria uma pré-autorização de venda online utilizando dados do cartão de crédito. Este passo valida os dados, verifica o limite disponível e reserva o valor.

Endpoint: POST /pre-autorizacoes

Headers:

HeaderTipoObrigatórioDescrição
Authorizationstring✅ SimBearer token JWT

Corpo da Requisição:

{
"estabelecimento": "12345",
"cartao": {
"numero": "1234567890123456",
"nome": "JOAO SILVA",
"cvv2": "123",
"validade": "12/2028"
},
"venda": {
"valor": 250.00,
"quantidadeParcelas": 3,
"tipoParcelamento": "LOJA",
"numeroPedido": "PED-2025-001",
"codigoPlano": "PLANO01"
},
"nsu": "123456789012"
}

Campos da Requisição:

CampoTipoDescrição
estabelecimentostringCódigo do estabelecimento e-commerce
cartao.numerostringNúmero do cartão de crédito
cartao.nomestringNome do titular impresso no cartão
cartao.cvv2stringCódigo de segurança (CVV)
cartao.validadestringData de validade no formato MM/AAAA
venda.valornumberValor total da compra
venda.quantidadeParcelasintegerNúmero de parcelas (1 para à vista)
venda.tipoParcelamentostringTipo: LOJA ou ADMINISTRADORA
venda.numeroPedidostringNúmero do pedido no e-commerce
venda.codigoPlanostringCódigo do plano de parcelamento
nsustringNúmero Sequencial Único da transação

Exemplo de Requisição:

curl -X POST "https://apihml.credsystem.com.br/venda-ecommerce/api/v1/pre-autorizacoes" \
-H "Authorization: Bearer SEU_TOKEN_JWT" \
-H "Content-Type: application/json" \
-d '{
"estabelecimento": "12345",
"cartao": {
"numero": "1234567890123456",
"nome": "JOAO SILVA",
"cvv2": "123",
"validade": "12/2028"
},
"venda": {
"valor": 250.00,
"quantidadeParcelas": 3,
"tipoParcelamento": "LOJA",
"numeroPedido": "PED-2025-001",
"codigoPlano": "PLANO01"
},
"nsu": "123456789012"
}'

Exemplo de Resposta (200 Success):

{
"StatusCode": 200,
"ReasonPhrase": "OK",
"HttpVersion": "1.1",
"Content": {
"preAutorizacao": 789012,
"mensagem": "Pré-autorização criada com sucesso",
"status": "APROVADO"
}
}
Importante

Guarde o número da preAutorizacao - você precisará dele para capturar (confirmar) a venda.


3️⃣ Criar Pré-Autorização com Token Transacional

Cria uma pré-autorização utilizando um token transacional em vez dos dados do cartão. Esta é a forma mais segura, pois não expõe informações sensíveis do cartão.

Endpoint: POST /pre-autorizacoes/token

Headers:

HeaderTipoObrigatórioDescrição
Authorizationstring✅ SimBearer token JWT

Corpo da Requisição:

{
"estabelecimento": "12345",
"nsu": "123456789012",
"codigoMaquina": "ECOM001",
"token": 123456,
"cpf": "12345678901",
"venda": {
"valor": 250.00,
"quantidadeParcelas": 3,
"tipoParcelamento": "LOJA",
"numeroPedido": "PED-2025-001",
"codigoPlano": "PLANO01"
}
}

Campos da Requisição:

CampoTipoDescrição
estabelecimentostringCódigo do estabelecimento e-commerce
nsustringNúmero Sequencial Único da transação
codigoMaquinastringCódigo identificador do e-commerce
tokenintegerToken transacional do cliente
cpfstringCPF do cliente (titular do cartão)
venda.valornumberValor total da compra
venda.quantidadeParcelasintegerNúmero de parcelas
venda.tipoParcelamentostringTipo: LOJA ou ADMINISTRADORA
venda.numeroPedidostringNúmero do pedido no e-commerce
venda.codigoPlanostringCódigo do plano de parcelamento

Exemplo de Requisição:

curl -X POST "https://apihml.credsystem.com.br/venda-ecommerce/api/v1/pre-autorizacoes/token" \
-H "Authorization: Bearer SEU_TOKEN_JWT" \
-H "Content-Type: application/json" \
-d '{
"estabelecimento": "12345",
"nsu": "123456789012",
"codigoMaquina": "ECOM001",
"token": 123456,
"cpf": "12345678901",
"venda": {
"valor": 250.00,
"quantidadeParcelas": 3,
"tipoParcelamento": "LOJA",
"numeroPedido": "PED-2025-001",
"codigoPlano": "PLANO01"
}
}'

Exemplo de Resposta (200 Success):

{
"StatusCode": 200,
"ReasonPhrase": "OK",
"HttpVersion": "1.1",
"Content": {
"preAutorizacao": 789013,
"mensagem": "Pré-autorização com token criada com sucesso",
"status": "APROVADO"
}
}
Vantagens do Token Transacional
  • 🔒 Maior segurança - Dados do cartão não trafegam na requisição
  • 🚀 Mais rápido - Cliente não precisa digitar dados do cartão novamente
  • 💳 Melhor experiência - Checkout simplificado para clientes recorrentes
  • PCI Compliance - Reduz escopo de conformidade PCI DSS

4️⃣ Consultar Status da Pré-Autorização

Consulta o status atual de uma pré-autorização criada.

Endpoint: GET /pre-autorizacoes/sonda/{preautorizacao}

Parâmetros:

ParâmetroTipoLocalObrigatórioDescrição
preautorizacaostringPath✅ SimNúmero da pré-autorização
AuthorizationstringHeader✅ SimBearer token JWT

Exemplo de Requisição:

curl -X GET "https://apihml.credsystem.com.br/venda-ecommerce/api/v1/pre-autorizacoes/sonda/789012" \
-H "Authorization: Bearer SEU_TOKEN_JWT"

Exemplo de Resposta (200 Success):

{
"StatusCode": 200,
"ReasonPhrase": "OK",
"HttpVersion": "1.1",
"Content": {
"preAutorizacao": 789012,
"status": "APROVADO",
"valor": 250.00,
"dataHora": "2025-12-03T14:30:00.000Z",
"situacao": "PENDENTE_CAPTURA"
}
}

Possíveis Situações:

SituaçãoDescriçãoPróximo Passo
PENDENTE_CAPTURAPré-autorização aprovada, aguardando capturaCapturar a venda
CAPTURADOVenda já capturada (confirmada)Venda concluída
CANCELADOPré-autorização canceladaCriar nova pré-autorização
EXPIRADOTempo de captura expiradoCriar nova pré-autorização
NEGADOPré-autorização negadaVerificar limite/dados do cartão

5️⃣ Desfazer Venda

Desfaz (estorna) uma venda realizada. Use este endpoint quando o cliente solicitar o cancelamento de uma compra ou em caso de erro na transação.

Prazo para Desfazimento

O desfazimento geralmente deve ser realizado em até 30 dias após a captura. Consulte as regras da sua rede.

Desfazer com Dados do Cartão

Endpoint: POST /desfazimento/cartao

Corpo da Requisição:

{
"estabelecimento": "12345",
"valor": 250.00,
"nsu": "123456789012",
"codigoMaquina": "ECOM001",
"cartao": "1234567890123456"
}

Campos da Requisição:

CampoTipoDescrição
estabelecimentostringCódigo do estabelecimento e-commerce
valornumberValor a ser estornado
nsustringNSU da transação original
codigoMaquinastringCódigo identificador do e-commerce
cartaostringNúmero do cartão usado na venda

Exemplo de Requisição:

curl -X POST "https://apihml.credsystem.com.br/venda-ecommerce/api/v1/desfazimento/cartao" \
-H "Authorization: Bearer SEU_TOKEN_JWT" \
-H "Content-Type: application/json" \
-d '{
"estabelecimento": "12345",
"valor": 250.00,
"nsu": "123456789012",
"codigoMaquina": "ECOM001",
"cartao": "1234567890123456"
}'

Exemplo de Resposta (200 Success):

{
"mensagem": "Venda desfeita com sucesso",
"status": "ESTORNADO",
"dataHora": "2025-12-03T16:00:00.000Z",
"nsu": "123456789012"
}

Desfazer com Token

Endpoint: POST /desfazimento/token

Corpo da Requisição:

{
"estabelecimento": "12345",
"valor": 250.00,
"nsu": "123456789012",
"codigoMaquina": "ECOM001",
"token": "123456",
"cpf": "12345678901"
}

Campos da Requisição:

CampoTipoDescrição
estabelecimentostringCódigo do estabelecimento e-commerce
valornumberValor a ser estornado
nsustringNSU da transação original
codigoMaquinastringCódigo identificador do e-commerce
tokenstringToken transacional usado na venda
cpfstringCPF do cliente

Exemplo de Requisição:

curl -X POST "https://apihml.credsystem.com.br/venda-ecommerce/api/v1/desfazimento/token" \
-H "Authorization: Bearer SEU_TOKEN_JWT" \
-H "Content-Type: application/json" \
-d '{
"estabelecimento": "12345",
"valor": 250.00,
"nsu": "123456789012",
"codigoMaquina": "ECOM001",
"token": "123456",
"cpf": "12345678901"
}'

Exemplo de Resposta (200 Success):

{
"mensagem": "Venda desfeita com sucesso",
"status": "ESTORNADO",
"dataHora": "2025-12-03T16:00:00.000Z",
"nsu": "123456789012"
}

6️⃣ Capturar (Confirmar) Venda

Confirma e efetiva a venda após a pré-autorização ser aprovada. Este é o passo que realmente debita o valor do cliente.

Endpoint: POST /pre-autorizacoes/captura

Importante

A captura deve ser feita em até 5 dias após a pré-autorização. Após esse prazo, a pré-autorização expira.

Corpo da Requisição:

{
"estabelecimento": "12345",
"preAutorizacao": 789012,
"numeroPedido": "PED-2025-001",
"valor": 250.00
}

Campos da Requisição:

CampoTipoDescrição
estabelecimentostringCódigo do estabelecimento e-commerce
preAutorizacaointegerNúmero da pré-autorização a ser capturada
numeroPedidostringNúmero do pedido no e-commerce
valornumberValor a ser capturado (deve ser igual ou menor que o pré-autorizado)

Exemplo de Requisição:

curl -X POST "https://apihml.credsystem.com.br/venda-ecommerce/api/v1/pre-autorizacoes/captura" \
-H "Authorization: Bearer SEU_TOKEN_JWT" \
-H "Content-Type: application/json" \
-d '{
"estabelecimento": "12345",
"preAutorizacao": 789012,
"numeroPedido": "PED-2025-001",
"valor": 250.00
}'

Exemplo de Resposta (200 Success):

{
"StatusCode": 200,
"ReasonPhrase": "OK",
"HttpVersion": "1.1",
"Content": {
"mensagem": "Venda capturada com sucesso",
"numeroContrato": 456789,
"status": "APROVADO",
"dataHora": "2025-12-03T14:35:00.000Z"
}
}
Venda Confirmada!

O cliente foi debitado e a venda foi concluída. Você pode liberar o produto/serviço.


7️⃣ Cancelar Contrato

Cancela um contrato de venda já efetivado.

Endpoint: POST /contrato/cancelamento

Corpo da Requisição:

{
"estabelecimento": "12345",
"identificador": "ECOM001",
"contrato": "456789",
"codigoMaquina": "ECOM001",
"cartao": "1234567890123456",
"tarja": "1234567890123456",
"voucher": "VOUCHER123",
"cpf": "12345678901"
}

Campos da Requisição:

CampoTipoDescrição
estabelecimentostringCódigo do estabelecimento e-commerce
identificadorstringIdentificador do e-commerce
contratostringNúmero do contrato a ser cancelado
codigoMaquinastringCódigo da máquina/terminal
cartaostringNúmero do cartão
tarjastringNúmero do cartão (tarja magnética)
voucherstringVoucher do cartão digital (se aplicável)
cpfstringCPF do cliente

Exemplo de Requisição:

curl -X POST "https://apihml.credsystem.com.br/venda-ecommerce/api/v1/contrato/cancelamento" \
-H "Authorization: Bearer SEU_TOKEN_JWT" \
-H "Content-Type: application/json" \
-d '{
"estabelecimento": "12345",
"identificador": "ECOM001",
"contrato": "456789",
"codigoMaquina": "ECOM001",
"cartao": "1234567890123456",
"cpf": "12345678901"
}'

Exemplo de Resposta (200 Success):

{
"mensagem": "Contrato cancelado com sucesso",
"contrato": "456789",
"status": "CANCELADO",
"dataHora": "2025-12-03T16:30:00.000Z"
}

🔄 Fluxo Completo de Venda

Fluxo 1: Venda com Dados do Cartão

Fluxo 2: Venda com Token Transacional


📋 Exemplo Prático Completo

Aqui está um exemplo completo em JavaScript de como realizar uma venda no e-commerce:

const API_BASE = 'https://apihml.credsystem.com.br/venda-ecommerce/api/v1';
const TOKEN = 'SEU_TOKEN_JWT';

async function processarVendaEcommerce(dadosCartao, dadosVenda) {
try {
// 1. Consultar limite do cartão
const limiteResponse = await fetch(
`${API_BASE}/limite-situacao?estabelecimento=12345&valorCompra=${dadosVenda.valor}&isInfoPlanos=true`,
{
headers: {
'Authorization': `Bearer ${TOKEN}`,
'cartao': dadosCartao.numero,
'cpf': dadosCartao.cpf
}
}
);

const limite = await limiteResponse.json();
console.log('💰 Limite disponível:', limite.limiteDisponivel);

if (!limite.podeComprar) {
throw new Error('Cliente sem limite disponível');
}

// Exibir planos disponíveis ao cliente
console.log('📋 Planos disponíveis:', limite.planos);

// 2. Criar pré-autorização
const preAuthResponse = await fetch(`${API_BASE}/pre-autorizacoes`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${TOKEN}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
estabelecimento: '12345',
cartao: {
numero: dadosCartao.numero,
nome: dadosCartao.nome,
cvv2: dadosCartao.cvv2,
validade: dadosCartao.validade
},
venda: {
valor: dadosVenda.valor,
quantidadeParcelas: dadosVenda.parcelas,
tipoParcelamento: 'LOJA',
numeroPedido: dadosVenda.numeroPedido,
codigoPlano: limite.planos[0].codigoPlano
},
nsu: gerarNSU()
})
});

const preAuth = await preAuthResponse.json();
console.log('✅ Pré-autorização criada:', preAuth.Content.preAutorizacao);

if (preAuth.Content.status !== 'APROVADO') {
throw new Error('Pré-autorização negada');
}

// 3. Processar pedido no sistema (separar produto, gerar nota fiscal, etc)
console.log('📦 Processando pedido...');
await processarPedido(dadosVenda.numeroPedido);

// 4. Capturar (confirmar) a venda
const capturaResponse = await fetch(`${API_BASE}/pre-autorizacoes/captura`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${TOKEN}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
estabelecimento: '12345',
preAutorizacao: preAuth.Content.preAutorizacao,
numeroPedido: dadosVenda.numeroPedido,
valor: dadosVenda.valor
})
});

const captura = await capturaResponse.json();
console.log('🎉 Venda capturada com sucesso!');
console.log('Número do Contrato:', captura.Content.numeroContrato);

// 5. Atualizar status do pedido
await atualizarStatusPedido(dadosVenda.numeroPedido, 'PAGO');

return {
sucesso: true,
numeroContrato: captura.Content.numeroContrato,
preAutorizacao: preAuth.Content.preAutorizacao
};

} catch (error) {
console.error('❌ Erro na venda:', error);

// Reverter processo se necessário
await cancelarPedido(dadosVenda.numeroPedido);

throw error;
}
}

// Função auxiliar para gerar NSU único
function gerarNSU() {
const timestamp = Date.now();
const random = Math.floor(Math.random() * 1000);
return `${timestamp}${random}`.substring(0, 12);
}

// Exemplo de uso
const dadosCartao = {
numero: '1234567890123456',
nome: 'JOAO SILVA',
cvv2: '123',
validade: '12/2028',
cpf: '12345678901'
};

const dadosVenda = {
valor: 250.00,
parcelas: 3,
numeroPedido: 'PED-2025-001'
};

processarVendaEcommerce(dadosCartao, dadosVenda);

💡 Dicas e Boas Práticas

✅ Recomendações

  1. Use tokens transacionais - Mais seguro e melhor experiência do cliente
  2. Sempre consulte o limite primeiro - Evite pré-autorizações negadas
  3. Capture em até 5 dias - Não deixe pré-autorizações expirarem
  4. Valide dados do cartão no frontend - Use bibliotecas como Luhn algorithm
  5. Gere NSUs únicos - Combine timestamp + random para garantir unicidade
  6. Implemente retry com exponential backoff - Para erros de comunicação
  7. Armazene apenas o necessário - Nunca armazene CVV ou dados completos do cartão
  8. Use HTTPS sempre - Obrigatório para segurança PCI DSS
  9. Implemente 3D Secure - Para maior proteção contra fraudes
  10. Monitore tentativas de fraude - Bloqueie após múltiplas tentativas falhas

❌ Evite

  1. ❌ Não armazene dados do cartão sem criptografia adequada
  2. ❌ Não armazene CVV em hipótese alguma
  3. ❌ Não reutilize NSUs
  4. ❌ Não deixe pré-autorizações pendentes sem captura
  5. ❌ Não ignore validações de limite
  6. ❌ Não exponha tokens ou dados sensíveis em logs
  7. ❌ Não faça captura parcial sem aprovação do cliente
  8. ❌ Não use HTTP - sempre HTTPS

🔒 Segurança e Compliance

PCI DSS Compliance

Para estar em conformidade com PCI DSS ao processar pagamentos:

  1. Use HTTPS/TLS - Todas as comunicações devem ser criptografadas
  2. Não armazene dados sensíveis - Nunca armazene CVV, dados de tarja completos
  3. Tokenize cartões - Use tokens transacionais para compras recorrentes
  4. Implemente controle de acesso - Limite quem pode acessar dados de pagamento
  5. Monitore e registre acessos - Mantenha logs de auditoria
  6. Valide entrada de dados - Previna SQL injection e XSS
  7. Atualize regularmente - Mantenha sistemas e bibliotecas atualizados

Antifraude

// Exemplo de validação antifraude
function validarTransacao(dadosVenda, dadosCliente) {
const flags = [];

// Verificar valor da compra
if (dadosVenda.valor > 5000) {
flags.push('VALOR_ALTO');
}

// Verificar múltiplas tentativas
const tentativasRecentes = obterTentativasUltimas24h(dadosCliente.cpf);
if (tentativasRecentes > 3) {
flags.push('MULTIPLAS_TENTATIVAS');
}

// Verificar endereço de entrega vs cadastro
if (dadosVenda.enderecoEntrega !== dadosCliente.enderecoCadastro) {
flags.push('ENDERECO_DIFERENTE');
}

// Análise de risco
const score = calcularScoreRisco(flags);

return {
aprovado: score < 50,
score: score,
flags: flags,
requerAnaliseManual: score >= 50 && score < 80
};
}

⚠️ Tratamento de Erros

Principais Erros:

StatusErroCausa ComumSolução
400Bad RequestCampos obrigatórios ausentesVerificar todos os campos da requisição
401UnauthorizedToken inválido ou expiradoRenovar token de autenticação
403ForbiddenSem permissãoVerificar credenciais do estabelecimento
404Not FoundPré-autorização não encontradaVerificar número da pré-autorização
422Unprocessable EntityLimite insuficiente ou dados inválidosValidar limite e dados do cartão
500Internal Server ErrorErro no servidorTentar novamente ou contatar suporte
503Service UnavailableServiço temporariamente indisponívelImplementar retry com backoff

Códigos de Negação:

CódigoDescriçãoAção
LIMITE_INSUFICIENTECliente sem limiteSugerir menor valor ou menos parcelas
CARTAO_BLOQUEADOCartão bloqueadoOrientar cliente a entrar em contato com a central
CARTAO_VENCIDOValidade expiradaSolicitar outro cartão
DADOS_INVALIDOSCVV ou validade incorretosValidar dados com cliente
SUSPEITA_FRAUDETransação suspeitaAnálise manual necessária

🆘 Suporte

Contato Técnico

Para dúvidas ou problemas com a integração, entre em contato com a equipe de suporte técnico.

Em Caso de Erro

  1. Anote o NSU da transação
  2. Guarde o número da pré-autorização (se gerado)
  3. Capture os logs de requisição/resposta (sem dados sensíveis)
  4. Descreva o comportamento esperado vs. obtido
  5. Envie para: [API Venda E-commerce] - CPF: XXX - NSU: XXX

Última atualização: 03 de Dezembro de 2025
Versão da API: 1.0