Widget per voucher
Presentare il voucher DEUNA e le istruzioni di pagamento in contanti su Web, iOS, Android e React Native, quindi confermare il pagamento in modo asincrono.
In questa pagina
Il widget del voucher presenta le istruzioni o il riferimento generato per un voucher o un metodo di pagamento in contanti supportato. Utilizza un token di ordine esistente; non crea o paga un secondo ordine.
Ciclo di vita del voucher#
order_token to the platform SDK.Apri il 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"
)Parametri#
| Parametro | Piattaforme | Obbligatorio | Oggetto |
|---|---|---|---|
orderToken | Tutti | Sì. | Token per l'ordine esistente idoneo al voucher. |
callbacks | Tutti | Sì. | Successo, errore, chiusura, evento e gestori di elaborazione dei pagamenti supportati. |
language | Tutti | No. | Lingua supportata del widget. I tipi di widget Web accettano attualmente en, eso pt. |
mode | Reazione nativo | Sì. | modal o la modalità di renderer incorporato supportata. |
fraudCredentials | Native + React Native | No. | Credenziali del fornitore solo quando il flusso di frodi configurato lo richiede. |
customUserAgent | iOS + Android | No. | User agent WebView specifico dell'app per un requisito di integrazione approvato. |
domain | Tutti | No. | Override dell'ambiente per test controllati; omettere nelle normali integrazioni di produzione. |
Completamento e stato del pagamento#
onSuccess significa che l'esperienza del voucher ha completato l'azione del cliente supportata. Il pagamento del voucher avviene comunemente in seguito, al di fuori dell'app. Mantenere l'ordine in stato di attesa nella propria interfaccia fino a quando il backend non osserva lo stato finale tramite un webhook verificato o un recupero API.
| Situazione | Messaggio del cliente | Azione del commerciante |
|---|---|---|
| Istruzioni visualizzate | "Utilizzare queste istruzioni per completare il pagamento." | Conservare l'ID dell'ordine del commerciante e attendere un cambiamento di stato. |
| Widget chiuso | "È possibile tornare a questo ordine in un secondo momento." | Non annullare o ricreare automaticamente. Effettuare prima la riconciliazione. |
| Errore di rete | "Non è stato possibile caricare il buono." | Offrire un tentativo con lo stesso token dell'ordine. |
| Buono pagato | "Pagamento confermato." | Completare solo dopo la verifica lato server. |
| Buono scaduto o rifiutato | Spiegare il passo successivo supportato. | Passare a uno stato terminale o riprovare tramite la risposta API. |
Ricevute e consegna file#
Una risposta di pagamento di riferimento può contenere un reference_processors Ogni voce di processore disponibile può fornire un codice a barre, la data di scadenza, il nome del processore e l'URL di un foglio di calcolo o PDF di ricevuta ospitato. Poiché questo campo è un array, l'esperienza di ricevute ospitate può presentare più ricevute quando il pagamento elaborato restituisce più riferimenti di processore.
Il processore determina quali campi sono presenti nella ricevuta. Non generare un URL PDF da un codice a barre o presumere che ogni metodo di riferimento disponga sia di formati HTML che PDF.
| Piattaforma | Scarica la prova di proprietà | Comportamento di integrazione |
|---|---|---|
| Web Web | Widget e browser ospitati | Il widget presenta le azioni disponibili per la ricevuta. Il contratto attuale di callback web non prevede un callback di file dedicato. |
| Reazione nativo | Aplicación del comerciante | onDownloadFile riceve {type, data}. type è url quando il processore fornisce un URL per la ricevuta, oppure base64 quando l'SDK ha acquisito la visualizzazione attuale del voucher. |
| Android | SDK nativo | L'SDK scarica l'URL fornito per la ricevuta o salva una copia di backup quando il widget emette l'azione di salvataggio. Testare il comportamento di memorizzazione e condivisione sulle versioni Android supportate. |
| iOS | SDK nativo | L'SDK scarica l'URL fornito per la ricevuta o cattura la visualizzazione corrente come fallback. Testare l'esperienza di salvataggio/condivisione risultante sulle versioni iOS supportate. |
Per React Native, utilizzare il discriminatore invece di presumere che il payload sia sempre un corpo di file:
import {DownloadType} from '@deuna/react-native-sdk';
const onDownloadFile = async ({type, data}) => {
if (type === DownloadType.URL) {
await openTrustedReceiptUrl(data);
return;
}
await saveBase64VoucherImage(data);
};Validare qualsiasi URL prima di aprirlo o recuperarlo, utilizzare HTTPS, conservare i file scaricati in una posizione appropriata e protetta o selezionata dall'utente, e non registrare il contenuto della ricevuta. Una ricevuta salvata è una prova a favore del cliente; non è una conferma definitiva di pagamento.
Mobile e accessibilità#
- Presentare il buono da uno schermo visibile, non da un callback di sfondo.
- Mantenere raggiungibili le azioni di download, copia e chiusura con un testo del 200%.
- Su React Native, richiedere solo le capacità di archiviazione o condivisione necessarie per la sua implementazione di salvataggio.
- Ripristinare il focus sul controllo che ha aperto il modale e annunciare gli errori di caricamento tramite l'API di accessibilità della piattaforma.
- Testare con nomi di commercianti lunghi, istruzioni localizzate lunghe e dispositivi stretti.
Risoluzione dei problemi#
Il widget segnala un token di ordine non valido
Verificare che la stringa sia non vuota, appartenga all'ambiente selezionato e provenga dallo stesso ordine che si intende visualizzare. Non scambiare una chiave API privata o il corpo dell'ordine grezzo con il client.
Non sono presenti istruzioni per i coupon.
Verificare che l'ordine e il metodo di pagamento siano configurati per un flusso di coupon. Un ordine standard con carta non diventa un ordine con coupon semplicemente aprendo questo widget.
La callback di successo è stata attivata, ma l'ordine è ancora in attesa.
Questo è previsto per i metodi di pagamento in contanti e con coupon. La callback ha completato l'azione nell'interfaccia utente, non il pagamento. Continuare ad ascoltare lo stato backend verificato.