ACSD-53148 : deux demandes parallèles dans GraphQL pour ajouter le même produit configurable

Le correctif ACSD-53148 corrige le problème en raison duquel deux demandes parallèles dans GraphQL pour l’ajout du même produit configurable au panier entraînaient deux articles distincts sur le panier avec le même SKU de produit. Ce correctif est disponible lorsque Quality Patches Tool (QPT) 1.1.37 est installé. L’ID de correctif est ACSD-53148. Veuillez noter que le problème doit être corrigé dans Adobe Commerce 2.4.7.

Produits et versions concernés

Le correctif est créé pour la version Adobe Commerce :

  • Adobe Commerce (toutes les méthodes de déploiement) 2.4.5-p2

Compatible avec les versions d’Adobe Commerce :

  • Adobe Commerce (toutes les méthodes de déploiement) 2.4.4 - 2.4.6-p2
NOTE
Le correctif peut devenir applicable à d’autres versions avec de nouvelles versions Quality Patches Tool. Pour vérifier si le correctif est compatible avec votre version Adobe Commerce, mettez à jour le package magento/quality-patches vers la dernière version et vérifiez la compatibilité sur la Quality Patches Tool : recherchez des correctifs sur la page. Utilisez l’ID de correctif comme mot-clé de recherche pour localiser le correctif.

Problème

Deux demandes parallèles dans GraphQL pour l’ajout du même produit configurable au panier ont entraîné l’apparition de deux éléments distincts sur le panier avec le même SKU de produit.

Étapes à reproduire :

  1. Créez un produit configurable avec le SKU Test et un produit simple avec le SKU Test-A.

  2. Créez un panier vide via GraphQL (modifiez l’emplacement avec votre propre URL) :

    code language-graphql
    curl --location 'http://mag.local/graphql' \
    --header 'Store: default' \
    --header 'Content-Type: application/json' \
    --data '{"query":"mutation{\n createEmptyCart\n}","variables"{}}'
    
  3. Exécutez deux demandes simultanées pour ajouter le même produit au panier (modifiez cartID et l’emplacement des deux demandes) :

    code language-graphql
        curl --location 'http://mag.local/graphql' --header 'Store: default' --header 'Content-Type: application/json' --data '{"query":"mutation($cartId: String!, $preSku: String!, $preParentSku: String!) {\r\n addConfigurableProductsToCart(\r\n input: {\r\n cart_id: $cartId\r\n cart_items: [\r\n {\r\n parent_sku: $preParentSku\r\n data: {\r\n quantity: 1\r\n sku: $preSku\r\n }\r\n }\r\n ]\r\n }\r\n ) {\r\n cart {\r\n items {\r\n id\r\n product {\r\n name\r\n sku\r\n }\r\n quantity\r\n \r\n prices {\r\n price {\r\n value\r\n currency\r\n }\r\n }\r\n ... on ConfigurableCartItem {\r\n configurable_options {\r\n option_label\r\n value_label\r\n }\r\n }\r\n }\r\n total_quantity\r\n prices {\r\n grand_total {\r\n value\r\n currency\r\n }\r\n discounts {\r\n amount {\r\n value\r\n currency\r\n }\r\n label\r\n }\r\n subtotal_excluding_tax {\r\n value\r\n currency\r\n }\r\n } \r\n }\r\n }\r\n}","variables":{"cartId":"VV85vRfmCrRm0aKLKkNDrXH2S5y7sSpf","preParentSku":"Test","preSku":"Test-A"}}' & curl --location 'http://mag.local/graphql' --header 'Store: default' --header 'Content-Type: application/json' --data '{"query":"mutation($cartId: String!, $preSku: String!, $preParentSku: String!) {\r\n addConfigurableProductsToCart(\r\n input: {\r\n cart_id: $cartId\r\n cart_items: [\r\n {\r\n parent_sku: $preParentSku\r\n data: {\r\n quantity: 1\r\n sku: $preSku\r\n }\r\n }\r\n ]\r\n }\r\n ) {\r\n cart {\r\n items {\r\n id\r\n product {\r\n name\r\n sku\r\n }\r\n quantity\r\n \r\n prices {\r\n price {\r\n value\r\n currency\r\n }\r\n }\r\n ... on ConfigurableCartItem {\r\n configurable_options {\r\n option_label\r\n value_label\r\n }\r\n }\r\n }\r\n total_quantity\r\n prices {\r\n grand_total {\r\n value\r\n currency\r\n }\r\n discounts {\r\n amount {\r\n value\r\n currency\r\n }\r\n label\r\n }\r\n subtotal_excluding_tax {\r\n value\r\n currency\r\n }\r\n } \r\n }\r\n }\r\n}","variables":{"cartId":"VV85vRfmCrRm0aKLKkNDrXH2S5y7sSpf","preParentSku":"Test","preSku":"Test-A"}}'
    
  4. Obtenez le panier pour afficher les éléments (modifiez cartId et l’emplacement) :

    code language-graphql
    curl --location 'http://mag.local/graphql' \
    --header 'Store: default' \
    --header 'Content-Type: application/json' \
    --data '{"query":"{\n cart(cart_id: \"VV85vRfmCrRm0aKLKkNDrXH2S5y7sSpf\") {\n items {\n id\n product {\n name\n sku\n }\n quantity\n }\n\n }\n}\n","variables":{}}'
    

Résultats attendus :

Élément répertorié une fois avec qty = 2.

    {"data":{"cart":{"items":[{"id":"5","product":{"name":"config1","sku":"config1"},"quantity":2}]}}}%

Résultats réels :

Article répertorié deux fois avec qty = 1.

    {"data":{"cart":{"items":[{"id":"1","product":
    {"name":"config1","sku":"config1"},"quantity":1},
    {"id":"3","product":{"name":"config1","sku":"config1"},"quantity":1}]}}}%

Appliquer le correctif

Pour appliquer des correctifs individuels, utilisez les liens suivants en fonction de votre méthode de déploiement :

Lecture connexe

Pour en savoir plus sur Quality Patches Tool, voir :

Pour plus d'informations sur les autres correctifs disponibles dans QPT, reportez-vous à Quality Patches Tool : Recherche de correctifs dans le guide Quality Patches Tool.

recommendation-more-help
8bd06ef0-b3d5-4137-b74e-d7b00485808a