PluginProbe
WCPOS – Point of Sale (POS) plugin for WooCommerce / 1.10.18
WCPOS – Point of Sale (POS) plugin for WooCommerce v1.10.18
1.10.19 1.10.18 1.10.17 1.10.16 1.10.15 1.10.13 1.10.14 1.10.12 1.10.11 1.10.10 1.10.9 1.10.8 untagged-3d9b7ccddc54df87c672 1.10.7 1.10.6 1.10.5 1.10.3 1.10.4 1.10.2 1.10.1 1.10.0 1.9.17 1.9.15 1.9.16 1.9.14 All 163 releases
← All changes | includes/Templates/Received.php +14 -6 1.10.41.10.18 View file →
@@ -10,8 +10,9 @@
10 10
11 11 namespace WCPOS\WooCommercePOS\Templates;
12 12
13 13 use Exception;
14 +use WCPOS\WooCommercePOS\Logger;
14 15 use WP_REST_Request;
15 16
16 17 /**
17 18 * Received class.
@@ -55,8 +56,12 @@
55 56 try {
56 57 $request = new WP_REST_Request( 'GET', '/wcpos/v1/orders/' . $order_id );
57 58 $server = rest_get_server();
58 59 $response = $server->dispatch( $request );
60 + if ( $response->is_error() || $response->get_status() >= 400 ) {
61 + Logger::log( sprintf( 'Received order %d REST dispatch failed with status %d.', $order_id, $response->get_status() ) );
62 + return false;
63 + }
59 64 $data = $server->response_to_data( $response, true );
60 65 } finally {
61 66 remove_filter( 'user_has_cap', $grant_caps );
62 67 remove_filter( 'woocommerce_rest_check_permissions', '__return_true' );
@@ -87,14 +92,17 @@
87 92 array( 'response' => 403 )
88 93 );
89 94 }
90 95
91 - $order_json = $this->get_order_json( $order->get_id() );
92 - $payment_method = $order->get_payment_method();
93 - $gateway_settings = woocommerce_pos_get_settings( 'payment_gateways' );
94 - $status_setting = $gateway_settings['gateways'][ $payment_method ]['order_status'] ?? 'wc-completed';
95 - $completed_status = 'wc-' === substr( $status_setting, 0, 3 ) ? substr( $status_setting, 3 ) : $status_setting;
96 - $order_complete = 'pos-open' !== $completed_status;
96 + $order_json = $this->get_order_json( $order->get_id() );
97 + // Emit only after WooCommerce recognizes the order as paid. A negative
98 + // needs_payment() check is insufficient because zero-total failed orders do not
99 + // need payment. Keep the POS exclusions so parked carts never report success.
100 + $order_complete = $order->is_paid() && ! \in_array( $order->get_status(), array( 'pos-open', 'pos-partial' ), true );
101 +
102 + if ( false === $order_json ) {
103 + $order_complete = false;
104 + }
97 105
98 106 include woocommerce_pos_locate_template( 'received.php' );
99 107 exit;
100 108 } catch ( Exception $e ) {