From 398b0a03378387b62d345627941311d4facf55ec Mon Sep 17 00:00:00 2001 From: Abdullah Asendar Date: Thu, 24 Sep 2020 11:39:56 +0300 Subject: [PATCH 1/2] code cleaning --- .../assets/images/pointcheckout.png | Bin 14399 -> 50700 bytes .../assets/js/checkout.js | 41 +-- .../class-woocommerce-pointcheckout.php | 259 +++++++-------- .../lib/class-pc-config.php} | 93 +++--- .../lib/class-pc-order.php} | 11 +- .../lib/class-pc-parent.php} | 3 +- .../includes/lib/class-pc-payment-service.php | 209 ++++++++++++ .../includes/lib/class-pc-utils.php | 81 +++++ .../includes/lib/index.php | 7 + .../lib/pointcheckout/classes/Payment.php | 301 ------------------ .../lib/pointcheckout/classes/Util.php | 13 - .../lib/pointcheckout/init.php | 7 - .../woocommerce-pointcheckout.php | 45 ++- 13 files changed, 496 insertions(+), 574 deletions(-) mode change 100755 => 100644 pointcheckout_pointcheckoutpay/assets/images/pointcheckout.png rename pointcheckout_pointcheckoutpay/{classes => includes}/class-woocommerce-pointcheckout.php (56%) rename pointcheckout_pointcheckoutpay/{lib/pointcheckout/classes/Config.php => includes/lib/class-pc-config.php} (69%) rename pointcheckout_pointcheckoutpay/{lib/pointcheckout/classes/Order.php => includes/lib/class-pc-order.php} (91%) rename pointcheckout_pointcheckoutpay/{lib/pointcheckout/classes/Super.php => includes/lib/class-pc-parent.php} (54%) create mode 100755 pointcheckout_pointcheckoutpay/includes/lib/class-pc-payment-service.php create mode 100755 pointcheckout_pointcheckoutpay/includes/lib/class-pc-utils.php create mode 100644 pointcheckout_pointcheckoutpay/includes/lib/index.php delete mode 100755 pointcheckout_pointcheckoutpay/lib/pointcheckout/classes/Payment.php delete mode 100755 pointcheckout_pointcheckoutpay/lib/pointcheckout/classes/Util.php delete mode 100755 pointcheckout_pointcheckoutpay/lib/pointcheckout/init.php diff --git a/pointcheckout_pointcheckoutpay/assets/images/pointcheckout.png b/pointcheckout_pointcheckoutpay/assets/images/pointcheckout.png old mode 100755 new mode 100644 index 48c5078a6e007bacd84dffaead6fb8c8bab740a0..9897037a5dd0947719d099e91ca2dbb6172729d6 GIT binary patch literal 50700 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 hcPkEs;_k(Y7X6<0OHST%awgd` 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 diff --git a/pointcheckout_pointcheckoutpay/assets/js/checkout.js b/pointcheckout_pointcheckoutpay/assets/js/checkout.js index 078947b..29a45db 100755 --- a/pointcheckout_pointcheckoutpay/assets/js/checkout.js +++ b/pointcheckout_pointcheckoutpay/assets/js/checkout.js @@ -1,8 +1,11 @@ -jQuery('form.checkout').on('submit', function (e){ +var extensionName = ''; + + +jQuery('form.checkout').on('submit', function (e) { var paymentMethod = jQuery('input[name=payment_method]:checked').val(); - if("pointcheckout_pay" === paymentMethod ) { + if (extensionName === paymentMethod) { e.preventDefault(); e.stopImmediatePropagation(); return pointcheckoutFormHandler(jQuery(this)); @@ -12,22 +15,22 @@ jQuery('form.checkout').on('submit', function (e){ function showError(form, data) { // Remove notices from all sources - jQuery( '.woocommerce-error, .woocommerce-message' ).remove(); + jQuery('.woocommerce-error, .woocommerce-message').remove(); // Add new errors returned by this event - if ( data.messages ) { - form.prepend( '
' + data.messages + '
' ); + if (data.messages) { + form.prepend('
' + data.messages + '
'); } else { - form.prepend( data ); + form.prepend(data); } // Lose focus for all fields - form.find( '.input-text, select, input:checkbox' ).blur(); + form.find('.input-text, select, input:checkbox').blur(); // Scroll to top - jQuery( 'html, body' ).animate( { - scrollTop: ( jQuery( form ).offset().top - 100 ) - }, 1000 ); + jQuery('html, body').animate({ + scrollTop: (jQuery(form).offset().top - 100) + }, 1000); } function pointcheckoutFormHandler(form) { @@ -37,7 +40,7 @@ function pointcheckoutFormHandler(form) { function initPointCheckoutPayment(form) { - var data = jQuery(form).serialize(); + var data = jQuery(form).serialize(); var ajaxUrl = wc_checkout_params.checkout_url; jQuery.ajax({ 'url': ajaxUrl, @@ -47,24 +50,24 @@ function initPointCheckoutPayment(form) { 'async': false }).complete(function (response) { data = ''; - if(response.form) { + if (response.form) { data = response; } - else{ + else { var code = response.responseText; var newstring = code.replace(/]*>(.*)<\/script>/, ""); if (newstring.indexOf("") >= 0) { - newstring = newstring.split("")[1]; + newstring = newstring.split("")[1]; } if (newstring.indexOf("") >= 0) { - newstring = newstring.split("")[0]; + newstring = newstring.split("")[0]; } try { - data = jQuery.parseJSON( newstring ); + data = jQuery.parseJSON(newstring); } - catch(e) {} + catch (e) { } } - if(data.result == 'failure') { + if (data.result == 'failure') { showError(form, data); return !1; } @@ -72,7 +75,7 @@ function initPointCheckoutPayment(form) { jQuery('#frm_pointcheckout_payment').remove(); jQuery('body').append(data.form); window.success = true; - jQuery( "#frm_pointcheckout_payment" ).submit(); + jQuery("#frm_pointcheckout_payment").submit(); } }); } \ No newline at end of file diff --git a/pointcheckout_pointcheckoutpay/classes/class-woocommerce-pointcheckout.php b/pointcheckout_pointcheckoutpay/includes/class-woocommerce-pointcheckout.php similarity index 56% rename from pointcheckout_pointcheckoutpay/classes/class-woocommerce-pointcheckout.php rename to pointcheckout_pointcheckoutpay/includes/class-woocommerce-pointcheckout.php index 858ec2d..18024a3 100755 --- a/pointcheckout_pointcheckoutpay/classes/class-woocommerce-pointcheckout.php +++ b/pointcheckout_pointcheckoutpay/includes/class-woocommerce-pointcheckout.php @@ -1,78 +1,74 @@ has_fields = false; - $this->icon = apply_filters('woocommerce_POINTCHECKOUT_icon', 'https://www.pointcheckout.com/image/logo.png'); - if(is_admin()) { + $this->icon = apply_filters('woocommerce_POINTCHECKOUT_icon', 'https://www.pointcheckout.com/img/logo/logo.svg'); + if (is_admin()) { $this->has_fields = true; $this->init_form_fields(); } - + // Define user set variables - $this->method_title = __( 'PointCheckout', 'woocommerce' ); - $this->title ='PointCheckout'; - $this->description = __('Pay for your cart using PointCheckout payment method '.' more details about PointCheckout?', 'pointcheckout_pointcheckoutpay'); - $this->pfConfig = PointCheckout_PointCheckoutPay_Config::getInstance(); - $this->pfPayment = PointCheckout_PointCheckoutPay_Payment::getInstance(); - - - + $this->method_title = __('PointCheckout', 'woocommerce'); + $this->title = 'PointCheckout'; + $this->description = __('Pay for your cart using PointCheckout payment method ' . ' more details about PointCheckout?', 'pointcheckout_pointcheckoutpay'); + $this->paymentService = PointCheckout_PointCheckoutPay_Payment::getInstance(); + $this->config = PointCheckout_PointCheckoutPay_Config::getInstance(); + // Actions add_action('woocommerce_receipt_' . $this->id, array($this, 'receipt_page')); add_action('wp_enqueue_scripts', array($this, 'payment_scripts')); - + // Save options add_action('woocommerce_update_options_payment_gateways_' . $this->id, array($this, 'process_admin_options')); add_action('woocommerce_wc_gateway_pointcheckout_process_response', array($this, 'process_response')); } - function process_admin_options() { + function process_admin_options() + { $result = parent::process_admin_options(); - $post_data = $this->get_post_data(); $settings = $this->settings; - $pointcheckoutSettings = array(); - $pointcheckoutSettings['enabled'] = isset($settings['enabled']) ? $settings['enabled'] : 0; - - update_option( 'woocommerce_pointcheckout_settings', apply_filters( 'woocommerce_settings_api_sanitized_fields_pointcheckout', $pointcheckoutSettings ) ); + + update_option('woocommerce_pointcheckout_settings', apply_filters('woocommerce_settings_api_sanitized_fields_pointcheckout', $pointcheckoutSettings)); return $result; } - - + + public function is_available() { - if (! $this->pfConfig->isEnabled()) + if (!$this->config->isEnabled()) return false; $valid = true; - if ($this->pfConfig->isSpecificUserRoles()) { + if ($this->config->isSpecificUserRoles()) { $valid = false; $user_id = WC()->customer->get_id(); $user = new WP_User($user_id); - if (! empty($user->roles) && is_array($user->roles)) { + if (!empty($user->roles) && is_array($user->roles)) { foreach ($user->roles as $user_role) - foreach ($this->pfConfig->getSpecificUserRoles() as $role) { - if ($role == $user_role) { - $valid = true; + foreach ($this->config->getSpecificUserRoles() as $role) { + if ($role == $user_role) { + $valid = true; + } } - } } } - - if ($valid && $this->pfConfig->isSpecificCountries()) { + + if ($valid && $this->config->isSpecificCountries()) { $valid = false; $billingCountry = WC()->customer->get_billing_country(); - - if (! $billingCountry == null) { - foreach ($this->pfConfig->getSpecificCountries() as $country) { + + if (!$billingCountry == null) { + foreach ($this->config->getSpecificCountries() as $country) { if ($country == $billingCountry) { $valid = true; } @@ -85,14 +81,14 @@ public function is_available() return false; } } - + function payment_scripts() { global $woocommerce; if (!is_checkout()) { return; } - wp_enqueue_script('pointcheckoutpayjs-checkout', POINTCHECKOUT_PAY_URL . 'assets/js/checkout.js', array(), WC_VERSION, true); + wp_enqueue_script('pointcheckoutpayjs-checkout', POINTCHECKOUT_URL . 'assets/js/checkout.js', array(), WC_VERSION, true); } /** @@ -103,46 +99,47 @@ function payment_scripts() */ public function admin_options() { - ?> +?>

PointCheckout website.', 'pointcheckout_pointcheckoutpay'); ?>

- +
generate_settings_html(); ?> - -
- + + + 'select', 'label' => __('Enable the PointCheckout gateway', 'pointcheckout_pointcheckoutpay'), 'default' => '0', - 'options' =>array( + 'options' => array( '1' => __('Enabled', 'pointcheckout_pointcheckoutpay'), '0' => __('Disabled', 'pointcheckout_pointcheckoutpay'), ) @@ -171,13 +168,13 @@ function init_form_fields() 'default' => __('Pay for your items with your collected reward points', 'pointcheckout_pointcheckoutpay') ), 'mode' => array( - 'title' => __( 'Mode', 'pointcheckout_pointcheckoutpay'), + 'title' => __('Mode', 'pointcheckout_pointcheckoutpay'), 'type' => 'select', - 'options' => $staging_enabled?array( + 'options' => $staging_enabled ? array( '1' => __('live', 'pointcheckout_pointcheckoutpay'), '0' => __('testing', 'pointcheckout_pointcheckoutpay'), '2' => __('Staging', 'pointcheckout_pointcheckoutpay'), - ):array( + ) : array( '1' => __('live', 'pointcheckout_pointcheckoutpay'), '0' => __('testing', 'pointcheckout_pointcheckoutpay'), ), @@ -203,30 +200,32 @@ function init_form_fields() 'desc_tip' => true, 'placeholder' => '' ), - 'allow_specific'=>array( + 'allow_specific' => array( 'title' => __('Applicable Countries', 'pointcheckout_pointcheckoutpay'), 'type' => 'select', 'options' => array( '0' => __('All Countries', 'pointcheckout_pointcheckoutpay'), - '1' => __('Specific countries only', 'pointcheckout_pointcheckoutpay')) + '1' => __('Specific countries only', 'pointcheckout_pointcheckoutpay') + ) ), - 'specific_countries'=>array( - 'title' => __( 'Specific Countries','pointcheckout_pointcheckoutpay' ), + 'specific_countries' => array( + 'title' => __('Specific Countries', 'pointcheckout_pointcheckoutpay'), 'desc' => '', 'css' => 'min-width: 350px;min-height:300px;', 'default' => 'wc_get_base_location()', 'type' => 'multiselect', 'options' => $this->getCountries() ), - 'allow_user_specific'=>array( + 'allow_user_specific' => array( 'title' => __('Applicable User Roles', 'pointcheckout_pointcheckoutpay'), 'type' => 'select', 'options' => array( '0' => __('All User Roles', 'pointcheckout_pointcheckoutpay'), - '1' => __('Specific Roles only', 'pointcheckout_pointcheckoutpay')) + '1' => __('Specific Roles only', 'pointcheckout_pointcheckoutpay') + ) ), - 'specific_user_roles'=>array( - 'title' => __( 'Specific User Roles','pointcheckout_pointcheckoutpay' ), + 'specific_user_roles' => array( + 'title' => __('Specific User Roles', 'pointcheckout_pointcheckoutpay'), 'desc' => '', 'css' => 'min-width: 350px;min-height:300px;', 'default' => 'wc_get_base_role()', @@ -235,99 +234,67 @@ function init_form_fields() ) ); } - - - function getCountries(){ + + + function getCountries() + { $countries_obj = new WC_Countries(); $countries = $countries_obj->__get('countries'); - + return $countries; } - - function getRoles(){ + + function getRoles() + { global $wp_roles; $all_roles = $wp_roles->roles; $editable_roles = apply_filters('editable_roles', $all_roles); $user_roles = array(); - + foreach ($editable_roles as $k => $v) { $user_roles[$k] = $k; } return $user_roles; } - - /** - * Process the payment and return the result - * - * @access public - * @param int $order_id - * @return array - */ function process_payment($order_id) { - global $woocommerce; $order = new WC_Order($order_id); if (!isset($_GET['response_code'])) { - $payment_method = $_POST['payment_method']; - $paymentMethod = POINTCHECKOUT_PAY_PAYMENT_METHOD; - $postData = array(); - $gatewayUrl = '#'; update_post_meta($order->id, '_payment_method_title', 'PointCheckout'); - update_post_meta($order->id, '_payment_method', POINTCHECKOUT_PAY_PAYMENT_METHOD); - } - $form = $this->pfPayment->getPaymentRequestForm(); - $note = $this->pfPayment->getPointCheckoutOrderHistoryMessage($form['response']->result->checkoutId, 0, $form['response']->result->status, ''); - $order->add_order_note( $note ); - $result = array('result' => 'success', 'form' => $form['form']); - if (isset($_POST['woocommerce_pay']) && isset($_POST['_wpnonce']) && wp_verify_nonce($_POST['_wpnonce'], 'woocommerce-pay')) { - wp_send_json($result); - exit; - }else { - return $result; - } + update_post_meta($order->id, '_payment_method', POINTCHECKOUT_PAYMENT_METHOD); + } + $form = $this->paymentService->getPaymentRequestForm(); + $note = $this->paymentService->getOrderHistoryMessage($form['response']->result->id, 0, $form['response']->result->status, ''); + $order->add_order_note($note); + $result = array('result' => 'success', 'form' => $form['form']); + if (isset($_POST['woocommerce_pay']) && isset($_POST['_wpnonce']) && wp_verify_nonce($_POST['_wpnonce'], 'woocommerce-pay')) { + wp_send_json($result); + exit; + } else { + return $result; } - - - - public function process_response() - { - $this->_handleResponse(); } - private function _handleResponse() + + public function process_response() { + global $woocommerce; - //send the secound call to pointcheckout to confirm payment - $success = $this->pfPayment->handlePointCheckoutResponse(); - $order = wc_get_order($_REQUEST['reference']); - if ($success['success']) { - $order->payment_complete(); - WC()->session->set('refresh_totals', true); - $redirectUrl = $this->get_return_url($order); - } - else { - $redirectUrl = esc_url($woocommerce->cart->get_checkout_url()); - $order->cancel_order(); - } - echo ''; - exit; - } + //send the secound call to pointcheckout to confirm payment + $success = $this->paymentService->checkPaymentStatus(); - /** - * Generate the credit card payment form - * - * @access public - * @param none - * @return string - */ - function payment_fields() - { - // Access the global object - if ($this->description) { - echo "

" . $this->description . "

"; + $order = wc_get_order($_REQUEST['reference']); + if ($success['success']) { + $order->payment_complete(); + WC()->session->set('refresh_totals', true); + $redirectUrl = $this->get_return_url($order); + } else { + $redirectUrl = esc_url($woocommerce->cart->get_checkout_url()); + $order->cancel_order(); } - + echo ''; + exit; } } diff --git a/pointcheckout_pointcheckoutpay/lib/pointcheckout/classes/Config.php b/pointcheckout_pointcheckoutpay/includes/lib/class-pc-config.php similarity index 69% rename from pointcheckout_pointcheckoutpay/lib/pointcheckout/classes/Config.php rename to pointcheckout_pointcheckoutpay/includes/lib/class-pc-config.php index cdf1722..19fc6f9 100755 --- a/pointcheckout_pointcheckoutpay/lib/pointcheckout/classes/Config.php +++ b/pointcheckout_pointcheckoutpay/includes/lib/class-pc-config.php @@ -1,36 +1,25 @@ logFileDir = WC_LOG_DIR. 'pointcheckout.log'; - - $this->init_settings(); $this->language = $this->_getShoppingCartConfig('language'); $this->enabled = $this->_getShoppingCartConfig('enabled'); $this->Api_Key = $this->_getShoppingCartConfig('Api_Key'); @@ -46,7 +35,7 @@ public function __construct() } /** - * @return PointCheckout_PointCheckoutPay_Config + * @return Config */ public static function getInstance() { @@ -67,7 +56,7 @@ public function getLanguage() } - + public function getEnabled() { return $this->enabled; @@ -79,7 +68,7 @@ public function getMode() } - + public function getSuccessOrderStatusId() @@ -87,7 +76,7 @@ public function getSuccessOrderStatusId() return $this->successOrderStatusId; } - + public function isActive() { @@ -96,30 +85,35 @@ public function isActive() } return false; } - - public function isSpecificCountries(){ - return $this->allowSpecific == 1?true:false; + + public function isSpecificCountries() + { + return $this->allowSpecific == 1 ? true : false; } - - public function getSpecificCountries(){ + + public function getSpecificCountries() + { return $this->specific_countries; } - - public function isSpecificUserRoles(){ - return $this->allowUserSpecific == 1?true:false; + + public function isSpecificUserRoles() + { + return $this->allowUserSpecific == 1 ? true : false; } - - public function getSpecificUserRoles(){ + + public function getSpecificUserRoles() + { return $this->specific_uesr_roles; } - - public function getNewOrderStatus(){ + + public function getNewOrderStatus() + { return $this->new_order_status; } - - - + + + public function getOrderPlacement() { return $this->orderPlacement; @@ -141,33 +135,28 @@ public function orderPlacementIsOnSuccess() return false; } - public function isEnabled(){ - return $this->enabled == 1?true:false; + public function isEnabled() + { + return $this->enabled == 1 ? true : false; } - public function getApiKey(){ + public function getApiKey() + { return $this->Api_Key; } - - public function getApiSecret(){ + + public function getApiSecret() + { return $this->Api_Secret; } - - public function isLiveMode(){ - return $this->Mode == 1?true:false; - } - - public function isStagingMode(){ - return $this->Mode == 2?true:false; - } - - - public function getLogFileDir() + public function isLiveMode() { - return $this->logFileDir; + return $this->Mode == 1 ? true : false; } + public function isStagingMode() + { + return $this->Mode == 2 ? true : false; + } } - -?> \ No newline at end of file diff --git a/pointcheckout_pointcheckoutpay/lib/pointcheckout/classes/Order.php b/pointcheckout_pointcheckoutpay/includes/lib/class-pc-order.php similarity index 91% rename from pointcheckout_pointcheckoutpay/lib/pointcheckout/classes/Order.php rename to pointcheckout_pointcheckoutpay/includes/lib/class-pc-order.php index e3d63bb..1dc7c0b 100755 --- a/pointcheckout_pointcheckoutpay/lib/pointcheckout/classes/Order.php +++ b/pointcheckout_pointcheckoutpay/includes/lib/class-pc-order.php @@ -1,17 +1,10 @@ pfConfig = PointCheckout_PointCheckoutPay_Config::getInstance(); - } public function loadOrder($orderId) { @@ -112,5 +105,3 @@ public function getStatusId() } } - -?> \ No newline at end of file diff --git a/pointcheckout_pointcheckoutpay/lib/pointcheckout/classes/Super.php b/pointcheckout_pointcheckoutpay/includes/lib/class-pc-parent.php similarity index 54% rename from pointcheckout_pointcheckoutpay/lib/pointcheckout/classes/Super.php rename to pointcheckout_pointcheckoutpay/includes/lib/class-pc-parent.php index bf24c67..0587210 100755 --- a/pointcheckout_pointcheckoutpay/lib/pointcheckout/classes/Super.php +++ b/pointcheckout_pointcheckoutpay/includes/lib/class-pc-parent.php @@ -1,11 +1,10 @@ pcOrder = new PointCheckout_PointCheckoutPay_Order(); + $this->pcConfig = PointCheckout_PointCheckoutPay_Config::getInstance(); + $this->pcUtils = new PointCheckout_PointCheckoutPay_Utils(); + } + + public static function getInstance() + { + if (self::$instance === null) { + self::$instance = new PointCheckout_PointCheckoutPay_Payment(); + } + return self::$instance; + } + + public function getPaymentRequestParams() + { + $orderId = $this->pcOrder->getSessionOrderId(); + $order = new WC_order($orderId); + $this->pcOrder->loadOrder($orderId); + $order->update_status($this->pcConfig->getNewOrderStatus()); + + $params = array( + 'transactionId' => $orderId, + ); + + $cartItems = $order->get_items(); + $items = array(); + $i = 0; + foreach ($cartItems as $item_id => $item_data) { + $product = $item_data->get_product(); + $item = (object) array( + 'name' => $product->get_name(), + 'sku' => $product->get_sku(), + 'quantity' => $item_data->get_quantity(), + 'type' => $product->get_type(), + 'total' => $item_data->get_total() + ); + //in case of bundles the bundle group item total is set to zero here to prevent conflict in totals + if ($product->get_type() == 'bundle') { + $item->total = 0; + } + $items[$i++] = $item; + } + $params['items'] = array_values($items); + $params['amount'] = $this->pcOrder->getTotal(); + $params['tax'] = $this->pcOrder->getTaxAmount(); + $params['shipping'] = $this->pcOrder->getShippingAmount(); + $params['subtotal'] = $this->pcOrder->getSubtotal(); + $params['discount'] = $this->pcOrder->getDiscountAmount(); + $params['currency'] = $this->pcOrder->getCurrencyCode(); + $params['paymentMethods'] = ["CARD"]; + + $customer = array(); + + $billingAddress = array(); + $billingAddress['name'] = $order->get_billing_first_name() . ' ' . $order->get_billing_last_name(); + $billingAddress['address1'] = $order->get_billing_address_1(); + $billingAddress['address2'] = $order->get_billing_address_2(); + $billingAddress['city'] = $order->get_billing_city(); + $billingAddress['country'] = $order->get_billing_country(); + + $shippingAddress = array(); + $shippingAddress['name'] = $order->get_shipping_first_name() . ' ' . $order->get_shipping_last_name(); + $shippingAddress['address1'] = $order->get_shipping_address_1(); + $shippingAddress['address2'] = $order->get_shipping_address_2(); + $shippingAddress['city'] = $order->get_shipping_city(); + $shippingAddress['country'] = $order->get_shipping_country(); + + $customer['billingAddress'] = $billingAddress; + $customer['shippingAddress'] = $shippingAddress; + $customer['firstname'] = $order->get_billing_first_name(); + $customer['lastname'] = $order->get_billing_last_name(); + $customer['email'] = $order->get_billing_email(); + $customer['phone'] = $order->get_billing_phone(); + + $params['customer'] = $customer; + + return $params; + } + + /** + * build payment form + */ + public function getPaymentRequestForm() + { + + if (!$this->pcConfig->isEnabled()) { + return null; + } + $paymentRequestParams = $this->getPaymentRequestParams(); + $response = $this->postCheckout($paymentRequestParams); + if (($response->success == 'true')) { + $actionUrl = $response->result->redirectUrl; + WC()->session->set('checkoutId', $response->result->id); + } else { + $this->pcUtils->log('Failed while sending first request to pointchckout resone: ' . $response->error); + wc_add_notice(sprintf(__('Failed to process payment please try again later', 'error'))); + $actionUrl = get_site_url() . '/index.php/checkout'; + } + $this->pcOrder->clearSessionCurrentOrder(); + $form = '