Aller au contenu principal

Discounts

Le module Discounts vous permet de lire les remises, de valider les coupons et de consulter le solde de bonus de l'utilisateur.

Plus d'informations sur l'interface utilisateur du module : https://doc.oneentry.cloud/docs/category/discounts (ouvre dans un nouvel onglet)


Utilisez ce module pour récupérer les remises et valider les codes promo : réductions en pourcentage ou d'un montant fixe, accumulation de points bonus et remises personnelles. Vous définissez les règles de remise dans le panneau d'administration OneEntry. Le module les récupère, valide les coupons au moment du paiement et lit le solde et l'historique de bonus de l'utilisateur actuel.

Le SDK est en lecture seule. Vous ne pouvez pas créer ni modifier de remises avec lui ; cela se fait dans le panneau d'administration. Lorsque vous y créez une remise, vous définissez un nom, un marqueur (identifier), un type (DISCOUNT, BONUS ou PERSONAL_DISCOUNT), une discountValue (PERCENT ou FIXED_AMOUNT plus la value numérique), une période de validité facultative (startDate / endDate) et des conditions facultatives.

Démarrage rapide​

Initialisez le module à partir de defineOneEntry :


const { } = defineOneEntry(
, {
}
);

Validez un code promo au moment du paiement et lisez le résultat :

// Validate a coupon code entered by the customer.
const result = await Discounts.validateDiscountsCoupon("SUMMER-KBWZ-2428");

if ('statusCode' in result) {
console.error(result.message); // IError: the request failed
} else if (result.valid) {
console.log("Coupon applied:", result.coupon);
} else {
console.log("Invalid coupon:", result.error); // e.g. "Coupon not found"
}

Objet remise​

Une remise (IDiscountsEntity) est une règle de tarification qui réduit le coût des produits ou des commandes :

  • type : DISCOUNT, BONUS ou PERSONAL_DISCOUNT.
  • discountValue : la manière dont la réduction est calculée. Il contient un discountType (PERCENT ou FIXED_AMOUNT), une value numérique, une applicability (TO_PRODUCT ou TO_ORDER) et un maxAmount facultatif.
  • identifier : le marqueur unique utilisé pour le filtrage et les références.
  • startDate / endDate : la période de validité facultative.
  • conditions : les règles qui déterminent quand la remise s'applique (par produit, catégorie, montant du panier, utilisateur, …).
{
id: 1,
identifier: 'summer_sale',
localizeInfos: {
title: 'Summer Sale'
},
type: 'DISCOUNT',
startDate: '2025-06-01T00:00:00.000Z',
endDate: '2025-08-31T23:59:59.999Z',
discountValue: {
applicability: 'TO_ORDER',
discountType: 'PERCENT',
value: 20,
maxAmount: 100
},
conditionLogic: 'AND',
conditions: [
{ id: 1, conditionType: 'MIN_CART_AMOUNT', entityIds: null, value: { amount: 50 } }
]
}

Types de remises​

Le champ type classe la remise :

typeDescription
DISCOUNTRemise standard appliquée aux produits/commandes
BONUSAccumulation de points bonus (fidélité)
PERSONAL_DISCOUNTRemise destinée à des utilisateurs ou groupes précis

Le mode de calcul de la réduction est défini dans discountValue.discountType :

discountValue.discountTypeDescriptionExemple
PERCENTRéduit le prix d'un pourcentage20 % sur tous les articles d'été
FIXED_AMOUNTRéduit le prix d'un montant fixe10 $ de réduction sur les commandes de plus de 50 $

Méthodes​

MéthodeDescription
getAllDiscounts()Obtenir toutes les remises
getDiscountByMarker()Obtenir une remise par marqueur
validateDiscountsCoupon()Valider un code promo
getBonusBalance()Obtenir le solde de bonus de l'utilisateur actuel
getBonusHistory()Obtenir l'historique des transactions de bonus de l'utilisateur actuel
getDiscountsByVectorSearch()Recherche les remises par leur sens (recherche vectorielle)

Appliquer une remise au moment du paiement​

Validez le code saisi par le client avec validateDiscountsCoupon(), puis passez-le comme couponCode à Orders.previewOrder() pour obtenir les totaux remisés, et à Orders.createOrder() lorsque vous passez la commande. Pour appliquer une remise sans coupon, passez son marqueur dans additionalDiscountsMarkers. La plateforme applique les remises et les coupons lors du calcul de la commande : ne recalculez donc pas les prix côté client. N'utilisez getDiscountByMarker() que pour afficher une remise (par exemple, son discountValue). createOrder() nécessite une autorisation utilisateur.

validateDiscountsCoupon() renvoie un ICouponValidationResult : { valid: boolean; coupon?; error? }. Si le coupon n'existe pas ou qu'un coupon à usage unique a déjà été utilisé, valid vaut false et error contient la raison (par exemple, "Coupon not found"). La validation du coupon ne vérifie pas les startDate/endDate de la remise : vérifiez-les donc vous-même (voir Validity period).

Période de validité​

startDate et endDate sont facultatifs. Vérifiez-les avant d'afficher une remise, afin de n'afficher que les remises actuellement actives.

Badges de remise sur les produits​

Récupérez toutes les remises avec getAllDiscounts(), associez-les aux produits selon votre propre logique métier et affichez un badge à partir de localizeInfos.title et discountValue.value. Les remises changent rarement : mettez-les en cache au chargement au lieu d'appeler l'API à répétition. Pour les noms multilingues, utilisez localizeInfos.


Voir aussi​

  • Products : produits auxquels s'appliquent les remises
  • Orders : prévisualiser et créer des commandes avec remises appliquées
  • Payments : paiements des commandes remisées
  • Locales : noms de remises multilingues