on, tokenize e destroy.
on(eventType, function)
O método on permite escutar eventos e executar um callback quando um determinado evento ocorre. Ele retorna uma função que remove o callback registrado:Cada instância de
MalgaTokenization tem seus próprios eventos. Ao tokenizar mais de um cartão, registre o on na instância de cada cartão. Nos eventos, field é o container configurado no campo, por exemplo card-number-2.Eventos disponíveis
cardTypeChanged
Disparado quando o valor do campo de número do cartão é alterado.
Objeto de retorno:
validity
Disparado quando há uma alteração nos campos e a validação padrão (defaultValidation) está ativada.
Objeto de retorno:
focus e blur
Eventos disparados quando um campo recebe ou perde foco.
Objeto de retorno:
loading
Disparado quando a tokenização começa (isLoading: true) e quando termina (isLoading: false), com sucesso, com erro ou por tempo esgotado. Útil para desabilitar o botão de envio enquanto o cartão é tokenizado.
Objeto de retorno:
tokenize()
Método responsável por enviar os dados do cartão para tokenização. Com mais de um cartão na página, chametokenize() na instância de cada cartão. Cada instância retorna o resultado do próprio cartão, mesmo quando as chamadas são executadas ao mesmo tempo.
Se o iframe do número do cartão não responder em 30 segundos, tokenize() retorna tokenId vazio e um error com type: 'timeout', e o evento loading volta para false.
A partir da versão 5.0.0, tokenize() confere antes se todos os campos configurados em config.fields foram preenchidos. Se faltar algum, o método retorna na hora, sem enviar nada à API e sem disparar o evento loading, com tokenId vazio e um error com type: 'invalid_request_error'. O details lista os campos que faltam, por exemplo ['cardCvv', 'cardExpirationDate']. Campos que não estão em config.fields não são exigidos.
destroy()
Desmonta a instância deMalgaTokenization. O método remove os iframes dos containers, o listener de mensagens e os callbacks registrados com on, apaga os dados do cartão coletados e libera os containers para uma nova instância.
Disponível a partir da versão 5.0.0 do
@malga/tokenization.destroy() sempre que o checkout sair da tela. Em aplicações de página única, como React, Vue e Angular, montar a tela de novo sem chamar destroy() faz o construtor lançar ContainerInUseError, porque a instância anterior ainda ocupa os containers.
Depois de destroy(), tokenize() lança um erro. Chamar destroy() mais de uma vez não tem efeito.
Exemplo de uso
Crie a instância quando o componente do checkout é montado e chame destroy() quando ele é desmontado: ao trocar de rota, ao voltar para o carrinho ou ao entrar de novo na tela de pagamento. Assim, cada montagem tem a sua própria instância, e a anterior já liberou os containers.
checkout-config.ts
destroy() no ponto em que o seu código remove o formulário de pagamento da página, antes de criar outra instância com os mesmos containers.
Containers em uso
Cadacontainer pertence a uma única instância enquanto ela não for destruída. O construtor lança um erro, antes de renderizar qualquer campo, quando:
- o
containerjá é usado por outra instância ativa:ContainerInUseError; - o mesmo
containeraparece em dois campos da mesma configuração:DuplicatedContainerError.
container e podem ser importados do pacote:
Exemplos de tokenização
Veja o código completo