Pular para o conteúdo principal

Referência A55Pay SDK (V2)

Quick Reference

WhatReferência completa do A55Pay JavaScript SDK V2
WhyIntegre pagamentos com cartão, checkout hospedado e Apple Pay com o SDK no navegador
Reading Time25 min
DifficultyIntermediate
PrerequisitesAutenticação → Criar cobrança

O A55Pay JavaScript SDK V2 roda no navegador do comprador: coleta dados do cartão, executa Device Data Collection (DDC), trata autenticação 3DS, processa pagamentos e dispara callbacks. Dados brutos do cartão não passam pelos seus servidores.


Pré-requisitos

Antes de chamar qualquer método do SDK, seu backend deve criar uma cobrança sem dados de cartão. Passe o charge_uuid retornado para o frontend.

Criar cobrança →

Para Apple Pay, crie uma cobrança com type_charge: "applepay". Para checkout hospedado, use Criar checkout e passe o checkout_uuid para A55Pay.open().


Instalação

Versão mais recente:

<script src="https://cdn.jsdelivr.net/npm/a55pay-sdk@latest/dist/a55pay-sdk.min.js"></script>

Versão fixa (recomendada para produção):

<script src="https://cdn.jsdelivr.net/npm/a55pay-sdk@4.0.8/dist/a55pay-sdk.min.js"></script>

Após carregar, o SDK fica disponível globalmente como window.A55Pay.

Fixar versão

Fixe uma versão específica em produção (ex: a55pay-sdk@4.0.8) para comportamento reproduzível entre deploys.


Propriedades

A55Pay.VERSION

Retorna a versão atual do SDK.

console.log(A55Pay.VERSION); // "4.0.8"

Métodos

A55Pay.payV2(config)

Pagamento com cartão de crédito/débito com coleta automática de device info, autenticação CyberSource e suporte a 3DS.

Parâmetros

CampoTipoObrigatórioDescrição
charge_uuidstringSimUUID da charge criada via API A55
userDataobjectSimDados do pagador e cartão (ver abaixo)
onSuccessfunctionNãoCallback de sucesso
onErrorfunctionNãoCallback de erro
onReadyfunctionNãoDispara quando o SDK está pronto para processar

Campos de userData

CampoTipoObrigatórioDescrição
payer_namestringSimNome completo do pagador
payer_emailstringSimE-mail do pagador
payer_tax_idstringNãoCPF/CNPJ do pagador
cell_phonestringNãoTelefone celular
holder_namestringSimNome impresso no cartão
numberstringSimNúmero do cartão
expiry_monthstringSimMês de validade (ex: "12")
expiry_yearstringSimAno de validade (ex: "2028")
ccvstringCondicionalCVV do cartão (obrigatório se não tiver card_cryptogram)
card_tokenstringNãoToken de cartão salvo
card_cryptogramstringCondicionalCriptograma (obrigatório se não tiver ccv)
postal_codestringSimCEP
streetstringSimRua
address_numberstringNãoNúmero (default: "n/d")
complementstringNãoComplemento
neighborhoodstringNãoBairro (default: "n/d")
citystringSimCidade
statestringSimEstado (UF)
countrystringSimPaís (ISO alpha-2, ex: "BR")
shipping_postal_codestringNãoCEP de entrega (usa billing se omitido)
shipping_streetstringNãoRua de entrega
shipping_address_numberstringNãoNúmero de entrega
shipping_complementstringNãoComplemento de entrega
shipping_neighborhoodstringNãoBairro de entrega
shipping_citystringNãoCidade de entrega
shipping_statestringNãoEstado de entrega
shipping_countrystringNãoPaís de entrega

Exemplo

<script src="https://cdn.jsdelivr.net/npm/a55pay-sdk@latest/dist/a55pay-sdk.min.js"></script>
<script>
document.getElementById('pay-btn').addEventListener('click', function() {
A55Pay.payV2({
charge_uuid: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
userData: {
payer_name: 'Joao da Silva',
payer_email: 'joao@email.com',
payer_tax_id: '12345678900',
cell_phone: '11999998888',
holder_name: 'JOAO DA SILVA',
number: '4111 1111 1111 1111',
expiry_month: '12',
expiry_year: '2028',
ccv: '123',
postal_code: '01310-100',
street: 'Av Paulista',
address_number: '1000',
complement: 'Sala 1',
neighborhood: 'Bela Vista',
city: 'Sao Paulo',
state: 'SP',
country: 'BR'
},
onReady: function() {
console.log('SDK pronto para processar');
},
onSuccess: function(result) {
console.log('Pagamento aprovado:', result);
// result.status = 'confirmed' | 'paid' | 'pending'
// result.charge_uuid
// result.data (dados completos da charge)
// result.threeds_completed (true se 3DS foi completado)
},
onError: function(error) {
console.error('Erro no pagamento:', error.message);
}
});
});
</script>

Fluxo interno


A55Pay.authentication(config)

Autenticação standalone via CyberSource Device Data Collection (DDC). Usado internamente pelo payV2, mas pode ser chamado separadamente.

Parâmetros

CampoTipoObrigatórioDescrição
transactionReferencestringSimUUID da charge
cardBrandstringSimBandeira do cartão (ver valores)
cardExpiryMonthstringSimMês de validade
cardExpiryYearstringSimAno de validade
cardNumberstringSimNúmero do cartão (sem espaços)
onSuccessfunctionNãoCallback de sucesso
onErrorfunctionNãoCallback de erro

Valores válidos para cardBrand: Visa, MasterCard, AmericanExpress, Discover, JCB, DinersClub, Hipercard, Elo

Exemplo

A55Pay.authentication({
transactionReference: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
cardBrand: 'Visa',
cardExpiryMonth: '12',
cardExpiryYear: '2028',
cardNumber: '4111111111111111',
onSuccess: function(result) {
console.log('Session ID:', result.sessionId);
console.log('Reference ID:', result.referenceId);
// result.accessToken
// result.deviceDataCollection
},
onError: function(error) {
console.error('Autenticação falhou:', error.message);
}
});

A55Pay.getDeviceId()

Retorna o device ID atual gerado via ThreatMetrix. Gerado automaticamente ao carregar o SDK.

var deviceId = A55Pay.getDeviceId();
console.log(deviceId); // "a1b2c3d4-e5f6-4g7h-8i9j-k0l1m2n3o4p5"

A55Pay.regenerateDeviceId()

Força a geração de um novo device ID e recarrega o script ThreatMetrix.

var newDeviceId = A55Pay.regenerateDeviceId();
console.log('Novo device ID:', newDeviceId);

A55Pay.open(config)

Abre o checkout A55 (v2) em iframe modal ou embed com comunicação via postMessage.

Parâmetros

CampoTipoObrigatórioDescrição
checkoutUuidstringSimUUID do checkout
display'modal' | 'embed'NãoModo de exibição (default: 'modal')
containerIdstringNãoID do elemento HTML para embed (criado auto se ausente)
onEventfunctionNãoCallback para eventos genéricos do checkout
onSuccessfunctionNãoDispara quando pagamento é confirmado
onClosefunctionNãoDispara quando checkout é fechado
onErrorfunctionNãoCallback de erro

Retorno

Retorna um objeto com método close() para fechar o checkout programaticamente.

Exemplo — Modal

var instance = A55Pay.open({
checkoutUuid: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
display: 'modal',
onSuccess: function(data) {
console.log('Pagamento confirmado:', data);
// data.status = 'paid' | 'confirmed'
// data.chargeUuid
},
onError: function(err) {
console.error('Erro:', err.message);
},
onClose: function() {
console.log('Checkout fechado');
},
onEvent: function(event) {
console.log('Evento recebido:', event);
}
});

// Fechar programaticamente:
// instance.close();

Exemplo — Embed

<div id="meu-checkout" style="min-height:600px;"></div>

<script>
A55Pay.open({
checkoutUuid: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
display: 'embed',
containerId: 'meu-checkout',
onSuccess: function(data) {
console.log('Pagamento confirmado:', data);
},
onClose: function() {
console.log('Checkout fechado');
}
});
</script>

A55Pay.isApplePayAvailable()

Verifica sincronamente se Apple Pay está disponível no browser/dispositivo.

if (A55Pay.isApplePayAvailable()) {
document.getElementById('apple-pay-btn').style.display = 'block';
} else {
console.log('Apple Pay não disponível');
}

A55Pay.startApplePay(config)

Inicia pagamento via Apple Pay. Deve ser chamado dentro de um handler de clique (user gesture obrigatório).

Ativação necessária

Apple Pay exige cadastro prévio do merchant na conta Apple Pay da A55 e hospedagem do arquivo de verificação de domínio. Contate tech.services@a55.tech antes de integrar.

Parâmetros

CampoTipoObrigatórioDescrição
chargeUuidstringSimUUID da charge criada com type_charge: "applepay"
countryCodestringSimCódigo do país ISO 3166-1 alpha-2 (ex: 'BR')
amountstringSimValor do pagamento (ex: '150.00')
currencyCodestringNãoCódigo da moeda ISO 4217 (default: 'BRL')
merchantDomainstringNãoDomínio do merchant (default: 'pay.a55.tech')
displayNamestringNãoNome exibido no payment sheet (default: 'A55Pay')
supportedNetworksstring[]NãoRedes suportadas (default: ['visa', 'masterCard', 'elo', 'amex'])
onSuccessfunctionNãoCallback de sucesso
onErrorfunctionNãoCallback de erro
onClosefunctionNãoDispara quando usuário cancela o payment sheet

Exemplo

<button id="apple-pay-btn" style="display:none;">Pagar com Apple Pay</button>

<script src="https://cdn.jsdelivr.net/npm/a55pay-sdk@latest/dist/a55pay-sdk.min.js"></script>
<script>
var btn = document.getElementById('apple-pay-btn');

if (A55Pay.isApplePayAvailable()) {
btn.style.display = 'inline-block';
}

btn.addEventListener('click', function() {
A55Pay.startApplePay({
chargeUuid: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
countryCode: 'BR',
amount: '150.00',
currencyCode: 'BRL',
displayName: 'Minha Loja',
supportedNetworks: ['visa', 'masterCard', 'elo', 'amex'],
onSuccess: function(result) {
console.log('Pagamento Apple Pay aprovado:', result);
},
onError: function(error) {
console.error('Erro Apple Pay:', error.message);
},
onClose: function() {
console.log('Usuário cancelou o Apple Pay');
}
});
});
</script>

Fluxo Apple Pay

Requisitos Apple Pay

  • HTTPS obrigatório (não funciona em HTTP)
  • Safari (macOS/iOS) ou browsers iOS com WebKit
  • Cartão configurado na Apple Wallet
  • Domínio verificado no Apple Developer Portal

Documentação completa Apple Pay →


Exemplo completo (página HTML)

<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Exemplo A55Pay SDK</title>
</head>
<body>
<h1>Pagamento com A55Pay</h1>

<form id="payment-form">
<input type="text" id="holder" placeholder="Nome no cartão" />
<input type="text" id="card-number" placeholder="Número do cartão" />
<input type="text" id="expiry-month" placeholder="MM" />
<input type="text" id="expiry-year" placeholder="AAAA" />
<input type="text" id="cvv" placeholder="CVV" />
<input type="text" id="email" placeholder="Email" />
<input type="text" id="name" placeholder="Nome completo" />
<button type="submit">Pagar com Cartão</button>
</form>

<button id="apple-pay-btn" style="display:none;background:#000;color:#fff;padding:12px 24px;border:none;border-radius:8px;font-size:16px;cursor:pointer;">
Pagar com Apple Pay
</button>

<button id="open-checkout-btn">Abrir Checkout A55</button>

<div id="resultado"></div>

<script src="https://cdn.jsdelivr.net/npm/a55pay-sdk@latest/dist/a55pay-sdk.min.js"></script>
<script>
var CHARGE_UUID = 'SEU_CHARGE_UUID_AQUI';
var resultDiv = document.getElementById('resultado');

function showResult(msg) {
resultDiv.textContent = msg;
}

document.getElementById('payment-form').addEventListener('submit', function(e) {
e.preventDefault();

A55Pay.payV2({
charge_uuid: CHARGE_UUID,
userData: {
payer_name: document.getElementById('name').value,
payer_email: document.getElementById('email').value,
holder_name: document.getElementById('holder').value,
number: document.getElementById('card-number').value,
expiry_month: document.getElementById('expiry-month').value,
expiry_year: document.getElementById('expiry-year').value,
ccv: document.getElementById('cvv').value,
postal_code: '01310100',
street: 'Av Paulista',
city: 'Sao Paulo',
state: 'SP',
country: 'BR'
},
onSuccess: function(result) {
showResult('Pagamento aprovado! Status: ' + result.status);
},
onError: function(error) {
showResult('Erro: ' + error.message);
}
});
});

if (A55Pay.isApplePayAvailable()) {
document.getElementById('apple-pay-btn').style.display = 'inline-block';
}

document.getElementById('apple-pay-btn').addEventListener('click', function() {
A55Pay.startApplePay({
chargeUuid: CHARGE_UUID,
countryCode: 'BR',
amount: '100.00',
currencyCode: 'BRL',
displayName: 'Minha Loja',
onSuccess: function(result) {
showResult('Apple Pay aprovado!');
},
onError: function(error) {
showResult('Erro Apple Pay: ' + error.message);
},
onClose: function() {
showResult('Apple Pay cancelado');
}
});
});

document.getElementById('open-checkout-btn').addEventListener('click', function() {
A55Pay.open({
checkoutUuid: CHARGE_UUID,
display: 'modal',
onSuccess: function(data) {
showResult('Checkout confirmado! Status: ' + data.status);
},
onError: function(err) {
showResult('Erro checkout: ' + err.message);
},
onClose: function() {
showResult('Checkout fechado');
}
});
});

console.log('A55Pay SDK v' + A55Pay.VERSION);
console.log('Device ID:', A55Pay.getDeviceId());
</script>
</body>
</html>

Erros comuns

ErroCausaSolução
Missing charge_uuid or userDataParâmetros obrigatórios ausentesVerificar que charge_uuid e userData estão preenchidos
payer_name and payer_email are requiredDados do pagador faltandoIncluir payer_name e payer_email em userData
Either ccv or card_cryptogram is requiredSem método de autenticação do cartãoEnviar ccv ou card_cryptogram
Apple Pay não está disponívelBrowser sem suporteUsar Safari em macOS/iOS com cartão na Wallet
Must create ApplePaySession from user gesturestartApplePay chamado fora de click handlerChamar apenas dentro de addEventListener('click', ...)
countryCode inválidoFormato erradoUsar ISO 3166-1 alpha-2 maiúsculo (ex: "BR")
amount inválidoValor não numéricoEnviar string numérica (ex: "150.00")
Uma sessão Apple Pay já está em andamentoDuplo cliqueDesabilitar botão durante processamento

Notas de segurança

  • O SDK não armazena dados de cartão — são enviados diretamente ao backend A55
  • Device ID é gerado via ThreatMetrix para detecção de fraude
  • 3DS 2.0 é tratado automaticamente via CyberSource
  • Tokens Apple Pay são criptografados de ponta a ponta
  • Todas as comunicações usam HTTPS
  • postMessage do checkout filtra por origin (pay.a55.tech)
Logging

Nunca registre PAN, CVV ou criptogramas nos callbacks. O SDK trata dados de cartão no contexto do navegador — mantenha-os lá.


Testar com cartões sandbox

Card NumberBrandScenarioExpected Status
4111 1111 1111 1111VisaPagamento aprovadoconfirmed
5500 0000 0000 0004MastercardPagamento aprovadoconfirmed
4000 0000 0000 0002VisaCartão recusadodeclined
4000 0000 0000 0101VisaDesafio 3DS obrigatórioconfirmed
4000 0000 0000 0069VisaErro de processamentoerror