|
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/ |
<?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;
}