Respostas e callbacks do SDK
Gerencie callbacks de sucesso, erro, fechamento, redimensionamento, BIN, parcelamento e processamento de forma consistente em todos os SDKs da DEUNA.
Nesta página
Cada SDK da DEUNA retorna resultados de interface imediatos através de callbacks. O objeto de sucesso exato depende da experiência aberta, enquanto erros, ações de fechamento, detecção de BIN e seleção de parcelamento usam contratos menores.
Anatomia da resposta#
Matriz de callbacks#
| Callback | Carga útil | Contrato |
|---|---|---|
onSuccess(data) | Resultado da experiência | Pagamento e Próxima Ação geralmente retornam dados do pedido; Elements retorna dados de credenciais. Trate-os como dados do cliente até que sejam reconciliados. |
onError(error) | Erro de SDK normalizado | Leia type, metadata.codee metadata.messageErros de pagamento nativos também podem incluir order. |
onClosed(action, metadata?) | Razão de fechamento | Usado em Web userAction ou systemAction; SDKs nativos expõem sua ação de fechamento. O fechamento não é sucesso ou falha. |
onEventDispatch(event, payload) | Evento de ciclo de vida bruto | Apenas para análise e diagnóstico. O payload varia de acordo com a experiência. |
onResize({height, width}) | Dimensões do pixel | Redimensione hosts Web ou React Native integrados. |
onCardBinDetected(data) | Seleção de BIN | Web e React Native type {cardBin, cardBrand}; As chamadas de retorno nativas expõem dados em formato JSON. |
onInstallmentSelected(data) | Seleção de parcelas | Web e React Native type {cardBin, installmentPlanOptionId}; As chamadas de retorno nativas expõem dados em formato JSON. |
onPaymentProcessing() | Sem dados | Bloqueie a submissão duplicada enquanto o pagamento estiver em andamento. |
Tipos Web e React Native#
type ClosedAction = 'userAction' | 'systemAction';
type SdkError = {
type: string;
metadata: {
code: string;
message: string;
};
};
type CardBinDetected = {
cardBin: string;
cardBrand: string;
};
type InstallmentSelected = {
cardBin: string;
installmentPlanOptionId: string;
};
type Dimensions = {
height: number;
width: number;
};Gerencie os erros por categoria, mantendo o código do provedor ou da experiência para diagnóstico de suporte:
const callbacks = {
onSuccess: async (data) => {
setCheckoutState('verifying');
const verifiedOrder = await fetch(`/api/orders/${merchantOrderId}`).then(r => r.json());
renderFromAuthoritativeState(verifiedOrder);
},
onError: ({type, metadata}) => {
logSafeDiagnostic({type, code: metadata.code});
showRecoveryMessage(type, metadata.code);
},
onClosed: (action, metadata) => {
restorePaymentMethods();
if (metadata) logSafeDiagnostic({action, code: metadata.code});
},
};Tipos de erro nativos#
Os SDKs para iOS e Android normalizam os erros de pagamento em PaymentsError com type, opcional metadata, e um opcional order snapshot.
| Categoria | Android | iOS | Significado |
|---|---|---|---|
| Conectividade | NO_INTERNET_CONNECTION | noInternetConnection | O dispositivo não consegue alcançar o serviço. |
| Símbolo | INVALID_ORDER_TOKEN | invalidOrderToken | O token está vazio ou inválido para a experiência. |
| Inicialização | INITIALIZATION_FAILED | initializationFailed | O widget não pôde ser preparado ou apresentado. |
| Recuperação | ORDER_COULD_NOT_BE_RETRIEVED, ORDER_NOT_FOUND | orderCouldNotBeRetrieved, orderNotFound | A busca do pedido falhou. Reconcilie no backend antes de tentar novamente. |
| Pagamento | PAYMENT_ERROR | paymentError | A experiência de pagamento reportou um erro. Leia os metadados. |
| Navegação | — | errorWhileLoadingTheURL | O iOS não conseguiu carregar a URL do widget. |
| Cliente | — | userError | O iOS recebeu uma categoria de erro voltada para o cliente. |
| Fallback | UNKNOWN_ERROR | unknownError | Mantenha os diagnósticos seguros e mostre um caminho de recuperação genérico. |
callbacks.onError = { error ->
val code = error.metadata?.code ?: "UNKNOWN_ERROR"
logger.warn("DEUNA SDK error", mapOf("type" to error.type.name, "code" to code))
renderRecovery(error.type)
}callbacks.onError = { error in
let code = error.metadata?.code ?? "UNKNOWN_ERROR"
logger.warning("DEUNA SDK error: \(error.type) / \(code)")
renderRecovery(error.type)
}O sucesso é específico da experiência#
| Experiência | O que onSuccess representa | Próximo passo |
|---|---|---|
| Widget de pagamento | O widget completou seu fluxo de compra e retorna dados em formato de pedido. | Reconcilie o pedido no seu backend antes da entrega. |
| Próxima Ação | A ação necessária do cliente foi concluída e retorna dados em formato de pedido. | Recupere o mesmo pedido; não crie outro. |
| Elementos / Cofre de Pagamentos | Um fluxo de credenciais ou carteira foi concluído. | Envie apenas as credenciais ou resultados documentados para o seu fluxo de backend. |
| Voucher | A apresentação ou ação suportada do voucher foi concluída. | Mostre as instruções, e aguarde o status de pagamento assíncrono. |
O modelo de pedido evolui independentemente do fluxo de chamadas de retorno do SDK. Use o endpoint da API de referência para o esquema do backend atual, em vez de copiar campos arbitrários de um payload do cliente.
Gerenciamento de redimensionamento integrado#
const host = document.querySelector('#deuna-widget');
await DeunaSDK.initPaymentWidget({
orderToken,
mode: 'target',
target: '#deuna-widget',
callbacks: {
onResize: ({height}) => {
host.style.height = `${Math.ceil(height)}px`;
},
onSuccess: verifyOrder,
onError: showRecovery,
},
});Garanta que o elemento iframe tenha uma altura mínima estável enquanto carrega, e depois... onResize Atualize-o. Em telas menores, evite uma largura fixa em pixels e permita que o host preencha toda a área da tela.
Verificação de segurança#
- As funções de callback devem ser idempotentes; os sinais de ciclo de vida podem ocorrer durante a navegação ou em tentativas.
- Desativar a submissão duplicada durante
onPaymentProcessinge enquantosubmit()está pendente. - Exibir cópias legíveis por humanos a partir de uma lista de permissão. Não expor mensagens brutas do provedor por padrão.
- Log
type, código de erro seguro, versão do SDK, ambiente e ID de correlação do comerciante – não credenciais ou dados de cartão. - Restaurar o foco quando um modal é fechado e anunciar erros por meio de uma área de notificação acessível.
- Verifique o estado atual do pedido após o encerramento ambíguo, tempo limite ou interrupção de rede.
Contratos de código aberto#
As estruturas de retorno são verificadas em relação ao estado atual. Interfaces de retorno web, Interfaces de callback React Native, Base de callback para iOSe Callbacks compartilhados para Android. Utilize a versão instalada pela sua aplicação quando um repositório… main A versão da ramificação é mais recente que a versão que você definiu como principal.