Aller au contenu principal
Sur cette page

Le widget de réduction présente les instructions ou la référence générée pour un bon de réduction ou une méthode de paiement en espèces prise en charge. Il utilise un jeton de commande existant ; il ne crée pas ou ne paie pas une deuxième commande.

Cycle de vie du bon de réduction#

01 · backend
Créer la commande
Créez une commande éligible à la méthode de bon de réduction configurée.
02 · app
Ouvrir le bon de réduction
Passer le jeton order_token to the platform SDK.
03 · customer
Enregistrer les instructions
Le client consulte, copie ou télécharge la référence prise en charge.
04 · backend
Confirmer le paiement
Attendre que l'état de commande asynchrone officiel soit confirmé avant de procéder au traitement.
Diagramme de séquence
1Merchant app2DEUNA API3Voucher widget4CustomerCreate eligible orderorder_tokenOpen with the same tokenVoucher / referenceinstructionsCopy or downloadVerified webhook orretrieved state
Marchand ou clientDEUNA

Ouvrir le widget#

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

Paramètres#

ParamètrePlateformesObligatoireObjectif
orderTokenTousOuiJeton pour la commande existante éligible au bon de réduction.
callbacksTousOuiSuccès, erreur, fermeture, événement et gestionnaires de paiement pris en charge.
languageTousNonLangue prise en charge du widget. Les types de widget Web acceptent actuellement en, es, ou pt.
modeRéagir à l'initiéOuimodal ou le mode d'intégration embarquée pris en charge.
fraudCredentialsNative + React NativeNonFournissez les informations d'identification du fournisseur uniquement lorsque le flux de fraude configuré l'exige.
customUserAgentiOS + AndroidNonAgent utilisateur WebView spécifique à l'application pour un besoin d'intégration approuvé.
domainTousNonParamètre d'environnement pour les tests contrôlés ; omettre dans les intégrations de production normales.

État de finalisation et de paiement#

onSuccess signifie que l'expérience du bon de réduction a terminé son action client prise en charge. Le règlement du bon de réduction se produit généralement plus tard, en dehors de l'application. Conservez la commande en attente dans votre interface jusqu'à ce que votre backend observe l'état final via un webhook vérifié ou une récupération d'API.

SituationMessage du clientAction du commerçant
Instructions affichées"Utilisez ces instructions pour finaliser le paiement."Conserver l'ID de la commande du commerçant et attendre un changement d'état.
Widget fermé"Vous pouvez revenir à cette commande ultérieurement."Ne pas annuler ou recréer automatiquement. Effectuer une réconciliation en premier.
Erreur réseau"Nous n'avons pas pu charger le code promo."Proposer une nouvelle tentative avec le même jeton de commande.
Code promo utilisé"Paiement confirmé."Valider uniquement après vérification côté serveur.
Code promo expiré ou rejetéExpliquer l'étape suivante prise en compte.Passer à un état terminal ou réessayable à partir de la réponse de l'API.

Reçus et livraison de fichiers#

Une réponse de paiement de référence peut contenir un reference_processors tableau. Chaque entrée de processeur disponible peut fournir un code-barres, une date d'expiration, le nom du processeur et une URL de reçu HTML ou PDF hébergé. Étant donné que ce champ est un tableau, l'expérience de reçu hébergée peut présenter plusieurs reçus lorsque le paiement traité renvoie plusieurs références de processeurs.

Diagramme de flux
NoYes1Reference paymentresponse2reference_processorspresent?3Show the widget'ssupportedcontinuation4Present one or morereceipts5View processorinstructions6Open, save, or sharethe availablereceipt7Keep payment pendinguntil backendconfirmation
RésultatFournisseur ou processeurRévision ou attente

Le processeur détermine quels champs de reçu sont présents. Ne pas synthétiser une URL PDF à partir d'un code-barres, ni supposer que chaque méthode de référence dispose à la fois des formats HTML et PDF.

PlateformeTélécharger les informations de propriétéComportement d'intégration
Site WebWidget et navigateur hébergésLe widget présente l'action de reçu disponible. Le contrat actuel de rappel Web n'a pas de fonction de rappel de fichier dédiée.
Réagir à l'initiéApplication du commerçantonDownloadFile reçoit {type, data}. type est url lorsque le processeur fournit une URL de reçu, ou base64 lorsque l'SDK a capturé la vue actuelle du coupon.
AndroidSDK natifL'SDK télécharge l'URL de reçu fournie ou sauvegarde une version de secours lorsque le widget émet l'action de sauvegarde. Tester le comportement de stockage et de partage sur les versions Android prises en charge.
iOSSDK natifL'SDK télécharge l'URL de reçu fournie ou capture la vue actuelle comme sauvegarde. Tester l'expérience de sauvegarde/partage résultante sur les versions iOS prises en charge.

Pour React Native, basculez sur le discriminateur au lieu de supposer que le payload est toujours un corps de fichier :

JavaScript
import {DownloadType} from '@deuna/react-native-sdk';

const onDownloadFile = async ({type, data}) => {
  if (type === DownloadType.URL) {
    await openTrustedReceiptUrl(data);
    return;
  }

  await saveBase64VoucherImage(data);
};

Validez toute URL avant de l'ouvrir ou de la récupérer, utilisez HTTPS, conservez les fichiers téléchargés dans un emplacement approprié et protégé ou sélectionné par l'utilisateur, et ne pas enregistrer le contenu des reçus. Un reçu enregistré est une preuve pour le client ; ce n'est pas une confirmation de règlement de paiement officielle.

Mobile et accessibilité#

  • Afficher le code promo à partir d'un écran visible, et non d'un appel de fond.
  • Assurer que les actions de téléchargement, de copie et de fermeture restent accessibles avec une taille de texte de 200 %.
  • Sur React Native, demander uniquement les capacités de stockage ou de partage nécessaires à votre implémentation de sauvegarde.
  • Restaurer le focus sur le contrôle qui a ouvert le modal et signaler les erreurs de chargement via l'API d'accessibilité de la plateforme.
  • Tester avec de longs noms de commerçants, de longues instructions traduites et des appareils de petite taille.

Dépannage#

Le widget signale un jeton de commande invalideValidation du jeton

Vérifier que la chaîne est non vide, qu'elle correspond à l'environnement sélectionné et qu'elle provient de la même commande que celle que vous souhaitez afficher. Ne communiquez pas votre clé API privée ou le corps de commande brut au client.

Aucune instruction concernant les bons de réduction n'est présenteConditions d'éligibilité

Vérifiez que la commande et le mode de paiement sont configurés pour un processus de bons de réduction. Une commande de carte standard ne devient pas une commande de bons de réduction en ouvrant cet élément.

La fonction de rappel a été déclenchée, mais la commande est toujours en attenteÉtat asynchrone attendu

Cela peut être attendu pour les méthodes de paiement en espèces et de bons de réduction. La fonction de rappel a terminé l'action de l'interface utilisateur, et non le règlement. Continuez à écouter l'état du backend vérifié.