Към съдържанието
PN Scripts

Разработка

Наложен платеж в WooCommerce: честна такса и разумни ограничения

  • PN Scripts
  • 8 мин четене

В България, а и в голяма част от Източна Европа, наложеният платеж още е начинът, по който се плаща голяма част от онлайн поръчките. Клиентите го харесват, защото плащат едва когато пратката е в ръцете им. Магазините плащат за него: куриерът взема такса за събирането и превода на парите, а отказаната пратка се връща с два пъти платена доставка и без продажба. WooCommerce има метод за плащане „Наложен платеж“, но той няма такса и няма ограничения. Тук показваме как да решите каква да е таксата, как да я смятате без изненади при закръглянето, как да ограничите наложения платеж там, където няма смисъл, и как да покажете всичко това на клиента, преди да поръча.

#Какво дава WooCommerce наготово

Собственият метод „Наложен платеж“ на WooCommerce има заглавие, описание, инструкции и две правила: дали да се предлага само с определени методи за доставка и дали да се приема за виртуални поръчки. Това е всичко. Няма такса, няма минимална или максимална стойност на поръчката и няма начин да изключите продукт. Магазините, на които им трябва повече, обикновено скриват таксата в цената на доставката, която плащат и клиентите с карта, или пишат бележка в общите условия, която никой не чете.

#Решете какво трябва да покрива таксата

Започнете от договора с куриера, а не от поръчката на конкурент. Куриерите обикновено таксуват наложения платеж с фиксирана сума, процент от събраната сума или двете, понякога с минимум. Вашата такса може да следва същото: фиксирана част плюс процент от стойността на поръчката, с долна и горна граница. Много магазини и не взимат такса над определена сума, защото маржът на голямата поръчка я покрива, а отстъпката кара клиентите да добавят още един продукт.

Два избора лесно се пропускат:

  • Основата на процента. Само продуктите ли са или продуктите и доставката? Куриерът събира цялата сума, затова повечето магазини ползват двете. И в двата случая ползвайте стойността след отстъпките: купон, който намалява поръчката наполовина, не бива да оставя таксата в пълен размер.
  • Закръглянето. Процентът дава суми като 2,8745. Закръглявайте таксата до стъпка, която изглежда нарочна, 0,05 или 0,10, и винаги по един и същ начин.

Дали можете да вземате такава такса и как се облага, зависи от вашия случай; попитайте счетоводителя си, преди да я включите. Сметката е една и съща и в двата случая.

#Сметката, без грешки с дробни числа

Парите в числа с плаваща запетая грешат по малки и неудобни начини. В PHP 87.45 * 0.01 + 2 дава 2.8745000000000003, а закръгляне надолу на 2,675 с floor(2.675 * 100) / 100 дава 2,67. Сигурният начин е сумата да се превърне веднъж в цели стотинки и закръглянето да стане с цели числа:

function cod_fee(float $orderValue, array $rule): float
{
    if ($rule['free_from'] !== null && $orderValue >= $rule['free_from']) {
        return 0.0;
    }
    $fee = $rule['fixed'] + $orderValue * $rule['percent'] / 100;
    $fee = max($fee, $rule['min_fee'] ?? 0);
    if ($rule['max_fee'] !== null) {
        $fee = min($fee, $rule['max_fee']);
    }
    // Round half up to the step, in whole cents, so 2.875 never turns into 2.87.
    $cents = (int) round($fee * 100);
    $step = (int) round($rule['step'] * 100);

    return intdiv($cents + intdiv($step, 2), $step) * $step / 100;
}

$rule = ['fixed' => 2.00, 'percent' => 1.0, 'min_fee' => null, 'max_fee' => 6.00, 'step' => 0.05, 'free_from' => 200.00];

С това правило (фиксирани 2,00 плюс 1 % от поръчката, най-много 6,00, закръглено до 0,05, без такса от 200) го пуснахме на няколко поръчки:

  • поръчка за 24,90 дава такса 2,25;
  • 87,45 дава 2,85;
  • 150,00 дава 3,50;
  • 199,99 дава 4,00;
  • 200,00 и всичко над това е без такса;
  • без правилото „без такса от“ поръчка за 480,00 стига горната граница от 6,00.

Редът с 199,99 си струва да се покаже при поръчката: клиент, който вижда „без такса за наложен платеж от 200“, често добавя още нещо малко.

#Добавяне на таксата в WooCommerce

Таксата е част от сумите в количката, на отделен ред, и се смята само когато избраният метод за плащане е наложен платеж. WooCommerce извиква woocommerce_cart_calculate_fees при всяко преизчисляване на количката, след продуктите и доставката:

add_action('woocommerce_cart_calculate_fees', function (WC_Cart $cart): void {
    if (WC()->session === null || WC()->session->get('chosen_payment_method') !== 'cod') {
        return;
    }
    $value = $cart->get_cart_contents_total() + $cart->get_cart_contents_tax()
        + $cart->get_shipping_total() + $cart->get_shipping_tax();
    $fee = cod_fee($value, COD_RULE);
    if ($fee > 0) {
        $cart->add_fee('Cash on delivery fee', $fee);
    }
});

Уловката е в момента на преизчисляване. Класическата поръчка не се преизчислява, когато клиентът смени метода за плащане, така че таксата би се появила едва когато се промени нещо друго. Няколко реда JavaScript оправят това, като пускат собственото събитие на WooCommerce update_checkout при смяна на метода. Текущите версии на блоковата поръчка се преизчисляват сами през Store API, но при самото поръчване сумите се смятат, преди изпратеният метод за плащане да бъде запазен, затова методът от заявката трябва първо да се сложи в сесията (мястото е действието woocommerce_store_api_checkout_update_customer_from_request). Тествайте и двете поръчки: лесно се получава такса, която се вижда в едната, а в другата не.

#Ограничения: кога наложеният платеж не бива да се предлага

Таксата е половината история. Някои поръчки изобщо не бива да се плащат при доставка:

  • Големите поръчки. Отказана пратка за 1500 боли много повече от пратка за 40. Максимална стойност на поръчката за наложен платеж ограничава риска.
  • Много малките поръчки. Когато таксата на куриера изяжда маржа, минимална стойност на поръчката има смисъл.
  • Някои начини на доставка. При вземане от магазина се плаща на гишето; при доставка няма какво да се събира.
  • Някои продукти. По поръчка, с гравиране или рязани по размер: ако клиентът откаже, никой друг няма да ги купи. По-добре е да се плащат предварително.

Филтърът woocommerce_available_payment_gateways маха наложения платеж от списъка, когато правило казва „не“. Не спирайте дотук. Метод за плащане, който изчезва без обяснение, изглежда като грешка, затова кажете на клиента защо: „Наложен платеж е възможен за поръчки до 500,00“ или „Наложен платеж не е възможен за продукти по поръчка“. И се уверете, че поръчка, изпратена все пак с наложен платеж, през Store API или от стар отворен раздел, се отказва на сървъра.

#Покажете таксата, преди клиентът да поръча

Таксата никога не бива да е изненада в потвърждението на поръчката. Покажете я на отделен ред в сумите в момента, в който клиентът избере наложен платеж, назовете я ясно, споменете я в описанието на метода и запишете същото правило в условията за доставка. Ако има сума „без такса от“, кажете го. Видимата и честна такса се приема; скритата се превръща в отказана пратка. За останалата част от поръчката нашият списък за магазин с Еконт и Спиди покрива доставката, плащането с карта и правните страници.

#Плъгин, който го прави

Вградихме тези правила в Nalozhen, плъгин за WooCommerce, който добавя такса и ограничения към собствения метод „Наложен платеж“ на WooCommerce, без да го заменя. Таксата може да е фиксирана, процент от поръчката или от продуктите, или двете, с минимум, максимум, закръгляне от 0,01 до 1,00 (смятано в стотинки) и сума „без такса от“. Наложеният платеж може да се ограничи по стойност на поръчката, да се изключи или да получи собствена такса за всеки метод за доставка, включително методите на куриерските плъгини, и да се изключи за продукти и категории. Таксата се появява в сумите веднага щом клиентът избере наложен платеж, в блоковата и в класическата поръчка, а клиентът вижда колко струва или защо липсва. Тестван е с 19 автоматични теста, пълно изпълнение на WordPress 7.1.3 и WooCommerce 11.2.1 и тест в браузър на двете поръчки и е обявен като „Очаквайте скоро“.

#Често задавани въпроси

Мога ли вместо това да добавя таксата към цената на доставката?

Можете, но тогава я плащат и клиентите с карта и не можете да я махнете за големите поръчки, без да пипате всяка цена за доставка. Отделният ред с такса е по-ясен за всички.

Трябва ли процентът да включва доставката?

Обикновено да, защото куриерът събира цялата сума, заедно с доставката. И в двата случая ползвайте стойността след отстъпките.

Защо таксата не се появява, когато избера наложен платеж?

В класическата поръчка сумите се обновяват само когато WooCommerce получи сигнал да обнови поръчката. Пуснете update_checkout, когато методът за плащане се смени.

Как да спра наложения платеж за продукти по поръчка?

Отбележете тези продукти или категорията им и махнете наложения платеж от възможните методи, докато някой от тях е в количката, с кратка бележка защо.

#Източници

Още по темата

Още по темата

Коментари

Коментари

Напишете първия коментар.

Оставете коментар

Следваща стъпка

pnscripts.com/bg/contact

Пишете на екипа

Попитайте за статия или ни разкажете за проект, който искате да изградим. Отговаряме до един работен ден.

Пишете ни

Семейството PN Scripts

Другите сайтове на PN Scripts

Хостингът, игрите и блогът имат свои сайтове, поддържани от същата компания.

  • pnscripts.com

    PN Scripts

    Софтуерно инженерство

    Уеб и мобилни приложения, API и игри по поръчка, плюс нашите продукти и плъгини с отворен код.

  • games.pnscripts.com

    Игри

    Игри и игрови сървъри

    Домът на игрите на PN Scripts: безплатни браузърни игри, които се играят веднага, а игровите сървъри предстоят.

  • hosting.pnscripts.com

    Хостинг

    Хостинг и инфраструктура

    Споделен хостинг, KVM VPS, самостоятелни сървъри и домейни от същата компания, която изработва проекта ви.

  • blog.pnscripts.com

    Блог

    Статии и бележки

    Практични статии за разработка на софтуер, хостинг, отворен код и игри, писани от хората, които ги създават.

    Вие сте тук