Server : LiteSpeed
System : Linux premium92.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64
User : rbnsfqys ( 805)
PHP Version : 8.1.33
Disable Function : NONE
Directory :  /home/rbnsfqys/ali.rbn.services/wp-content/plugins/Repairplugin-pro/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]


Current File : /home/rbnsfqys/ali.rbn.services/wp-content/plugins/Repairplugin-pro/payment_integrations.php
<?php

// Exit if accessed directly

defined( 'ABSPATH' ) || exit;

function rp_dp_get_currency_code() {

    static $cached = FALSE;

    if( $cached !== FALSE ) {

        return $cached;

    }

    global $rpQuery;

    $currency_code = rp_get_selected_currency();
    
    if( !empty( $currency_code ) ) {

        $currency_code = explode(" ", $currency_code);
        
        $currency_code = $currency_code[1];
        
        return $currency_code;

    }

    $cached = 0;

    return 'EUR';

}

function rp_pm_create_badge_text( $p_method = '', $decimal = '', $localization = null, $reschedule_order_id = 0 ) {

    global $wp_repair_lang;

    list( $rp_additional_cost_discount_type, $rp_additional_cost_discount_value ) = rp_get_pm_additional_cost_or_discount( $p_method );

    if( empty( $rp_additional_cost_discount_value ) || empty( $rp_additional_cost_discount_type ) ) {
        
        return '';

    }

    $cost = (float) $rp_additional_cost_discount_value;

    $int = ctype_digit($cost);

    if($int == 1){

        $result = rp_handle_currency_position($cost, $localization[0]->set_currency, TRUE);

    }else{

        if( strpos( $rp_additional_cost_discount_type, 'percentage' ) !== FALSE ) {

            if( $decimal == 'comma' ) {

                $cost = number_format((float)$cost, 2, '.', '');

                $cost = str_replace('.',',',$cost);

                $result = $cost.'%';

            } else {

                $cost = number_format((float)$cost, 2, '.', '');

                $result = $cost.'%';

            }

        } else {

            if($decimal == 'comma'){

                $cost = number_format((float)$cost, 2, '.', '');
    
                $cost = str_replace('.',',',$cost);
    
                $result = rp_handle_currency_position($cost, $localization[0]->set_currency, TRUE);
    
            } else{
    
                $cost = number_format((float)$cost, 2, '.', '');
    
                $result = rp_handle_currency_position($cost, $localization[0]->set_currency, TRUE);
    
            }

        }
        
    }

    $combo_discount_percent_off = $wp_repair_lang['combo_discount_percent_off'] ?? 'OFF';

    if( strpos( $rp_additional_cost_discount_type, 'discount' ) !== FALSE ) {

        return '<span class="rp-pm-cost-badge percent-off-badge">'.$result.' '.$combo_discount_percent_off.'</span>';

    } else {

        if( strpos( $rp_additional_cost_discount_type, 'percent' ) !== FALSE ) {

            return '<span class="rp-pm-cost-badge rp-dm-price-badge">+ '.$result.'</span>';

        } else {

            return '<span class="rp-pm-cost-badge rp-dm-price-badge">'.$result.'</span>';

        }

    }

}

function rp_get_pm_additional_cost_or_discount( $p_method = '' ) {

    $rp_additional_cost_discount_type = rp_get_option('rp_additional_cost_discount_type_'.$p_method, '');

    $rp_additional_cost_discount_value = rp_get_option('rp_additional_cost_discount_value_'.$p_method, 0);

    if( empty( $rp_additional_cost_discount_value ) || empty( $rp_additional_cost_discount_type ) ) {
        
        $rp_additional_cost_discount_type = '';

        $rp_additional_cost_discount_value = '';

    }

    return array( $rp_additional_cost_discount_type, $rp_additional_cost_discount_value );

}

function rp_get_sorted_payment_methods() {

    $pm_sorted_methods = rp_get_option('rp_get_sorted_payment_methods', json_encode(array(
        'paypal',
        'stripe',
        'mollie',
        'ideal_in3',
        'pay_after_repair'
    )));

    $pm_sorted_methods = json_decode($pm_sorted_methods);

    $mustHave = array(
        'paypal',
        'stripe',
        'mollie',
        'ideal_in3',
        'pay_after_repair'
    );

    foreach( $mustHave as $method ) {

        if( !in_array($method, $pm_sorted_methods) ) {

            array_push($pm_sorted_methods, $method);

        }

    }

    // now remove all items that aren't in the mustHave array
    $filtered = array();

    foreach( $pm_sorted_methods as $method ) {

        if( in_array($method, $mustHave) == TRUE ) {

            array_push($filtered, $method);

        }

    }

    return $filtered;

}

function rp_is_enabled_stripe_payment() {
 
    $payment_methods_active = rp_get_option('rp_is_active_payment_method', 0);

    if( $payment_methods_active != '1' ) {

        return FALSE;

    }

    //rp_payment_method_stripe
    $stripe = rp_get_option('rp_payment_method_stripe', 0);

    if( $stripe != '1' ) {

        return FALSE;

    }

    //rp_stripe_payment_mode
    $stripe_payment_mode = rp_get_option('rp_stripe_payment_mode', 'sandbox');

    if( $stripe_payment_mode != 'live' ) {

        $stripe_payment_mode = 'sandbox';

    }

    //rp_stripe_secret_key_{mode}
    $required_fields = array(
        'rp_stripe_secret_key_' . $stripe_payment_mode
    );

    foreach( $required_fields as $field ) {

        $value = rp_get_option($field, NULL);

        if( empty($value) ) {

            return FALSE;

        }

    }

    return TRUE;

}

function rp_is_enabled_pay_after_repair_payment() {

    $payment_methods_active = rp_get_option('rp_is_active_payment_method', 0);

    if( $payment_methods_active != '1' ) {

        return FALSE;

    }

    //rp_payment_method_pay_after_repair
    $pay_after_repair = rp_get_option('rp_payment_method_pay_after_repair', 0);

    if( $pay_after_repair != '1' ) {

        return FALSE;

    }

    return TRUE;

}

function rp_is_enabled_ideal_in3_for_come_by_our_store() {

    if( !rp_is_enabled_ideal_in3_payment() ) {

        return FALSE;

    }

    $supported = rp_get_supported_payment_methods_by_delivery_method( 'come_by_our_store', 50 );

    return !empty( $supported ) && in_array( 'ideal_in3', $supported );

}

function rp_need_to_show_ideal_in3_badge_on_repair_box() {

    if( rp_is_enabled_ideal_in3_payment() === FALSE ) {

        return FALSE;

    }

    return rp_get_option('rp_ideal_in3_show_badge_on_repair_box', '0') == '1' ? TRUE : FALSE;

}

function rp_need_to_show_ideal_in3_badge_on_repair_list() {

    if( rp_is_enabled_ideal_in3_payment() === FALSE ) {

        return FALSE;

    }

    return rp_get_option('rp_ideal_in3_show_badge_on_repair_list', '0') == '1' ? TRUE : FALSE;

}

function rp_is_enabled_ideal_in3_payment() {

    $payment_methods_active = rp_get_option('rp_is_active_payment_method', 0);

    if( $payment_methods_active != '1' ) {

        return FALSE;

    }

    //rp_payment_method_ideal_in3
    $ideal_in3 = rp_get_option('rp_payment_method_ideal_in3', 0);

    if( $ideal_in3 != '1' ) {

        return FALSE;

    }

    //rp_ideal_in3_payment_mode
    $ideal_in3_payment_mode = rp_get_option('rp_ideal_in3_payment_mode', 'sandbox');

    if( $ideal_in3_payment_mode != 'live' ) {

        $ideal_in3_payment_mode = 'sandbox';

    }

    //rp_ideal_in3_api_key_{mode}
    $required_fields = array(
        'rp_ideal_in3_api_key_' . $ideal_in3_payment_mode
    );

    foreach( $required_fields as $field ) {

        $value = rp_get_option($field, NULL);

        if( empty($value) ) {

            return FALSE;

        }

    }

    return TRUE;

}

function rp_is_enabled_mollie_payment() {

    $payment_methods_active = rp_get_option('rp_is_active_payment_method', 0);

    if( $payment_methods_active != '1' ) {

        return FALSE;

    }

    //rp_payment_method_mollie
    $mollie = rp_get_option('rp_payment_method_mollie', 0);

    if( $mollie != '1' ) {

        return FALSE;

    }

    //rp_mollie_payment_mode
    $mollie_payment_mode = rp_get_option('rp_mollie_payment_mode', 'sandbox');

    if( $mollie_payment_mode != 'live' ) {

        $mollie_payment_mode = 'sandbox';

    }

    //rp_mollie_api_key_{mode}
    $required_fields = array(
        'rp_mollie_api_key_' . $mollie_payment_mode
    );

    foreach( $required_fields as $field ) {

        $value = rp_get_option($field, NULL);

        if( empty($value) ) {

            return FALSE;

        }

    }

    return TRUE;

}

function rp_is_enabled_paypal_payment() {

    $payment_methods_active = rp_get_option('rp_is_active_payment_method', 0);

    if( $payment_methods_active != '1' ) {

        return FALSE;

    }

    //rp_payment_method_paypal
    $paypal = rp_get_option('rp_payment_method_paypal', 0);

    if( $paypal != '1' ) {

        return FALSE;

    }

    //rp_paypal_payment_mode
    $paypal_payment_mode = rp_get_option('rp_paypal_payment_mode', 'sandbox');

    if( $paypal_payment_mode != 'live' ) {

        $paypal_payment_mode = 'sandbox';

    }

    //rp_paypal_client_id_{mode},rp_paypal_secret_key_{mode}
    $required_fields = array(
        'rp_paypal_client_id_' . $paypal_payment_mode,
        'rp_paypal_secret_key_' . $paypal_payment_mode
    );

    foreach( $required_fields as $field ) {

        $value = rp_get_option($field, NULL);

        if( empty($value) ) {

            return FALSE;

        }

    }

    return TRUE;

}

function rp_get_ideal_in3_credentials() {

    if( rp_is_enabled_ideal_in3_payment() == FALSE ) {

        return FALSE;

    }

    $ideal_in3_payment_mode = rp_get_option('rp_ideal_in3_payment_mode', 'sandbox');

    if( $ideal_in3_payment_mode != 'live' ) {

        $ideal_in3_payment_mode = 'sandbox';

    }

    $api_key = rp_get_option('rp_ideal_in3_api_key_' . $ideal_in3_payment_mode, NULL);

    return $api_key;

}

function rp_get_mollie_credentials() {

    if( rp_is_enabled_mollie_payment() == FALSE ) {

        return FALSE;

    }

    $mollie_payment_mode = rp_get_option('rp_mollie_payment_mode', 'sandbox');

    if( $mollie_payment_mode != 'live' ) {

        $mollie_payment_mode = 'sandbox';

    }

    $api_key = rp_get_option('rp_mollie_api_key_' . $mollie_payment_mode, NULL);

    return $api_key;

}

function rp_get_stripe_credentials() {

    if( rp_is_enabled_stripe_payment() == FALSE ) {

        return FALSE;

    }

    $stripe_payment_mode = rp_get_option('rp_stripe_payment_mode', 'sandbox');

    if( $stripe_payment_mode != 'live' ) {

        $stripe_payment_mode = 'sandbox';

    }

    $secret_key = rp_get_option('rp_stripe_secret_key_' . $stripe_payment_mode, NULL);

    return $secret_key;

}

function rp_get_paypal_mode() {

    $paypal_payment_mode = rp_get_option('rp_paypal_payment_mode', 'sandbox');

    if( $paypal_payment_mode != 'live' ) {

        $paypal_payment_mode = 'sandbox';

    }

    return $paypal_payment_mode;

}

function rp_get_paypal_credentials() {

    if( rp_is_enabled_paypal_payment() == FALSE ) {

        return FALSE;

    }

    $paypal_payment_mode = rp_get_option('rp_paypal_payment_mode', 'sandbox');

    if( $paypal_payment_mode != 'live' ) {

        $paypal_payment_mode = 'sandbox';

    }

    $client_id = rp_get_option('rp_paypal_client_id_' . $paypal_payment_mode, NULL);
    $secret_key = rp_get_option('rp_paypal_secret_key_' . $paypal_payment_mode, NULL);

    return array(
        'client_id' => $client_id,
        'secret_key' => $secret_key
    );

}

function rp_load_vendor_autload() {

    static $loaded = FALSE;

    if( $loaded == TRUE ) {

        return;

    }

    require_once WP_REPAIR_PLUGIN_PATH . 'vendor/autoload.php';

}

function rp_check_if_payment_method_is_active( $payment_method = '' ) {

    if( empty( $payment_method ) ) {

        return FALSE;

    }

    if( $payment_method == 'paypal' ) {

        return rp_is_enabled_paypal_payment();

    }

    if( $payment_method == 'stripe' ) {

        return rp_is_enabled_stripe_payment();

    
    }

    if( $payment_method == 'mollie' ) {

        return rp_is_enabled_mollie_payment();

    
    }

    if( $payment_method == 'ideal_in3' ) {

        return rp_is_enabled_ideal_in3_payment();

    
    }

    if( $payment_method == 'pay_after_repair' ) {

        return rp_is_enabled_pay_after_repair_payment();
    
    }

    return FALSE;

}

function rp_need_to_show_payment_methods_on_frontend() {

    $payment_methods_active = rp_get_option('rp_is_active_payment_method', 0);

    if( $payment_methods_active != '1' ) {

        return FALSE;

    }

    $result_arr = array();

    // paypal
    $result_arr[] = rp_is_enabled_paypal_payment();

    // stripe
    $result_arr[] = rp_is_enabled_stripe_payment();

    // mollie
    $result_arr[] = rp_is_enabled_mollie_payment();

    // ideal_in3
    $result_arr[] = rp_is_enabled_ideal_in3_payment();

    // pay_after_repair
    $result_arr[] = rp_is_enabled_pay_after_repair_payment();

    if( in_array(TRUE, $result_arr) ) {

        return TRUE;

    }

    return FALSE;

}

function _rp_get_payment_method_cost_info( $payment_method = '' ) {
    
    list( $rp_additional_cost_discount_type, $rp_additional_cost_discount_value ) = rp_get_pm_additional_cost_or_discount( $payment_method );

    if( empty( $rp_additional_cost_discount_value ) || empty( $rp_additional_cost_discount_type ) ) {
        
        return array();

    }

    $cost = (float) $rp_additional_cost_discount_value;

    return array( $payment_method, $rp_additional_cost_discount_type, $cost );

}

function rp_set_payment_method_cost_info( $o_id = 0, $payment_method = '' ) {

    global $rpQuery;

    $payment_cost_info = _rp_get_payment_method_cost_info( $payment_method );

    // save payment method cost related info...
    if( !empty( $payment_cost_info ) ) {

        $payment_cost_info = json_encode( $payment_cost_info );

    } else {

        $payment_cost_info = '';

    }

    $rs_orders = $rpQuery->prefix . 'rs_orders';

    // payment_date_time = date('Y-m-d H:i:s')

    $sql = "UPDATE `$rs_orders` SET `payment_cost_info` = '".rp_escape_sql($payment_cost_info)."' 
    WHERE `o_id` = '".rp_escape_sql( $o_id )."'";

    $rpQuery->query( $sql );

}

function rp_set_order_payment_method( $o_id = 0, $payment_method = '', $payment_status = '' ) {

    global $rpQuery;

    $rs_orders = $rpQuery->prefix . 'rs_orders';

    // payment_date_time = date('Y-m-d H:i:s')

    $sql = "UPDATE `$rs_orders` SET `payment_method` = '".rp_escape_sql($payment_method)."', 
    `payment_date_time` = '".date('Y-m-d H:i:s')."',
    `payment_status` = '".rp_escape_sql($payment_status)."' WHERE `o_id` = '".rp_escape_sql( $o_id )."'";

    $rpQuery->query( $sql );

}

// remove orders where payment method in stripe, paypal, mollie, ideal_in3 and payment_status is empty and it's been more than 24 hours
// it means user redirected to payment gateway but didn't complete the payment or didn't come back to the website
function rp_clear_pending_payment_orders() {

    global $rpQuery;

    $rs_orders = $rpQuery->prefix . 'rs_orders';

    // get all orders where payment method in stripe, paypal, mollie, ideal_in3 and payment_status is empty
    $sql = "SELECT * FROM $rs_orders WHERE payment_method IN ('stripe', 'paypal', 'mollie', 'ideal_in3') AND payment_status = 'Pending'";

    $orders = $rpQuery->get_results($sql);

    if( !empty($orders) ) {

        foreach( $orders as $order ) {

            $payment_date_time = strtotime($order->payment_date_time);

            $current_date = strtotime(date('Y-m-d H:i:s'));

            $diff = $current_date - $payment_date_time;

            $diff = $diff / 60 / 60;

            // 48 hours
            if( $diff > 48 ) {

                $rpQuery->query("DELETE FROM $rs_orders WHERE o_id = '".rp_escape_sql($order->o_id)."'");

            }

        }

    }

}

rp_add_action('init', 'rp_clear_pending_payment_orders', 9999);

function rp_get_payment_cls( $payment_method = '' ) {

    $payment_cls = NULL;

    if( $payment_method == 'stripe' ) {

        require_once WP_REPAIR_PLUGIN_PATH . 'payment_methods/RP_Stripe.php';

        $payment_cls = new RepairPluginPro\RP_Stripe();

    }

    if( $payment_method == 'paypal' ) {

        require_once WP_REPAIR_PLUGIN_PATH . 'payment_methods/RP_Paypal.php';

        $payment_cls = new RepairPluginPro\RP_Paypal();

    }

    if( $payment_method == 'mollie' ) {

        require_once WP_REPAIR_PLUGIN_PATH . 'payment_methods/RP_Mollie.php';

        $payment_cls = new RepairPluginPro\RP_Mollie();

    }

    if( $payment_method == 'ideal_in3' ) {

        require_once WP_REPAIR_PLUGIN_PATH . 'payment_methods/RP_iDEAL_in3.php';

        $payment_cls = new RepairPluginPro\RP_iDEAL_in3();

    }

    return $payment_cls;

}

function rp_get_payment_cancel_url( $data = array() ) {

    $cancel_url = ($data['cancel_url'] ?? '');

    $cancel_url = str_replace(' ', '%20', $cancel_url);

    $cancel_url = str_replace('—', '--', $cancel_url);

    return $cancel_url;

}

function rp_get_payment_redirect_url( $data = array() ) {

    $data['cancel_url'] = str_replace(' ', '%20', $data['cancel_url']);

    $data['cancel_url'] = str_replace('—', '--', $data['cancel_url']);

    $data['return_url'] = str_replace(' ', '%20', $data['return_url']);

    $data['return_url'] = str_replace('—', '--', $data['return_url']);

    $payment_cls = rp_get_payment_cls( $data['payment_method'] );

    if( empty($payment_cls) ) {

        return FALSE;

    }

    $redirect_url = $payment_cls->getRedirectURL( $data );

    $payment_cls->saveTransactionId( $data['order_id'] );

    return $redirect_url;

}

function rp_ideal_in3_payment_get_payment_status( $payload = array() ) {

	require_once RP_DP_PLUGIN_PATH . 'classes/RP_iDEAL_in3_API.php';

	$ideal_in3_api = new RepairPluginPro\RP_iDEAL_in3_API();

    $uqid = uniqid();
    
	$response = $ideal_in3_api->fetch('wp-admin/admin-ajax.php?rp_ideal_in3_payment_status=1&uqid='.$uqid, $payload);

    if( isset( $response ) && is_object( $response ) && property_exists( $response, 'type' ) ) {

        if( $response->type == 'success' && property_exists( $response, 'data' ) && !empty( $response->data ) ) {

            return ($response->data->payment_status ?? '');

        } else {

            throw new Exception('Error: ' . ($response->message ?? 'Unknown error occurred.'));

        }

    } else {

        throw new Exception('Invalid response received from iDEAL in3 API.');

    }

}

function rp_ideal_in3_payment_checkout_url( $payload = array() ) {

	require_once RP_DP_PLUGIN_PATH . 'classes/RP_iDEAL_in3_API.php';

	$ideal_in3_api = new RepairPluginPro\RP_iDEAL_in3_API();

    $uqid = uniqid();
    
	$response = $ideal_in3_api->fetch('wp-admin/admin-ajax.php?rp_ideal_in3_payment_checkout_url=1&uqid='.$uqid, $payload);

    if( isset( $response ) && is_object( $response ) && property_exists( $response, 'type' ) ) {

        if( $response->type == 'success' && property_exists( $response, 'data' ) && !empty( $response->data ) ) {

            return array( ($response->data->transaction_id ?? ''), ($response->data->checkout_url ?? '') );

        } else {

            throw new Exception('Error: ' . ($response->message ?? 'Unknown error occurred.'));

        }

    } else {

        throw new Exception('Invalid response received from iDEAL in3 API.');

    }

}

function rp_get_payment_related_info( $o_id = 0, $created_through_url = '', $thanks_page = '' ) {

    global $rpQuery;

    $rs_orders = $rpQuery->prefix . 'rs_orders';

    $sql = "SELECT * FROM $rs_orders WHERE o_id = '".rp_escape_sql($o_id)."'";

    $order = $rpQuery->get_row($sql);

    if( empty($order) ) {

        return FALSE;

    }

    $auth_code = rp_set_payment_auth_code( $o_id );

    $payment_method = $order->payment_method ?? '';

    //appointment_number
    $appointment_number = $order->appointment_number ?? '';

    //amount
    $amount = $order->total_price ?? 0;

    // return_url
    $return_url = rtrim( $created_through_url, '/' ) . '/?selected='.$thanks_page.'&appointment_number='.$appointment_number.'&auth_code='.$auth_code;

    // cancel_url
    $cancel_url = $order->reschedule_link ?? '';

    // replace reschedule=1 with payment_cancel=1
    $cancel_url = str_replace('reschedule=1', 'payment_cancel=1', $cancel_url);

    $m_id_fk = $order->m_id_fk ?? 0;

    $rs_model = $rpQuery->prefix . 'rs_model';

    $rs_brand = $rpQuery->prefix . 'rs_brand';

    $rs_category = $rpQuery->prefix . 'rs_category';

    // left join brand_id_fk with b_id and device_type with c_id (category)
    // left join rs_brand and rs_category on rs_model

    $sql = "SELECT m.m_name, b.b_name, c.c_name FROM $rs_model m LEFT JOIN $rs_brand b ON m.brand_id_fk = b.b_id LEFT JOIN $rs_category c ON m.device_type = c.c_id WHERE m_id = '".rp_escape_sql($m_id_fk)."'";

    $model = $rpQuery->get_row($sql);

    $model_name = ($model->c_name ?? '') . ' ' . ($model->b_name ?? '') . ' ' . ($model->m_name ?? '') . ' Repair';

    $model_name = trim($model_name);

    // description
    $description = $model_name;

    $data = array(
        'order_id' => $o_id,
        'payment_method' => $payment_method,
        'amount' => $amount,
        'appointment_number' => $appointment_number,
        'return_url' => $return_url,
        'cancel_url' => $cancel_url,
        'description' => $description
    );

    $rs_customer = $rpQuery->prefix . 'rs_customer';

    $sql = "SELECT * FROM $rs_customer WHERE customer_id = '".rp_escape_sql($order->customer_id_fk ?? 0)."'";

    $customer = $rpQuery->get_row($sql);

    if( !empty( $customer ) ) {

        $data['customer_first_name'] = $customer->customer_first_name ?? '';

        $data['customer_last_name'] = $customer->customer_last_name ?? '';

        $data['customer_email'] = $customer->customer_email ?? '';

        $data['customer_phone'] = $customer->customer_phone ?? '';

        $data['customer_house_no'] = $customer->customer_house_no ?? '';

        $data['customer_street_address'] = $customer->customer_street_address ?? '';

        $data['customer_city'] = $customer->customer_city ?? '';

        $data['customer_zipcode'] = $customer->customer_zipcode ?? '';

        $data['customer_country'] = $customer->customer_country ?? '';

        $data['customer_country_code'] = '';

        $rp_countries_list = rp_get_countries_list_data();

        foreach( $rp_countries_list as $countryName => $countryCode ) {

            if( strtolower( $countryName ) == strtolower( $customer->customer_country ?? '' ) ) {

                $data['customer_country_code'] = $countryCode;

                break;

            }

        }
        
    }

    return $data;

}

function rp_validate_payment_redirect() {

    global $rpQuery;

    global $wp_repair_lang;

    $rs_orders = $rpQuery->prefix . "rs_orders";

    RepairPluginPro\RP_Session_Handler::read();

    $order_id = $_SESSION['o_id'] ?? '';

    $validate_payment_methods = array('paypal', 'stripe', 'mollie', 'ideal_in3');

    if(isset($order_id) && !empty($order_id) && isset( $_REQUEST['auth_code'] ) && !empty( $_REQUEST['auth_code'] )){

        $order = $rpQuery->get_row("SELECT * FROM $rs_orders WHERE o_id = '".rp_escape_sql($order_id)."'");

        if( !empty($order) && !empty( ($order->payment_method ?? '') ) && in_array( ($order->payment_method ?? ''), $validate_payment_methods ) ) {

            $payment_info = array();

            $auth_code_verified = FALSE;

            if( isset( $_REQUEST['auth_code'] ) && !empty( $_REQUEST['auth_code'] ) ) {

                $payment_auth = $order->payment_auth ?? '';

                $auth_code_verified = password_verify( $_REQUEST['auth_code'], $payment_auth );

            }

            if( $auth_code_verified == TRUE ) {

                try {

                    $payment_cls = rp_get_payment_cls( $order->payment_method );
    
                    if( !empty( $payment_cls ) ) {
    
                        if( $order->payment_method == 'stripe' ) {
    
                            $session_id = $_REQUEST['session_id'] ?? '';
    
                            $payment_info = $payment_cls->getPaymentInfo( $session_id );
            
                        }
    
                        if( $order->payment_method == 'mollie' ) {
    
                            $transaction_id = $payment_cls->getTransationId( $order_id );
    
                            $payment_info = $payment_cls->getPaymentInfo( $transaction_id );
            
                        }

                        if( $order->payment_method == 'ideal_in3' ) {
    
                            $transaction_id = $payment_cls->getTransationId( $order_id );
    
                            $payment_info = $payment_cls->getPaymentInfo( $transaction_id );
            
                        }
    
                        if( $order->payment_method == 'paypal' ) {
    
                            $payment_id = $_REQUEST['paymentId'] ?? '';
    
                            $payer_id = $_REQUEST['PayerID'] ?? '';
    
                            $payment_info = $payment_cls->getPaymentInfo( $payment_id, $payer_id );
            
                        }
    
                    }
    
                } catch (Exception|Error $e) {
    
                    $payment_info = array();
    
                }

            }

            if( !empty( $payment_info ) ) {

                $order_id = $order->o_id;

                // everything is good
                $payment_status = $payment_info['status'] ?? '';

                //payment_id
                $payment_id = $payment_info['payment_id'] ?? '';

                // payment_date
                $payment_date = $payment_info['payment_date'] ?? date('Y-m-d H:i:s');

                $rpQuery->query("UPDATE $rs_orders SET `payment_status`='".rp_escape_sql($payment_status)."', `transaction_id`='".rp_escape_sql($payment_id)."', `payment_date_time`='".rp_escape_sql($payment_date)."' WHERE `o_id` = '".rp_escape_sql($order_id)."'");

            } else {

                // redirect to cancel url...
                // cancel_url
                $cancel_url = $order->reschedule_link ?? '';

                // replace reschedule=1 with payment_cancel=1
                $cancel_url = str_replace('reschedule=1', 'payment_cancel=1', $cancel_url);

                // script tag is already open where this function is called

                RepairPluginPro\RP_Session_Handler::start();

                $_SESSION['o_id'] = '';

                RepairPluginPro\RP_Session_Handler::close();

                echo 'window.location.href = "'.$cancel_url . '";</script>';

                exit;

            }

        }

    }

}

function rp_get_delivery_method_of_order( $o_id = 0 ) {

    if( empty( $o_id ) ) {

        return FALSE;

    }

    global $rpQuery;

    $rs_orders = $rpQuery->prefix . 'rs_orders';

    $sql = "SELECT * FROM $rs_orders WHERE o_id = '".rp_escape_sql($o_id)."'";

    $order = $rpQuery->get_row($sql);

    if( empty($order) ) {

        return FALSE;

    }

    $delivery_method = $order->delivery_method ?? '';

    return rp_prettify_order_delivery_method( $delivery_method );

}

function rp_prettify_order_delivery_method( $delivery_method = '' ) {

    // remove one or more space with single space
    $delivery_method = preg_replace('/\s+/', ' ', $delivery_method);

    // trim
    $delivery_method = trim( $delivery_method );

    // strtolower
    $delivery_method = strtolower( $delivery_method );

    // replace space or - with _
    $delivery_method = preg_replace('/\s+/', '_', $delivery_method);

    $delivery_method = preg_replace('/-+/', '_', $delivery_method);

    // replace _by and _your with empty
    $delivery_method = str_replace('_by', '', $delivery_method);

    $delivery_method = str_replace('_your', '', $delivery_method);

    return $delivery_method;

}

function rp_generate_unique_payment_authentication_code( $length = 32 ) {

    if( empty( $length ) ) {

        return FALSE;

    }

    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

    $charactersLength = strlen($characters);

    $randomString = '';

    for ($i = 0; $i < $length; $i++) {

        $randomString .= $characters[rand(0, $charactersLength - 1)];

    }

    return $randomString;

}

function rp_set_payment_auth_code( $o_id = 0 ) {

    if( empty( $o_id ) ) {

        return FALSE;

    }

    global $rpQuery;

    $rs_orders = $rpQuery->prefix . 'rs_orders';

    //payment_auth (column)
    $payment_auth = rp_generate_unique_payment_authentication_code( 32 );

    // hash it
    $payment_auth_hashed = password_hash($payment_auth, PASSWORD_DEFAULT);

    $sql = "UPDATE $rs_orders SET `payment_auth` = '".rp_escape_sql($payment_auth_hashed)."' WHERE `o_id` = '".rp_escape_sql($o_id)."'";

    $rpQuery->query( $sql );

    return $payment_auth;

}

function rp_get_payment_method_and_status_english( $order_info = NULL ) {

    $payment_method = ( $order_info->payment_method ?? '' );

    if( $payment_method=='pay_after_repair' ) {

        $payment_method = 'Pay after repair';

    } else if( $payment_method=='stripe' ) {

        $payment_method = 'Stripe';

    } else if( $payment_method=='paypal' ) {

        $payment_method = 'Paypal';

    } else if( $payment_method=='mollie' ) {

        $payment_method = 'Mollie';

    } else if( $payment_method=='ideal_in3' ) {

        $payment_method = 'iDEAL in3';

    } else {

        $payment_method = '';

    }

    $payment_status = ( $order_info->payment_status ?? '' );

    $payment_status = ucfirst($payment_status);

    return array( $payment_method, $payment_status );

}

function rp_get_payment_method_and_status_translation( $order_info = NULL ) {

    global $wp_repair_lang;

    $payment_method = ( $order_info->payment_method ?? '' );

    if( $payment_method=='pay_after_repair' ) {

        $payment_method = $wp_repair_lang['rp_pay_repair_label'];

    } else if( $payment_method=='stripe' ) {

        $payment_method = $wp_repair_lang['rp_stripe_label'];

    } else if( $payment_method=='paypal' ) {

        $payment_method = $wp_repair_lang['rp_paypal_label'];

    } else if( $payment_method=='mollie' ) {

        $payment_method = $wp_repair_lang['rp_mollie_label'];

    } else if( $payment_method=='ideal_in3' ) {

        $payment_method = $wp_repair_lang['rp_ideal_in3_label'];

    } else {

        $payment_method = '';

    }

    $payment_status = ( $order_info->payment_status ?? '' );

    if( !empty( $payment_status ) && isset( $wp_repair_lang['payment_status_'.strtolower($payment_status)] ) ) {

        $payment_status = $wp_repair_lang['payment_status_'.strtolower($payment_status)];

    } else {

        $payment_status = ucfirst($payment_status);

    }

    return array( $payment_method, $payment_status );

}

function rp_processing_your_request_message() {

    global $wp_repair_lang;

    $selected = ($_REQUEST['selected'] ?? '');

    $show_on = array(

        'thanks',

        'finalize',

        'shortcode_thanks',

        'shortcode_finalize_order',

        'approve',

        'cancel'
        
    );

    // check if selected start with any of the above
    $show = FALSE;

    foreach( $show_on as $item ) {

        if( strpos($selected, $item) === 0 ) {

            $show = TRUE;

            break;

        }

    }

    if( $show == FALSE ) {

        return;

    }

    ?>
    <div class="rp-processing-request">
          <!-- Processing request -->
          <!-- Please wait it may take a while -->
          <h1 class="rp-processing-request-title"><?php echo $wp_repair_lang['processing_your_request']; ?></h1>
          <div class="rp-progress-container">
          <div class="rp-progress-bar" id="myBar"></div>
          </div>
          <p class="rp-processing-request-subtitle"><?php echo $wp_repair_lang['please_wait_it_may_take_a_while']; ?></p>
    </div>
    <?php

}

function rp_get_supported_payment_methods_by_delivery_method( $delivery_method = '', $total_price = 0 ) {

    if( empty( $delivery_method ) ) {

        return array();

    }

    if( ($total_price ?? 0) > 0 ) {
                  
        // Everything is good

    } else {

        return array();

    }

    // replace double space with single space
    $delivery_method = preg_replace('/\s+/', ' ', $delivery_method);

    // trim
    $delivery_method = trim( $delivery_method );

    // lowercase
    $delivery_method = strtolower( $delivery_method );

    // replace space with _
    $delivery_method = preg_replace('/\s+/', '_', $delivery_method);

    // replace _by_ and _your_ with _
    $delivery_method = str_replace('_by_', '_', $delivery_method);

    $delivery_method = str_replace('_your_', '_', $delivery_method);

    $all_payment_methods = rp_get_sorted_payment_methods();

    //rp_check_if_payment_method_is_active
    foreach( $all_payment_methods as $key => $method ) {

        if( rp_check_if_payment_method_is_active( $method ) == FALSE ) {

            unset($all_payment_methods[$key]);

        }

    }

    // rp_{payment_method}_{delivery_method}
    foreach( $all_payment_methods as $key => $method ) {

        $active = rp_get_option('rp_'.$method.'_'.$delivery_method, '1');

        if( $active != '1' ) {

            unset($all_payment_methods[$key]);

        }

    }

    // unique
    $all_payment_methods = array_unique($all_payment_methods);

    // array values (reset keys)
    $all_payment_methods = array_values($all_payment_methods);

    if( !empty( $all_payment_methods ) && in_array( 'ideal_in3', $all_payment_methods ) ) {

        if( ($total_price ?? 0) >= 50 && ($total_price ?? 0) <= 5000 ) {

            // Everything is good

        } else {

            // Remove iDEAL in3 from active payment methods
            $all_payment_methods = array_diff( $all_payment_methods, array('ideal_in3') );

            $all_payment_methods = array_values( $all_payment_methods );

        }

    }

    return $all_payment_methods;

}

F1le Man4ger