Pular para o conteúdo principal
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#

01 · backend
Criar o pedido
Crie um pedido elegível para o método de voucher configurado.
02 · app
Abrir Voucher
Passar o token order_token to the platform SDK.
03 · customer
Salvar as instruções
O cliente visualiza, copia ou baixa a referência suportada.
04 · backend
Confirmar pagamento
Aguarde o status final do pedido autorizado antes de prosseguir.
Diagrama de sequência
1Merchant app2DEUNA API3Voucher widget4CustomerCreate eligible orderorder_tokenOpen with the same tokenVoucher / referenceinstructionsCopy or downloadVerified webhook orretrieved state
Comerciante ou clienteDEUNA

Abrir o widget#

await DeunaSDK.initVoucherWidget({
  orderToken,
  language: 'en',
  callbacks: {
    onSuccess: (data) => showVoucherInstructions(data),
    onError: (error) => showRecovery(error),
    onClosed: () => showPaymentMethods(),
    onPaymentProcessing: () => disableDuplicateActions(),
  },
});

Parâmetros#

ParâmetroPlataformasObrigatórioObjetivo
orderTokenTodosSimToken para o pedido existente elegível para voucher.
callbacksTodosSimSucesso, erro, fechar, evento e manipuladores de pagamento suportados.
languageTodosNãoLinguagem do widget suportada. Os tipos de Web atualmente aceitam en, es, ou pt.
modeReagir nativoSimmodal ou o modo de renderizador embutido suportado.
fraudCredentialsNativo + React NativeNãoCredenciais do provedor apenas quando o fluxo de fraude configurado exige.
customUserAgentiOS + AndroidNãoUser agent do WebView específico da aplicação para uma necessidade de integração aprovada.
domainTodosNãoOverride 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çãoMensagem do clienteAçã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 rejeitadoExplique 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.

Diagrama de fluxo
NoYes1Reference paymentresponse2reference_processorspresent?3Show the widget'ssupportedcontinuation4Present one or morereceipts5View processorinstructions6Open, save, or sharethe availablereceipt7Keep payment pendinguntil backendconfirmation
ResultadoProvedor ou processadorRevisão ou pendente

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.

PlataformaBaixar comprovanteComportamento de integração
RedeWidget e navegador hospedadosO 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 nativoAplicação do comercianteonDownloadFile 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.
AndroidSDK nativoO 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.
iOSSDK nativoO 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:

JavaScript
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álidoValidação do token

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 voucherRequisitos

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á pendenteEstado assíncrono esperado

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.