Комиссия Woocommerce Stripe неправильно добавлена ​​к Stripe Payout - PullRequest
0 голосов
/ 13 июля 2020

У нас есть служба написания статей, где клиенты могут заказать статьи по количеству слов. Если заказывается более 5000 слов (независимо от количества статей), мы применяем пониженную ставку. Моя скорректированная цена рассчитывается и отображается нормально, когда я нахожусь на странице отдельного продукта, странице корзины, странице оформления заказа, а также на всей серверной части. серверной части Wordpress в разделе Woocommerce> Заказы> Изменить порядок, я вижу, что плата за полосу не вычитается правильно из общей стоимости продукта.

Например: на прикрепленном изображении ниже вы можете видеть - 3,76 доллара США предполагается вычесть из общей суммы заказа 80 долларов. Выплата Stripe должна составлять 76,24 доллара, но вместо этого отображается 115,43 доллара.

введите описание изображения здесь

Ниже приведена функция, которую я использую для обновления цен. Я собрал его из онлайн-источников, и, похоже, он работает нормально (хотя, вероятно, не так эффективно, как мог бы), но я не совсем уверен, почему значение Stripe Payout рассчитывается неправильно.

add_action( 'woocommerce_before_calculate_totals', 'articles_alter_price_cart', 9999 );
 
function articles_alter_price_cart( $cart ) {

    $grandTotalWords = 0;
    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;
 
    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 ) return;

    /* Loop through cart items and get grand total of words */
    foreach ( $cart->get_cart() as $cart_item_key => $cart_item ) {
        $qty = $cart_item['quantity'];
        $wordsPerArticle = $cart_item['variation']['attribute_number-of-words'];
        $numWords = $wordsPerArticle * $qty;
        $grandTotalWords += $numWords;
    }

    /* Update cart item prices based on grand total of words */
    foreach ( $cart->get_cart() as $cart_item_key => $cart_item ) {

        $qty = $cart_item['quantity'];
        $numWordsInput = $cart_item['variation']['attribute_number-of-words'];
        $arr = explode(' Words', $numWordsInput);
        $wordsPerArticle = $arr[0];

        $numWords = $wordsPerArticle * $qty;

        if ( $grandTotalWords != '' && $grandTotalWords > 0 ) {
            if ( $grandTotalWords > 10000 ) {
                $totalCost = $numWords * 0.125;
            } elseif ( $grandTotalWords >= 5000 && $grandTotalWords <= 10000 ) {
                $totalCost = $numWords * 0.15;
            } else {
                $totalCost = $numWords * 0.2;
            }
        }

        $singleCost = $totalCost / $qty;
        /* Tried setting type as string because totals are saved as strings apparently  */
        settype($singleCost, 'string');

        $cart_item['data']->set_price( $singleCost );
    }
 
}

Любая помощь приветствуется. Спасибо!

...