I've been using this snippet for a while with no issue until I noticed that a customer was able to pay by credit card without being charged a fee. They managed to make a payment via the "order-pay" page.
Can anyone tell me why my code isn't working on the order-pay page? It works fine on the checkout page.
// 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 );
}
}
}
To allow your code to be active on Order pay, you may replace in your code:
by:
Now your function code will also be executed on WooCommerce Order Pay endpoint…