• France
état des services
démonstrations
assistance
FAQContacter le support
Tutoriels vidéo
Rechercher
Catégories
Tags
France
France
Espagne
Europe (Anglais)
Inde
Accueil
Cas d'usage
Créer un paiement
Créer un paiement en plusieurs fois
Proposer un paiement complémentaire
Créer un paiement par alias (token)
Créer un lien de paiement
Créer un abonnement
Gérer vos abonnements
Gérer vos transactions (rembourser,...)
Analyser vos journaux
Docs API
Formulaire embarqué
API REST
Formulaire en redirection
SDK Mobile
Échange de fichiers
Mandats SEPA par API REST
Exemples de code
Moyens de paiement
Modules de paiement
Marketplace
Guides
Back Office Marchand
Back Office Expert
Guides fonctionnels

Prélèvement au fil de l'eau : fonctionnement de la commission minimale

  • Définition de la commission au niveau de la commande et au niveau de l’article
  • Prélèvement au fil de l'eau : déterminer le montant de la commission minimale
  • Vérification de la part marketplace
  • Déterminer le montant minimal

Définition de la commission au niveau de la commande et au niveau de l’article

Commission définie Au niveau de la commande Au niveau de l’article
Propriété utilisée sur item is_commission: true commission_amount: {montant de la commission}
Interprétation du montant Le montant de la commission s'ajoute au montant des autres articles. Le montant de la commission vient en déduction du montant de l'article.
Interprétation de l'exemple

Le montant total de la commande est de 100 + 10 = 110 €.

  • Le vendeur reçoit 100€;
  • La marketplace reçoit 10€ (*).

(*): moins les frais Lyra Collect, dans le cas du prélèvement "CASHOUT".

Le montant total de la commande est de 100€.

  • Le vendeur reçoit 90€;
  • La marketplace reçoit 10€ (*).
Exemple de payload
{
  "currency": "EUR",
  ...
  "items": [
    {
      "seller": "4d20a9d4-0526-4474-b452-e936dc25418d",
      "reference": "produit_vendeur",
      "description": "Produit",
      "amount": 10000
    },
    {
      "seller": "72ccc2ff-b455-4653-847e-deb6fee99f8d",
      "reference": "marketplace_commission",
      "description": "Commission",
      "amount": 1000,
      "is_commission": true
    }
  ],
  ...
}
{
  "currency": "EUR",
  ...
  "items": [
    {
      "seller": "4d20a9d4-0526-4474-b452-e936dc25418d",
      "reference": "produit_vendeur",
      "description": "Produit",
      "amount": 10000
      "commission_amount": 1000
    }
  ],
  ...
}
Contrainte sur le vendeur Uniquement sur l'opérateur marketplace (seller avec is_marketplace_seller: true) Aucune contrainte.

Prélèvement au fil de l'eau : déterminer le montant de la commission minimale

Si votre marketplace a opté pour le prélèvement au fil de l'eau (i.e. la propriété billing_method de l'objet marketplace est définie sur CASHOUT), vous devez vous assurer que le montant de la part destinée à la marketplace est supérieure ou égale à un certain montant, ici appelé part minimale.

La "part destinée à la marketplace" correspond à la somme du montant total des commissions du panier et des ventes en propre.

Les paramètres qui déterminent la part minimale sont définis devise par devise au niveau de la marketplace (voir Comprendre les informations de la marketplace), comme dans cet exemple.

Extrait du corps de réponse

GET /marketplaces/{marketplace_uuid}

{
  ...
  "currencies": [
    {
      "currency": "EUR",
      "commission_prorata": 2,
      "commission_fix": 20,
      "is_active": true
    }
  ],
  ...
}
 

La part destinée à la marketplace était à ses débuts restreinte aux commissions, d'où la dénomination commission_prorata et commission_fix des paramètres permettant de désigner respectivement le prorata minimal par rapport au montant total de la commande et le montant fixe par transaction. Le nom est resté pour des raisons de compatibilité.

Vérifier la part marketplace

Il est facile de vérifier que le montant de la part marketplace est bien supérieur au montant minimal attendu :

[/concept/concept/conbody/section/pre {"- topic/pre "})Part marketplace >= Part minimale <=> Commission + vente en propre >= (Montant total * commission_ratio + nb transaction * commission_fix) * (1 + tva/100) (pre]

Exemple de d'implémentation de contrôle de montant minimum en PHP

function checkCommission($order, $commissionRatio, $commissionFix, $tvaRatio): bool
{
    $commission = getTotalCommissionAmount($order);
    $min = getMinimumAllowedCommission($order, $commissionRatio, $commissionFix, $tvaRatio);
    return  $commission >= $min;
}
/**
 * Returns the total commodity amount of the order (i.e. net commission).
 */
function getTotalCommodityAmount($order): float
{
    $totalCommodity = 0;
    foreach($order->items as $item)
    {
        if (!isset($item->is_commission))
        {
            $itemCommodityAmount = $item->amount;
            if (isset($item->commission_amount))
            {
                $itemCommodityAmount -= $item->commission_amount;
            }
            $totalCommodity += $itemCommodityAmount;
        }
    }
    return $totalCommodity;
}
/**
 * Returns the total commission amount of the order.
 */
function getTotalCommissionAmount($order): float
{
    $totalCommission = 0;
    foreach($order->items as $item) {
        if($item->is_commission ?? false) {
            $totalCommission += $item->amount;
        }  elseif($item->commission_amount ?? false) {
            $totalCommission += $item->commission_amount;
        }
    }
    return $totalCommission;
}
function getOrderTotalAmount($order): float
{
    return getTotalCommodityAmount($order) + getTotalCommissionAmount($order);
}
function getMinimumAllowedCommission($order, $commissionRatio, $commissionFix, $tvaRatio): float
{
    $totalAmount = getOrderTotalAmount($order);
    $nbTransactions = getTransactionNbFromPaymentConfig($order->payment_config ?? 'SINGLE');
    return round(
        ceil(($commissionRatio * $totalAmount + $nbTransactions * $commissionFix) * (1 + $tvaRatio) * 100) / 100, 2
    );
}
function getTransactionNbFromPaymentConfig($paymentConfig): int {
    if($paymentConfig === 'SINGLE') return 1;
    try {
        $configArray = explode(":", $paymentConfig);
        $config = $configArray[0];
        $values = $configArray[1];
        if ($config === 'MULTI_EXT') {
            $transactions = explode(";", $values);
            return count($transactions);
        }
        if ($config === 'MULTI') {
            $params = explode(";", $values);
            foreach ($params as $param) {
                $args = explode("=", $param);
                if ($args[0] === 'count') {
                    return intval($args[1]);
                }
            }
            throw new Exception("Missing 'count' param in paymentConfig $paymentConfig", 500);
        }
        throw new Exception("paymentConfig should be one of SINGLE, MULTI or MULTI_EXT. Found $paymentConfig.", 500);
    } catch (Exception $e) {
        throw new Exception("Error when trying the evaluate the payment config setting.
        Please check the paymentConfig $paymentConfig against the Marketplace API documentation.", 500);
    }
}

Déterminer le montant minimal

Mais si la part minimale n'est pas satisfaite, il est un peu moins trivial de la déterminer à partir du montant de la commande hors commission et vente en propre, c'est-à-dire à partir du montant net sous-vendeurs.

Mathématiquement, cela correspond à cette formule :

Avec les valeurs suivantes :

Symbole Définition Exemple 1 Exemple 2
a Coefficient de la part minimale au prorata du montant total de la commande 2% 1%
b frais fixe par transaction 0,50€ 0,20€
M Montant net sous-vendeur (i.e. hors commissions et ventes en propre) 100€ 100€
n Nombre de transactions de la commande 1 3
tva Taux de TVA 20% 20%
  Développement du calcul
Partmin Part minimale = 307,37 arrondi à 308, i.e. 3,08€ = 194.33 arrondi à 195, i.e. 1,95€

Exemple d'implémentation du calcul de la part minimale en PHP

function computeMinimimumCommissionAmount($order, $commissionRatio, $commissionFix, $tvaRatio): float
{
    $commodityAmount = getTotalCommodityAmount($order);
    $nbTransactions = getTransactionNbFromPaymentConfig($order->payment_config ?? 'SINGLE');
    return round(
        ceil(
        ($commissionRatio * $commodityAmount + $nbTransactions * $commissionFix) / (
            (1 / (1 + $tvaRatio)) - $commissionRatio)
        * 100) / 100, 2
    );
}
Nous recrutons
Mentions légales
Charte de Protection des Données Personnelles
25.22-1.11