id = 'nexapay'; $this->icon = apply_filters('woocommerce_nexapay_icon',plugins_url('/assets/icon.png',__FILE__)); $this->method_title = __('nexapay','wc_nexapay_payment'); $this->method_description = __('This plugin allows you to integrate with nexapay payments','wc_nexapay_payment'); $this->title = __( "nexapay", 'wc_nexapay_payment' ); $this->description = "nexapay Payment Setting page."; $this->has_fields = false; $this->init_form_fields(); $this->init_settings(); $this->title = $this->get_option('title'); $this->url = $this->settings['nexapay_url']; $this->key_id = $this->settings['key_id']; $this->secret_key = $this->settings['secret_key']; $this->description = $this->settings['description']; $this->prod_id = $this->settings['prod_id']; $this->request_hashkey = $this->settings['request_hashkey']; $this->response_hashkey = $this->settings['response_hashkey']; $this->request_saltkey = $this->settings['request_saltkey']; $this->response_saltkey = $this->settings['response_saltkey']; $this->request_aeskey = $this->settings['request_aeskey']; $this->response_aeskey = $this->settings['response_aeskey']; add_action('woocommerce_update_options_payment_gateways_'.$this->id, array($this,'process_admin_options')); //$link = function_exists( 'wc_get_cart_url' ) ? wc_get_cart_url() : $woocommerce->cart->get_cart_url(); $this->thank_you_page(); //http://localhost/wordpress/checkout/ // add_action('the_content', array(&$this, 'thank_you_page')); // add_action('woocommerce_thank_you_'.$this->id, array($this,'thank_you_page')); } public function init_form_fields(){ $this->form_fields = array( 'enabled' => array( 'title' => __( 'Enable/Disable', 'wc_nexapay_payment' ), 'type' => 'checkbox', 'label' => __( 'Enable or Disable nexapay Payments', 'wc_nexapay_payment' ), 'default' => 'yes' ), 'title' => array( 'title' => __( 'Title', 'wc_nexapay_payment' ), 'type' => 'text', 'description' => __( 'Add a new title for the nexapay Payments that customers will see when they are in the checkout page.', 'wc_payripe_payment' ), 'default' => __( 'NexaPay Your Digital Payments Partner', 'wc_nexapay_payment' ), 'desc_tip' => true, 'custom_attributes' => array('readonly' => 'readonly'), ), 'description' => array( 'title' => __( 'Description', 'wc_nexapay_payment' ), 'type' => 'textarea', 'default' =>__('Grow your business with the flawless integration of digital payments solutions!.', 'wc_nexapay_payment'), 'description'=> __('This controls the description which the user sees during checkout.', 'wc_nexapay_payment'), 'desc_tip'=> true, 'custom_attributes' => array('readonly' => 'readonly'), ), 'nexapay_url' => array( 'title' => __('Gateway Url', 'wc_nexapay_payment'), 'type' => 'text', 'default'=> __('https://prod.nexapay.in/payment/gateway/v1/initialrequest','wc_nexapay_payment'), 'description' => __('Will be provided by nexapay payment gateway', 'wc_nexapay_payment'), 'desc_tip' => true, 'custom_attributes' => array('readonly' => 'readonly'), ), 'key_id' => array( 'title' => __('Key Id', 'wc_nexapay_payment'), 'type' => 'text', 'description' => __('As provided by nexapay merchant website', 'wc_nexapay_payment'), 'desc_tip' => true ), 'secret_key' => array( 'title' => __('Secret Key', 'wc_nexapay_payment'), 'type' => 'text', 'description' => __('As provided by nexapay merchant website', 'wc_nexapay_payment'), 'desc_tip' => true ), 'prod_id' => array( 'title' => __('Product ID', 'wc_nexapay_payment'), 'type' => 'text', 'description' => __('Will be provided by nexapay merchant website after production movement', 'wc_nexapay_payment'), 'desc_tip' => true ), 'request_hashkey' => array( 'title' => __('Request Hashkey', 'wc_nexapay_payment'), 'type' => 'text', 'description' => __('Request hash key, provided by nexapay merchant web site', 'wc_nexapay_payment'), 'desc_tip' => true ), 'response_hashkey' => array( 'title' => __('Response Hashkey', 'wc_nexapay_payment'), 'type' => 'text', 'description' => __('Response Hashkey, provided by nexapay merchant web site', 'wc_nexapay_payment'), 'desc_tip' => true ), 'request_saltkey' => array( 'title' => __('Request Saltkey', 'wc_nexapay_payment'), 'type' => 'text', 'description' => __('Request Saltkey, provided by nexapay merchant web site', 'wc_nexapay_payment'), 'desc_tip' => true ), 'response_saltkey' => array( 'title' => __('Response Saltkey', 'wc_nexapay_payment'), 'type' => 'text', 'description' => __('Response Saltkey, provided by nexapay merchant web site', 'wc_nexapay_payment'), 'desc_tip' => true ),'request_aeskey' => array( 'title' => __('Request AESkey', 'wc_nexapay_payment'), 'type' => 'text', 'description' => __('Request AESkey, provided by nexapay merchant web site', 'wc_nexapay_payment'), 'desc_tip' => true ), 'response_aeskey' => array( 'title' => __('Response AESkey', 'wc_nexapay_payment'), 'type' => 'text', 'description' => __('Response AESkey, provided by nexapay merchant web site', 'wc_nexapay_payment'), 'desc_tip' => true ), ); } public function process_payment($order_id){ global $woocommerce; global $current_user; //get user details $current_user = wp_get_current_user(); $user_email = $current_user->user_email; $first_name = $current_user->user_login; $last_name = $current_user->shipping_last_name; $phone_number = $current_user->billing_phone; $country = $current_user->shipping_country; $state = $current_user->shipping_state; $city = $current_user->shipping_city; $postcode = $current_user->shipping_postcode; $address_1 = $current_user->shipping_address_1; $address_2 = $current_user->shipping_address_2; $udf2 = $first_name." ".$last_name; $udf3 = $country." ".$state." ".shipping_city." ".$address_1." ".$address_2." ".$postcode; // $udf4 = ""; // $udf5 = ""; $order= new WC_Order( $order_id ); $keyId = $this->key_id; $secretKey = $this->secret_key; $txnCurr = 'INR'; $amount = $order->get_total(); $emailId = $user_email; $username=$first_name; $mobileNumber = $phone_number; $prodId = $this->prod_id; $requestHashKey = $this->request_hashkey; $requestSaltKey = $this->request_saltkey; $requestAESKey = $this->request_aeskey; $message = $keyId.$secretKey.$txnCurr.$amount.$emailId.$mobileNumber; $signature =hash_hmac('sha256', $message, $requestHashKey); $myObj = (object)array(); $myObj->clientId= $this->key_id; $myObj->clientSecret= $this->secret_key; $myObj->txnCurr='INR'; $myObj->amount=$order->get_total(); $myObj->emailId= $user_email; $myObj->prodId= $this->prod_id; $myObj->username=$username; $myObj->mobileNumber=$phone_number; $myObj->signature=$signature; $myObj->udf1=$order_id; $myObj->udf2=$udf2; $myObj->udf3=$udf3; // $myObj->udf4=$udf4; // $myObj->udf5=$udf5; $myJSON = json_encode($myObj); $encryptJsonObj=$this-> encrypt($myJSON,$requestSaltKey,$requestAESKey); $order = wc_get_order($order_id); $order ->update_status('on-hold',__('Awaiting nexapay Payment','wc_nexapay_payment')); $param = "clientKey=".$keyId."&encrypt=".$encryptJsonObj; return array( 'result' => 'success', 'redirect' => MakeRequest."?key=".$keyId."&enc=".$encryptJsonObj."&url=".$this->url ); exit; } public function thank_you_page(){ global $woocommerce; global $wpdb, $woocommerce; $content = ""; $content .= '
'; $content .= '

nexapay Thank you

'; if(isset($_POST['secureData'])){ add_action('the_content', array(&$this, 'thank_you_page')); $responseData = $_POST['secureData']; $responesSaltKey = $this->response_saltkey; $responesAESKey = $this->response_aeskey; $decryptJsonObj = $this->decrypt($responseData,$responesSaltKey,$responesAESKey); $content .= '
'; // Convert JSON string to Array $dataArray = json_decode($decryptJsonObj, true); // $content .= "Json : ".$decryptJsonObj; // $content .="
"; // =============== response code end ============ $valid = $dataArray['status'].$dataArray['orderId'].$dataArray['transactionId'].$dataArray['bankId'].$dataArray['description']; // generate hmac sha 256 hashkey $signature= hash_hmac('sha256', $valid, $this->response_hashkey); // $content .="
"; // $content .= $signature; //================= validate signature ======================== if($dataArray['signature']==$signature){ $content .= "Status : ".$dataArray['status']; //$content .="
"; // $content .= "Client Id : ".$dataArray['clientId']; $content .="
"; $content .= "Order Id : ".$dataArray['orderId']; $content .="
"; $content .= "Bank Id : ".$dataArray['bankId']; $content .="
"; $content .= "Transaction Id : ".$dataArray['transactionId']; $content .="
"; $content .= "Amount : ".$dataArray['amount']; $content .="
"; $content .= "Email Id : ".$dataArray['emailId']; $content .="
"; $content .= "Mobile Number : ".$dataArray['mobileNumber']; // $content .="
"; //$content .= "Signature : ".$dataArray['signature']; $content .="
"; $content .= "Date : ".$dataArray['date']; $content .="
"; $content .= "Description : ".$dataArray['description']; $content .= "
"; // $content .= "Valid Transaction"; $content .= "
"; $order = new WC_Order($dataArray['udf1']); if($dataArray['status']=="200"){ $order->update_status('wc-completed',__('Payment Completed By nexapay.','wc_nexapay_payment')); }else if($dataArray['status']=="400"){ $order->update_status('wc-failed'); }else if($dataArray['status']=="402"){ $order->update_status('wc-cancelled'); } }else{ $content .= "
"; $content .= "Invalid Transaction"; $content .= "
"; } $content .= '
'; } $content .= '
'; return $content; } public function encrypt($data, $salt,$key) { if($key != NULL && $data != "" && $salt != ""){ $method = "AES-256-CBC"; /*Converting Array to bytes*/ $iv = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]; $chars = array_map("chr", $iv); $IVbytes = join($chars); $salt1 = mb_convert_encoding($salt, "UTF-8"); /*Encoding to UTF-8*/ $key1 = mb_convert_encoding($key, "UTF-8"); /*Encoding to UTF-8*/ /*SecretKeyFactory Instance of PBKDF2WithHmacSHA1 Java Equivalent*/ $hash = openssl_pbkdf2($key1,$salt1,'256','65536', 'sha1'); $encrypted = openssl_encrypt($data, $method, $hash, OPENSSL_RAW_DATA, $IVbytes); return bin2hex($encrypted); }else{ return "String to encrypt, Salt and Key is required."; } } public function decrypt($data, $salt, $key) { if($key != NULL && $data != "" && $salt != ""){ $dataEncypted = hex2bin($data); $method = "AES-256-CBC"; /*Converting Array to bytes*/ $iv = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]; $chars = array_map("chr", $iv); $IVbytes = join($chars); $salt1 = mb_convert_encoding($salt, "UTF-8");/*Encoding to UTF-8*/ $key1 = mb_convert_encoding($key, "UTF-8");/*Encoding to UTF-8*/ /*SecretKeyFactory Instance of PBKDF2WithHmacSHA1 Java Equivalent*/ $hash = openssl_pbkdf2($key1,$salt1,'256','65536', 'sha1'); $decrypted = openssl_decrypt($dataEncypted, $method, $hash, OPENSSL_RAW_DATA, $IVbytes); return $decrypted; }else{ return "Encrypted String to decrypt, Salt and Key is required."; } } }// class end add_filter('woocommerce_payment_gateways','add_to_nexapay_payment_gateway'); function add_to_nexapay_payment_gateway($gateways){ $gateways[] = 'WC_nexapay_Payment_Gateway'; return $gateways; } } }