Elementos e armazenamento de cartão para Web
Integre os Elementos DEUNA para armazenamento de cartões, Click to Pay, Apple Pay e Google Pay em experiências web responsivas.
Nesta página
initElements Inicia uma experiência de credenciais focada, sem a necessidade do Payment Widget. Utilize-o para armazenar um cartão, iniciar o Click to Pay ou lançar uma carteira nativa configurada.
Selecione o tipo de Elemento#
| Tipo | Objetivo | Contexto de identidade ou de pedido |
|---|---|---|
vault | Tokenize ou selecione um cartão armazenado. Esta é a opção padrão quando types é omitido. | userToken para um usuário autenticado, ou userInfo; um orderToken pode adicionar o valor e o contexto de parcelamento. |
click_to_pay | Inicie a experiência do Click to Pay. | A identidade do cliente e a configuração do comerciante são necessárias. |
APPLE_PAY | Lance o Apple Pay após a verificação de disponibilidade. | Contexto do pedido e credenciais da carteira configurada. |
GOOGLE_PAY | Lance o Google Pay após a verificação de disponibilidade. | Contexto do pedido e credenciais da carteira configurada. |
Armazene um cartão#
await DeunaSDK.initElements({
orderToken,
userInfo: {
firstName: 'Ada',
lastName: 'Lovelace',
email: 'ada@example.com',
},
types: [{name: 'vault'}],
callbacks: {
onSuccess: (credential) => useCredentialResult(credential),
onError: ({type, metadata}) => showRecovery(type, metadata.code),
onClosed: () => restorePaymentMethods(),
onCardBinDetected: ({cardBin, cardBrand}) => updateCardOffers(cardBin, cardBrand),
onInstallmentSelected: ({installmentPlanOptionId}) => rememberPlan(installmentPlanOptionId),
},
});Fluxo da experiência#
Carregue os Elementos#
await DeunaSDK.initialize({
publicApiKey: 'YOUR_PUBLIC_API_KEY',
env: 'sandbox',
preloadWidgets: [
{
widget: 'elements',
params: {
types: [{name: 'vault'}],
language: 'en',
callbacks,
},
},
],
});
// Add the order or user context and reveal the prepared experience.
await DeunaSDK.initElements({orderToken, userToken});Os parâmetros de inicialização e a chamada subsequente são combinados pelo SDK. Coloque a configuração estável na entrada de pré-carregamento e os tokens mais recentes em initElements.
Parâmetros#
| Parâmetro | Obrigatório | Objetivo |
|---|---|---|
types | Não | Seleção da experiência; por padrão, armazena. |
orderToken | Dependente do fluxo | Contexto do pedido para valor, parcelamento, pagamento ou lançamento da carteira. |
userToken | Dependente do fluxo | Contexto do usuário DEUNA autenticado. |
userInfo | Dependente do fluxo | Identidade parcial do cliente: firstName, lastNamee email. |
callbacks | Não, recomendado | Sucesso, erro, fechar, evento, redimensionar, BIN e tratamento de parcelamento. |
mode + target | Não | Apresentação do alvo integrada, em vez da janela padrão. |
walletConfig | Avançado | Configuração explícita do Apple Pay ou Google Pay aprovada. |
behavior | Não | Suporte para tokenização, compra, divisão de cartão e comportamento de visibilidade. |
language, styleFile, widgetExperience | Não | Localização e personalização da aparência. |
domain | Não | Sobrescrevo do host controlado; omitir em integrações de produção padrão. |
Tokenize ou compra#
O comportamento dos elementos de cartão suporta tokenize ou purchase:
behavior: {
paymentMethods: {
creditCard: {
flow: 'tokenize',
},
},
}Uso tokenize quando o fluxo do comerciante só precisa de um credencial reutilizável. Use purchase apenas com o pedido e a configuração do comerciante necessários. Deixe o backend responsável por decidir como o credencial pode ser usado.
Carteiras nativas#
Verifique a disponibilidade antes de renderizar o botão, e inicie o tipo correspondente diretamente a partir da ação do cliente:
const wallets = await DeunaSDK.getWalletsAvailable({orderToken, userInfo});
applePayButton.hidden = !wallets.includes('APPLE_PAY');
applePayButton.addEventListener('click', () => {
DeunaSDK.initElements({
orderToken,
userInfo,
types: [{name: 'APPLE_PAY'}],
callbacks,
});
});Veja Disponibilidade da carteira digital para valores da plataforma, cache e solução de problemas.
Modos integrados e controlados#
Uso mode: 'target', targete onResize para uma experiência integrada. Quando a sua página é responsável pela ação principal, defina hidePayButton: true, chame isValid()e aguarde submit(). Desative o botão externo enquanto a submissão estiver pendente.
await DeunaSDK.initElements({
orderToken,
types: [{name: 'vault'}],
mode: 'target',
target: '#credential-entry',
hidePayButton: true,
callbacks: {
onResize: ({height}) => {
document.querySelector('#credential-entry').style.height = `${height}px`;
},
onSuccess: useCredentialResult,
onError: showRecovery,
},
});Migrar campos de segurança legados#
A documentação anterior descreveu modularPaymentCredentialsStorage, mountPaymentCredentialStorage, e um sdk.deuna.io Pacote de campos seguros. Esses nomes não estão presentes nos tipos públicos ou na implementação atuais do Web SDK auditado. Não copie os trechos de inicialização ou montagem de campos legados em uma nova integração.
A superfície de credenciais mantida é hospedada pela Elements. DeunaSDK.initElements:
| Responsabilidade tradicional | Abordagem mantida |
|---|---|
Carga sdk.deuna.io/.../main.min.js | Carregar o módulo atual cdn.deuna.io/web-sdk/.../index.js do Começar |
Inicializar uma Deuna ou deunaSDK.init instância | Ligar DeunaSDK.initialize com a chave API pública e o ambiente especificado |
| Implement campos independentes para PAN, data de validade ou CVV | Hospedar initElements({types: [{name: 'vault'}]}) em modo de janela pop-up ou incorporado |
| Possuir um botão de envio do comerciante | Uso hidePayButton, isValid()e submit() no modo controlado suportado |
| Processar um evento de credenciais legado | Uso onSuccess, onError, onClosede callbacks dedicados para BIN/parcelamento |
| Reutilizar uma sessão de checkout legado | Passar as informações orderToken, userToken, ou userInfo necessárias para o fluxo selecionado |
Os elementos hospedados possuem controle sobre a interface de entrada sensível. O SDK público atual não expõe uma API direta para anexar cada campo de cartão a nós DOM independentes do merchant. Se o seu escopo PCI ou design de produto aprovado exigir controle independente sobre os campos, interrompa a migração e confirme uma arquitetura suportada pela DEUNA antes da implementação.
Durante a migração, execute as versões antiga e nova apenas em grupos de testes separados e controlados. Nunca inicialize ambas simultaneamente ou tente copiar valores de estruturas seguras legadas para os Elementos.
Segurança e operações#
- Não leia, espelhe ou registre campos de cartão exibidos pelos elementos.
- Envie o resultado apenas para a operação de backend do comerciante que o necessita.
- Expire as sessões e o estado do SDK do cliente quando o cliente faz logout.
- Reconcilie um pedido após um fluxo interrompido de compra.
- Trate
onSuccesscomo um resultado do cliente, não como permissão para usar um credencial fora do consentimento do cliente e do contrato com o comerciante.