【问题标题】:Allow WooCommerce Gateway Percentage Fee to work also on order pay允许 WooCommerce 网关百分比费用也适用于订单支付
【发布时间】:2021-01-28 05:54:14
【问题描述】:

我已经使用这个 sn-p 一段时间了,没有任何问题,直到我注意到客户可以通过信用卡付款而无需支付任何费用。他们设法通过“order-pay”页面付款。

谁能告诉我为什么我的代码在订单支付页面上不起作用?它在结帐页面上运行良好。

// Assign Credit Card Gateway Percentage Fee to Wholesaler Profiles

add_action('woocommerce_cart_calculate_fees', 'sm_credit_card_fee_role_gateway', 10, 1);
function sm_credit_card_fee_role_gateway($cart){
    if (is_admin() && !defined('DOING_AJAX'))
        return;

    if (!(is_checkout() && !is_wc_endpoint_url()))
        return;

    if (!is_user_logged_in())
        return;

    $user = wp_get_current_user();
    $roles = (array) $user->roles;
    $roles_to_check = array('administrator', 'default_wholesaler', 'wholesaler-non-vat-registered', 'shop_manager');
    $compare = array_diff($roles, $roles_to_check);

    if (empty($compare)){
        $payment_method = WC()->session->get('chosen_payment_method');
        if ($payment_method == 'cardgatecreditcard'){
            $percentage = 0.085;
            $surcharge = (WC()->cart->cart_contents_total + WC()->cart->shipping_total) * $percentage;
            $cart->add_fee( 'Credit Card Fee (8.5%)', $surcharge, true );
        }
    }
}

【问题讨论】:

    标签: php wordpress woocommerce payment-gateway fee


    【解决方案1】:

    为了让您的代码在订单支付中有效,您可以在代码中替换:

    if ( ! ( is_checkout() && ! is_wc_endpoint_url() ) )
        return;
    

    作者:

    if ( ! ( is_checkout() && ! is_wc_endpoint_url('order-received') ) )
        return;
    

    现在您的函数代码也将在 WooCommerce Order Pay 端点上执行……

    但在 Order Pay 端点中,数据会保存到现有订单中,因此在结帐时已为该订单保存了费用。钩子 woocommerce_cart_calculate_fees 仅影响购物车对象并且对 Order Pay 端点中的退出订单没有任何影响。

    您将不得不专门为 Order Pay 重建更复杂的东西,当然涉及 Ajax,以便能够在现有订单中删除或添加您的自定义费用,刷新总数……

    【讨论】:

    • 没用。我通过删除所有其他功能进行了测试。我也试过“订单支付”。
    • 好像order-pay页面没有使用AJAX更新支付方式。我不相信有办法解决这个问题...github.com/woocommerce/woocommerce/issues/10764
    • 我刚刚遇到了其他人遇到的同样问题。似乎有一种解决方法,但可能涉及专门为订单支付端点编写代码。 wordpress.org/support/topic/…
    • 我应该问的问题是“是否可以将网关费用添加到订单支付端点中的现有订单?”。我不确定这在 WooCommerce 中是否可行。
    • @WanderlustConsulting 我已经更新了我的答案,告诉你为什么你的代码在订单支付中不起作用的原因。在 WooCommerce 中一切皆有可能,但您需要做的是更高级的事情,需要支付网关更改(或刷新页面后)触发的 Ajax。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 2016-12-09
    • 2020-06-01
    • 1970-01-01
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多