Widget de voucher
Apresente o voucher da DEUNA e as instruções de pagamento em dinheiro na Web, iOS, Android e React Native, e confirme o pagamento de forma assíncrona.
Nesta página
O widget do voucher apresenta as instruções ou referência geradas para um voucher ou método de pagamento em dinheiro suportado. Ele usa um token de pedido existente; não cria ou paga um segundo pedido.
Ciclo de vida do voucher#
order_token to the platform SDK.Abrir o widget#
await DeunaSDK.initVoucherWidget({
orderToken,
language: 'en',
callbacks: {
onSuccess: (data) => showVoucherInstructions(data),
onError: (error) => showRecovery(error),
onClosed: () => showPaymentMethods(),
onPaymentProcessing: () => disableDuplicateActions(),
},
});await deunaSDK.initVoucherWidget({
orderToken,
mode: 'modal',
language: 'en',
callbacks: {
onSuccess: showVoucherInstructions,
onError: showRecovery,
onClosed: showPaymentMethods,
onDownloadFile: ({type, data}) => saveVoucher({type, data}),
},
});let callbacks = VoucherCallbacks()
callbacks.onSuccess = { data in showVoucherInstructions(data) }
callbacks.onError = { error in showRecovery(error) }
callbacks.onClosed = { _ in showPaymentMethods() }
deunaSDK.initVoucher(
orderToken: orderToken,
callbacks: callbacks,
language: "en"
)val callbacks = VoucherCallbacks().apply {
onSuccess = { data -> showVoucherInstructions(data) }
onError = { error -> showRecovery(error) }
onClosed = { showPaymentMethods() }
}
deunaSDK.initVoucherWidget(
context = this,
orderToken = orderToken,
callbacks = callbacks,
language = "en"
)Parâmetros#
| Parâmetro | Plataformas | Obrigatório | Objetivo |
|---|---|---|---|
orderToken | Todos | Sim | Token para o pedido existente elegível para voucher. |
callbacks | Todos | Sim | Sucesso, erro, fechar, evento e manipuladores de pagamento suportados. |
language | Todos | Não | Linguagem do widget suportada. Os tipos de Web atualmente aceitam en, es, ou pt. |
mode | Reagir nativo | Sim | modal ou o modo de renderizador embutido suportado. |
fraudCredentials | Nativo + React Native | Não | Credenciais do provedor apenas quando o fluxo de fraude configurado exige. |
customUserAgent | iOS + Android | Não | User agent do WebView específico da aplicação para uma necessidade de integração aprovada. |
domain | Todos | Não | Override de ambiente para testes controlados; omitir em integrações de produção normais. |
Conclusão e estado de pagamento#
onSuccess significa que a experiência do voucher completou sua ação do cliente suportada. O pagamento do voucher geralmente ocorre mais tarde, fora do aplicativo. Mantenha o pedido pendente na sua interface até que seu backend observe o estado final por meio de um webhook verificado ou uma recuperação de API.
| Situação | Mensagem do cliente | Ação do comerciante |
|---|---|---|
| Instruções exibidas | "Utilize estas instruções para concluir o pagamento." | Persistir o ID do pedido do comerciante e aguardar uma mudança de estado. |
| Widget fechado | "Você pode retornar a este pedido mais tarde." | Não cancele ou recrie automaticamente. Reconcilie primeiro. |
| Erro de rede | "Não foi possível carregar o voucher." | Ofereça uma tentativa com o mesmo token de pedido. |
| Voucher pago | "Pagamento confirmado." | Realize somente após a verificação no backend. |
| Voucher expirado ou rejeitado | Explique o próximo passo suportado. | Mova para um estado de terminal ou tentativa, conforme a resposta da API. |
Recebimentos e entrega de arquivos#
A resposta de pagamento de referência pode conter um reference_processors Um array. Cada entrada de processador disponível pode fornecer um código de barras, data de validade, nome do processador e URL de recibo HTML ou PDF hospedado. Como este campo é um array, a experiência de recibo hospedada pode apresentar mais de um recibo quando o pagamento processado retorna múltiplas referências de processadores.
O processador determina quais campos da fatura estão presentes. Não crie uma URL de PDF a partir de um código de barras ou assuma que todos os métodos de referência possuem formatos HTML e PDF.
| Plataforma | Baixar comprovante | Comportamento de integração |
|---|---|---|
| Rede | Widget e navegador hospedados | O widget apresenta a ação de comprovante disponível. O contrato atual de callback da Web não possui um callback de arquivo dedicado. |
| Reagir nativo | Aplicação do comerciante | onDownloadFile recebe {type, data}. type é url quando o processador fornece uma URL de comprovante, ou base64 quando o SDK captura a visualização atual do voucher. |
| Android | SDK nativo | O SDK baixa a URL de comprovante fornecida ou salva uma versão de fallback quando o widget emite a ação de salvar. Teste o comportamento de armazenamento e compartilhamento nas versões Android suportadas. |
| iOS | SDK nativo | O SDK baixa a URL de comprovante fornecida ou captura a visualização atual como fallback. Teste a experiência resultante de salvar/compartilhar nas versões iOS suportadas. |
Para React Native, verifique o discriminador em vez de assumir que o payload é sempre um corpo de arquivo:
import {DownloadType} from '@deuna/react-native-sdk';
const onDownloadFile = async ({type, data}) => {
if (type === DownloadType.URL) {
await openTrustedReceiptUrl(data);
return;
}
await saveBase64VoucherImage(data);
};Valide qualquer URL antes de abri-la ou acessá-la, use HTTPS, mantenha os arquivos baixados em uma localização apropriada e protegida ou selecionada pelo usuário, e não registre o conteúdo da fatura. Um comprovante salvo é evidência para o cliente; não é uma confirmação de pagamento autoritativa.
Mobile e acessibilidade#
- Apresente o Voucher a partir de uma tela visível, e não de um callback de background.
- Mantenha as ações de download, copiar e fechar acessíveis em tamanho de texto de 200%.
- Em React Native, solicite apenas a capacidade de armazenamento ou compartilhamento necessária para sua implementação de salvamento.
- Retorne o foco ao controle que abriu o modal e anuncie erros de carregamento através da API de acessibilidade da plataforma.
- Teste a referência com nomes de comerciantes longos, instruções localizadas longas e dispositivos estreitos.
Solução de problemas#
O widget reporta um token de pedido inválido
Verifique se a string é não vazia, pertence ao ambiente selecionado e vem do mesmo pedido que você pretende exibir. Não troque uma chave de API privada ou o corpo do pedido bruto com o cliente.
Não há instruções para o voucher
Verifique se a ordem e o método de pagamento estão configurados para um fluxo de voucher. Uma ordem de cartão genérica não se transforma em uma ordem de voucher ao abrir este widget.
A chamada de retorno de sucesso foi disparada, mas a ordem ainda está pendente
Isso pode ocorrer para métodos de pagamento em dinheiro e voucher. A chamada de retorno completou a ação na interface do usuário, não o pagamento. Continue monitorando o estado assíncrono do backend.