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 €.
(*): moins les frais Lyra Collect, dans le cas du prélèvement "CASHOUT". | Le montant total de la commande est de 100€.
|
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
{ ... "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 ); }