diff --git a/includes/Checkout.php b/includes/Checkout.php index 9d594e881..4c940b2a5 100644 --- a/includes/Checkout.php +++ b/includes/Checkout.php @@ -84,7 +84,7 @@ public function load_checkout_permalink_template( $template ) { $products = explode( ',', $products_param ); foreach ( $products as $product ) { - list($product_id, $quantity) = explode( ':', $product ); + list( $product_id, $quantity ) = explode( ':', $product ); // Parse the product ID. The input is sent in the Retailer ID format (see get_fb_retailer_id()) // The Retailer ID format is: {product_sku}_{product_id}, so we need to extract the product_id @@ -93,32 +93,52 @@ public function load_checkout_permalink_template( $template ) { $product_id = end( $parts ); } - // Validate and add the product to the cart - if ( is_numeric( $product_id ) && is_numeric( $quantity ) && $quantity > 0 ) { - try { - WC()->cart->add_to_cart( $product_id, $quantity ); - } catch ( \Exception $e ) { - \WC_Facebookcommerce_Utils::log_exception_immediately_to_meta( - $e, + $product_obj = wc_get_product( $product_id ); + + if ( + $product_obj && + $product_obj->is_purchasable() && + is_numeric( $quantity ) && + $quantity > 0 + ) { + $added = WC()->cart->add_to_cart( $product_id, $quantity ); + if ( ! $added ) { + $error_message = sprintf( + 'WC add_to_cart() failed: product_id=%s, quantity=%s', + $product_id, + $quantity + ); + + \WC_Facebookcommerce_Utils::log_to_meta( + $error_message, array( - 'event' => 'checkout', - 'event_type' => 'checkout_permalink_template_exception', - 'incoming_params' => array( + 'flow_name' => 'checkout', + 'flow_step' => 'add_to_cart', + 'extra_data' => [ 'products_param' => $products_param, 'product_id' => $product_id, - ), + 'quantity' => $quantity, + ], ) ); } } else { + $error_message = sprintf( + 'Invalid product or quantity: product_id=%s, quantity=%s', + $product_id, + $quantity + ); + \WC_Facebookcommerce_Utils::log_to_meta( - 'Failed to add product to cart', + $error_message, array( - 'flow_name' => 'checkout', - 'incoming_params' => array( + 'flow_name' => 'checkout', + 'flow_step' => 'product_quantity_validation', + 'extra_data' => [ 'products_param' => $products_param, 'product_id' => $product_id, - ), + 'quantity' => $quantity, + ], ) ); } @@ -132,33 +152,33 @@ public function load_checkout_permalink_template( $template ) { $checkout_url = wc_get_checkout_url(); echo ' - -
- - -