diff --git a/includes/Checkout.php b/includes/Checkout.php index 652b6d499..debe2f07a 100644 --- a/includes/Checkout.php +++ b/includes/Checkout.php @@ -86,8 +86,40 @@ public function load_checkout_permalink_template( $template ) { foreach ( $products as $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 + if ( false !== strpos( $product_id, '_' ) ) { + $parts = explode( '_', $product_id ); + $product_id = end( $parts ); + } + + // Validate and add the product to the cart if ( is_numeric( $product_id ) && is_numeric( $quantity ) && $quantity > 0 ) { - WC()->cart->add_to_cart( $product_id, $quantity ); + try { + WC()->cart->add_to_cart( $product_id, $quantity ); + } catch ( \Exception $e ) { + \WC_Facebookcommerce_Utils::logExceptionImmediatelyToMeta( + $e, + array( + 'flow_name' => 'checkout', + 'incoming_params' => array( + 'products_param' => $products_param, + 'product_id' => $product_id, + ), + ) + ); + } + } else { + \WC_Facebookcommerce_Utils::logTelemetryToMeta( + 'Failed to add product to cart', + array( + 'flow_name' => 'checkout', + 'incoming_params' => array( + 'products_param' => $products_param, + 'product_id' => $product_id, + ), + ) + ); } } }