From 91c5c5a2ffa835eb21b8a4b2e952e39eab82c41b Mon Sep 17 00:00:00 2001 From: Craig Christenson Date: Thu, 8 Feb 2024 13:09:53 -0500 Subject: [PATCH] Bug Fixes - fix IPN response on api and inline modules - make sure jquery loads first when loading frontend scripts --- twocheckout-convert-plus-v2.3.1.zip | Bin 0 -> 32288 bytes .../wc-twocheckout-convert-plus.php | 2 +- twocheckout-inline-v2.3.1.zip | Bin 0 -> 37386 bytes .../class-two-checkout-ipn-helper.php | 46 +++++++-- twocheckout-inline/wc-twocheckout-inline.php | 8 +- twocheckout-v2.3.1.zip | Bin 0 -> 35348 bytes .../Twocheckout/TwoCheckoutIpnHelperApi.php | 92 +++++++++++------- twocheckout/wc-twocheckout.php | 11 ++- 8 files changed, 108 insertions(+), 51 deletions(-) create mode 100644 twocheckout-convert-plus-v2.3.1.zip create mode 100644 twocheckout-inline-v2.3.1.zip create mode 100644 twocheckout-v2.3.1.zip diff --git a/twocheckout-convert-plus-v2.3.1.zip b/twocheckout-convert-plus-v2.3.1.zip new file mode 100644 index 0000000000000000000000000000000000000000..0ea91d92af943f93a381df33ad849d0d52155e3b GIT binary patch literal 32288 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

JCV^^_m7x91T%B;{NP=NP3;lzH1jPI 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%0A6LJ1_QiSC!ruR-W~sot=7e^06;# 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 H-#`6732DJD literal 0 HcmV?d00001 diff --git a/twocheckout-inline/src/Twocheckout/class-two-checkout-ipn-helper.php b/twocheckout-inline/src/Twocheckout/class-two-checkout-ipn-helper.php index e89d0f1..581d7bf 100644 --- a/twocheckout-inline/src/Twocheckout/class-two-checkout-ipn-helper.php +++ b/twocheckout-inline/src/Twocheckout/class-two-checkout-ipn-helper.php @@ -131,7 +131,7 @@ protected function _is_order_refunded() { /** * @return string */ - private function _calculate_ipn_response() { + private function _calculate_ipn_response($algo='sha3-256') { $result_response = ''; $ipn_params_response = []; // we're assuming that these always exist, if they don't then the problem is on avangate side @@ -144,11 +144,19 @@ private function _calculate_ipn_response() { $result_response .= $this->array_expand( (array) $val ); } - return sprintf( - '%s|%s', - $ipn_params_response['DATE'], - $this->generate_hash( $this->secret_key, $result_response ) - ); + if ('md5' === $algo) + return sprintf( + '%s|%s', + $ipn_params_response['DATE'], + $this->generate_hash($this->secret_key, $result_response, $algo) + ); + else + return sprintf( + '%s', + $algo, + $ipn_params_response['DATE'], + $this->generate_hash($this->secret_key, $result_response, $algo) + ); } /** @@ -214,7 +222,7 @@ public function is_ipn_response_valid() { $receivedHash = $this->request_params['SIGNATURE_SHA3_256']; if(!$receivedHash){ - $receivedAlgo='sha2-256'; + $receivedAlgo='sha256'; $receivedHash = $this->request_params['SIGNATURE_SHA2_256']; } @@ -276,6 +284,7 @@ public function generate_hash($key, $data, $algo = 'sha3-256') { * @return string */ public function process_ipn() { + $hash = $this->extractHashFromRequest(); try { if ( ! isset( $this->request_params['REFNO'] ) && empty( $this->request_params['REFNO'] ) ) { self::log( 'Cannot identify order: "%s".', $this->request_params['REFNOEXT'] ); @@ -294,7 +303,7 @@ public function process_ipn() { } catch ( Exception $ex ) { self::log( 'Exception processing IPN: ' . $ex->getMessage() ); } - echo $this->_calculate_ipn_response(); + echo $this->_calculate_ipn_response($hash['algo']); exit(); } @@ -326,4 +335,25 @@ private function array_expand( $array ) { return $retval; } + + /** + * @return array [hash, algo] + */ + protected function extractHashFromRequest():array { + $receivedAlgo = 'sha3-256'; + $receivedHash = $this->request_params['SIGNATURE_SHA3_256']; + + if (!$receivedHash) { + $receivedAlgo = 'sha256'; + $receivedHash = $this->request_params['SIGNATURE_SHA2_256']; + } + + if (!$receivedHash) { + $receivedAlgo = 'md5'; + $receivedHash = $this->request_params['HASH']; + } + + return ['hash' => $receivedHash, 'algo' => $receivedAlgo]; + } + } diff --git a/twocheckout-inline/wc-twocheckout-inline.php b/twocheckout-inline/wc-twocheckout-inline.php index 455d62f..029bcc9 100644 --- a/twocheckout-inline/wc-twocheckout-inline.php +++ b/twocheckout-inline/wc-twocheckout-inline.php @@ -3,7 +3,7 @@ Plugin Name: 2Checkout Inline Payment Gateway Plugin URI: Description: Allows you to use 2Checkout payment gateway with the WooCommerce plugin. - Version: 2.3.0 + Version: 2.3.1 Author: 2Checkout Author URI: https://www.2checkout.com */ @@ -129,7 +129,7 @@ function enqueue_style() { //enqueue a script function enqueue_script() { wp_enqueue_script( 'twocheckout_inline_script', - '/wp-content/plugins/twocheckout-inline/assets/js/twocheckout_inline.js' ); + '/wp-content/plugins/twocheckout-inline/assets/js/twocheckout_inline.js', ['jquery'] ); } /** @@ -548,7 +548,11 @@ public function check_ipn_response_inline() { if ( $_SERVER['REQUEST_METHOD'] !== 'POST' ) { return; } + $params = $_POST; + if(empty($params)) + $params=json_decode(file_get_contents('php://input'),true); + unset( $params['wc-api'] ); if ( isset( $params['REFNOEXT'] ) && ! empty( $params['REFNOEXT'] ) ) { $order = wc_get_order( $params['REFNOEXT'] ); diff --git a/twocheckout-v2.3.1.zip b/twocheckout-v2.3.1.zip new file mode 100644 index 0000000000000000000000000000000000000000..f8d8d5910e5769c435c6705341de08acbd36824f GIT binary patch literal 35348 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 N$bGL6n%+PE`hUAJ_B;Rp literal 0 HcmV?d00001 diff --git a/twocheckout/src/Twocheckout/TwoCheckoutIpnHelperApi.php b/twocheckout/src/Twocheckout/TwoCheckoutIpnHelperApi.php index 21bff25..0945738 100644 --- a/twocheckout/src/Twocheckout/TwoCheckoutIpnHelperApi.php +++ b/twocheckout/src/Twocheckout/TwoCheckoutIpnHelperApi.php @@ -171,28 +171,36 @@ public function processorder_status(string $order_status,string $refNo) { } } - /** - * Validate Ipn request - * @return bool - */ - public function is_ipn_response_valid() { - $result = ''; - - $receivedAlgo='sha3-256'; + /** + * @return array [hash, algo] + */ + protected function extractHashFromRequest():array { + $receivedAlgo = 'sha3-256'; $receivedHash = $this->request_params['SIGNATURE_SHA3_256']; - if(!$receivedHash){ - $receivedAlgo='sha256'; + if (!$receivedHash) { + $receivedAlgo = 'sha256'; $receivedHash = $this->request_params['SIGNATURE_SHA2_256']; } - if(!$receivedHash){ - $receivedAlgo='md5'; + if (!$receivedHash) { + $receivedAlgo = 'md5'; $receivedHash = $this->request_params['HASH']; } - foreach ( $this->request_params as $key => $val ) { + return ['hash' => $receivedHash, 'algo' => $receivedAlgo]; + } + + /** + * Validate Ipn request + * @return bool + */ + public function is_ipn_response_valid() { + $result = ''; + + $hash = $this->extractHashFromRequest(); + foreach ( $this->request_params as $key => $val ) { if ( !in_array($key ,["HASH", "SIGNATURE_SHA2_256", "SIGNATURE_SHA3_256"]) ) { if ( is_array( $val ) ) { $result .= $this->array_expand( $val ); @@ -204,8 +212,8 @@ public function is_ipn_response_valid() { } if ( isset( $this->request_params['REFNO'] ) && ! empty( $this->request_params['REFNO'] ) ) { - $calc_hash = $this->generate_hash( $this->secret_key, $result, $receivedAlgo ); - if ( $receivedHash === $calc_hash ) { + $calc_hash = $this->generate_hash( $this->secret_key, $result, $hash['algo'] ); + if ( $hash['hash'] === $calc_hash ) { return true; } } @@ -258,6 +266,8 @@ public static function log( $message ) { * @return string */ public function process_ipn() { + $hash = $this->extractHashFromRequest(); + try { if ( ! isset( $this->request_params['REFNO'] ) && empty( $this->request_params['REFNO'] ) ) { self::log( 'Cannot identify order: "%s".', $this->request_params['REFNOEXT'] ); @@ -276,7 +286,7 @@ public function process_ipn() { } catch ( Exception $ex ) { self::log( 'Exception processing IPN: ' . $ex->getMessage() ); } - echo $this->_calculate_ipn_response(); + echo $this->_calculate_ipn_response($hash['algo']); exit(); } @@ -305,26 +315,34 @@ protected function _process_fraud() { } } - /** - * @return string - */ - private function _calculate_ipn_response() { - $result_response = ''; - $ipn_params_response = []; - // we're assuming that these always exist, if they don't then the problem is on avangate side - $ipn_params_response['IPN_PID'][0] = $this->request_params['IPN_PID'][0]; - $ipn_params_response['IPN_PNAME'][0] = $this->request_params['IPN_PNAME'][0]; - $ipn_params_response['IPN_DATE'] = $this->request_params['IPN_DATE']; - $ipn_params_response['DATE'] = date( 'YmdHis' ); - - foreach ( $ipn_params_response as $key => $val ) { - $result_response .= $this->array_expand( (array) $val ); - } + /** + * @return string + */ + private function _calculate_ipn_response($algo='sha3-256') { + $resultResponse = ''; + $ipn_params_response = []; + // we're assuming that these always exist, if they don't then the problem is on avangate side + $ipn_params_response['IPN_PID'][0] = $this->request_params['IPN_PID'][0]; + $ipn_params_response['IPN_PNAME'][0] = $this->request_params['IPN_PNAME'][0]; + $ipn_params_response['IPN_DATE'] = $this->request_params['IPN_DATE']; + $ipn_params_response['DATE'] = date( 'YmdHis' ); + + foreach ( $ipn_params_response as $key => $val ) { + $resultResponse .= $this->array_expand( (array) $val ); + } - return sprintf( - '%s|%s', - $ipn_params_response['DATE'], - $this->generate_hash( $this->secret_key, $result_response ) - ); - } + if ('md5' === $algo) + return sprintf( + '%s|%s', + $ipn_params_response['DATE'], + $this->generate_hash($this->secret_key, $resultResponse, $algo) + ); + else + return sprintf( + '%s', + $algo, + $ipn_params_response['DATE'], + $this->generate_hash($this->secret_key, $resultResponse, $algo) + ); + } } diff --git a/twocheckout/wc-twocheckout.php b/twocheckout/wc-twocheckout.php index 36e0abe..0553645 100644 --- a/twocheckout/wc-twocheckout.php +++ b/twocheckout/wc-twocheckout.php @@ -3,7 +3,7 @@ Plugin Name: 2Checkout Payment Gateway Plugin URI: Description: Allows you to use 2Checkout payment gateway with the WooCommerce plugin. - Version: 2.3.0 + Version: 2.3.1 Author: 2Checkout Author URI: https://www.2checkout.com */ @@ -141,8 +141,8 @@ public function init_form_fields() { */ public function payment_fields() { - wp_enqueue_script( '2payjs', 'https://2pay-js.2checkout.com/v1/2pay.js' ); - wp_enqueue_script( 'twocheckout_script', '/wp-content/plugins/twocheckout/assets/js/twocheckout.js' ); + wp_enqueue_script( '2payjs', 'https://2pay-js.2checkout.com/v1/2pay.js', ['jquery'] ); + wp_enqueue_script( 'twocheckout_script', '/wp-content/plugins/twocheckout/assets/js/twocheckout.js', ['jquery'] ); wp_enqueue_style( 'twocheckout_style', '/wp-content/plugins/twocheckout/assets/css/twocheckout.css' ); $twocheckout_is_checkout = ( is_checkout() && empty( $_GET['pay_for_order'] ) ) ? 'yes' : 'no'; require_once plugin_dir_path( __FILE__ ) . 'templates/payment-fields.php'; @@ -602,9 +602,13 @@ public function check_ipn_response_api() { return; } $params = $_POST; + if(empty($params)) + $params=json_decode(file_get_contents('php://input'),true); + unset( $params['wc-api'] ); if ( isset( $params['REFNOEXT'] ) && ! empty( $params['REFNOEXT'] ) ) { $order = wc_get_order( $params['REFNOEXT'] ); + if ( $order && $order->get_payment_method() == 'twocheckout' ) { try { $ipn_helper = new Two_Checkout_Ipn_Helper_Api( $params, $this->secret_key, $this->complete_order_on_payment, $this->debug, $order ); @@ -612,6 +616,7 @@ public function check_ipn_response_api() { $this->log( 'Unable to find order with RefNo: ' . $params['REFNOEXT'] ); throw new Exception( 'An error occurred!' ); } + if ( ! $ipn_helper->is_ipn_response_valid() ) { self::log( sprintf( 'SHA3 hash mismatch for 2Checkout IPN with date: "%s" . ', $params['IPN_DATE'] ) );