diff --git a/src/Mondu/Mondu/Controllers/OrdersController.php b/src/Mondu/Mondu/Controllers/OrdersController.php index d5e9934..cae10a1 100644 --- a/src/Mondu/Mondu/Controllers/OrdersController.php +++ b/src/Mondu/Mondu/Controllers/OrdersController.php @@ -43,9 +43,13 @@ public function confirm( WP_REST_Request $request ) { $order_number = $params['external_reference_id']; $mondu_order_id = $params['order_uuid']; $return_url = urldecode( $params['return_url'] ); - $order = Helper::get_order_from_order_number( $order_number ); + $order = Helper::get_order_from_order_number_or_uuid( $order_number, $mondu_order_id ); try { + if (!$order) { + throw new \Exception(__('Order not found')); + } + if ( isset( WC()->cart ) ) { WC()->cart->empty_cart(); } diff --git a/src/Mondu/Mondu/Controllers/WebhooksController.php b/src/Mondu/Mondu/Controllers/WebhooksController.php index c32c8c5..c75954a 100644 --- a/src/Mondu/Mondu/Controllers/WebhooksController.php +++ b/src/Mondu/Mondu/Controllers/WebhooksController.php @@ -97,7 +97,7 @@ private function handle_pending( $params ) { throw new MonduException(__('Required params missing.', 'mondu')); } - $order = Helper::get_order_from_order_number( $woocommerce_order_number ); + $order = Helper::get_order_from_order_number_or_uuid( $woocommerce_order_number, $mondu_order_id ); if ( !$order ) { return $this->return_not_found(); @@ -116,7 +116,7 @@ private function handle_authorized( $params ) { throw new MonduException(__('Required params missing.', 'mondu')); } - $order = Helper::get_order_from_order_number( $woocommerce_order_number ); + $order = Helper::get_order_from_order_number_or_uuid( $woocommerce_order_number, $mondu_order_id ); if ( !$order ) { return $this->return_not_found(); @@ -135,7 +135,7 @@ private function handle_confirmed( $params ) { throw new MonduException(__('Required params missing.', 'mondu')); } - $order = Helper::get_order_from_order_number( $woocommerce_order_number ); + $order = Helper::get_order_from_order_number_or_uuid( $woocommerce_order_number, $mondu_order_id ); if ( !$order ) { return $this->return_not_found(); @@ -158,7 +158,7 @@ private function handle_declined( $params ) { throw new MonduException(__('Required params missing.', 'mondu')); } - $order = Helper::get_order_from_order_number( $woocommerce_order_number ); + $order = Helper::get_order_from_order_number_or_uuid( $woocommerce_order_number, $mondu_order_id ); if ( !$order ) { return $this->return_not_found(); @@ -175,12 +175,13 @@ private function handle_declined( $params ) { private function handle_invoice_created( $params ) { $woocommerce_order_number = $params['external_reference_id']; + $mondu_order_id = $params['order_uuid']; if ( !$woocommerce_order_number ) { throw new MonduException(__('Required params missing.', 'mondu')); } - $order = Helper::get_order_from_order_number( $woocommerce_order_number ); + $order = Helper::get_order_from_order_number_or_uuid( $woocommerce_order_number, $mondu_order_id ); if ( !$order ) { return $this->return_not_found(); @@ -193,12 +194,13 @@ private function handle_invoice_created( $params ) { private function handle_invoice_payment( $params ) { $woocommerce_order_number = $params['external_reference_id']; + $mondu_order_id = $params['order_uuid']; if ( !$woocommerce_order_number ) { throw new MonduException(__('Required params missing.', 'mondu')); } - $order = Helper::get_order_from_order_number( $woocommerce_order_number ); + $order = Helper::get_order_from_order_number_or_uuid( $woocommerce_order_number, $mondu_order_id ); if ( !$order ) { return $this->return_not_found(); @@ -211,12 +213,13 @@ private function handle_invoice_payment( $params ) { private function handle_invoice_canceled( $params ) { $woocommerce_order_number = $params['external_reference_id']; + $mondu_order_id = $params['order_uuid']; if ( !$woocommerce_order_number ) { throw new MonduException(__('Required params missing.', 'mondu')); } - $order = Helper::get_order_from_order_number( $woocommerce_order_number ); + $order = Helper::get_order_from_order_number_or_uuid( $woocommerce_order_number, $mondu_order_id ); if ( !$order ) { return $this->return_not_found(); diff --git a/src/Mondu/Mondu/Support/Helper.php b/src/Mondu/Mondu/Support/Helper.php index 9e1c238..16dbf27 100644 --- a/src/Mondu/Mondu/Support/Helper.php +++ b/src/Mondu/Mondu/Support/Helper.php @@ -109,8 +109,8 @@ public static function get_language() { * Get order from order number * Tries to get it using the meta key _order_number otherwise gets it according to the plugin * - * @param WC_Order $order - * @return string + * @param int|string $order_number + * @return false|WC_Order */ public static function get_order_from_order_number( $order_number ) { $order = wc_get_order( $order_number ); @@ -208,13 +208,7 @@ public static function get_order_from_order_number( $order_number ) { } } - if ( isset( $order_id ) ) { - $order = wc_get_order( $order_id ); - - if ( $order ) { - return $order; - } - } else { + if ( !isset( $order_id ) ) { Helper::log([ 'message' => 'Error trying to fetch the order', 'order_id_isset' => isset( $order_id ), @@ -223,7 +217,70 @@ public static function get_order_from_order_number( $order_number ) { 'search_term' => $search_term, 'search_term_fallback' => isset( $search_term_fallback ), ]); + return false; } + + return wc_get_order( $order_id ); + } + + /** + * @param $mondu_order_uuid + * @return bool|WC_Order + */ + public static function get_order_from_mondu_uuid( $mondu_order_uuid ) { + $search_key = Plugin::ORDER_ID_KEY; + $search_term = $mondu_order_uuid; + + $args = array( + 'numberposts' => 1, + 'post_type' => 'shop_order', + 'fields' => 'ids', + 'post_status' => 'any', + 'update_post_meta_cache' => false, + 'update_post_term_cache' => false, + 'meta_query' => array( + array( + 'key' => $search_key, + 'value' => $search_term, + 'compare' => '=', + ), + ) + ); + $query = new WP_Query( $args ); + $order_id = $query->posts[ 0 ]; + $order = wc_get_order( $order_id ); + + if ( !$order ) { + Helper::log([ + 'message' => 'Error trying to fetch the order', + 'order_id_isset' => isset( $order_id ), + 'mondu_order_uuid' => $mondu_order_uuid, + 'search_key' => $search_key, + 'search_term' => $search_term, + 'search_term_fallback' => isset( $search_term_fallback ), + ]); + } + + return $order; + } + + /** + * @param $order_number + * @param $mondu_order_uuid + * @return bool|WC_Order + */ + public static function get_order_from_order_number_or_uuid( $order_number = null, $mondu_order_uuid = null) { + $order = false; + + if ( $order_number ) { + $order = static::get_order_from_order_number( $order_number ); + } + + if ( !$order && $mondu_order_uuid ) { + $order = static::get_order_from_mondu_uuid( $mondu_order_uuid ); + } + + return $order; } /**