Aperçu
Lorsque myFulfillment pousse les niveaux de stock de produits à Magento 2, il utilise le point de terminaison API suivant :
Produits PUT/SKU/stockItems/XXX
- SKU est le produit SKU
- XXX est l'ID de l'article de stock
Toutefois, si le SKU contient un slash, il pourrait briser l'URL et créer l'erreur"Impossible de trouver le numéro d'article de stock pour sku XXXXXX"
Magento lui-même recommande d'appliquer un double encodage sur les SKU envoyées à leur API, puis Boostmyshop utilise la fonction d'encodage PHP suivante pour le faire fonctionner :urlencode($sku))
Par exemple, SKU"Abcd/e"serait transformé pour"Abcd%252fe"pour faire fonctionner l'appel API vers Magento 2. Voici le slash . "/est remplacé par "%252F"pour faire fonctionner l'appel.
Cependant, votre serveur Apache/Ngnix doit être configuré correctement pour accepter cet encodage...
Comment réparer
Voici les différents cas à vérifier pour vous assurer que votre serveur est correctement configuré:
1) Apache croit qu'il s'agit d'une URL invalide
Ajouter les instructions suivantes dans le fichier "httpd.conf": AllowEncodedSlashes On
2) Apache décode les slash encodés
==> Ajouter les instructions suivantes dans le fichier "httpd.conf"(Requiert Apache 2.3.12+) : AllowEncodedSlashes NoDecode
3) "mod_proxy" tente de réencoder l'URL
Le résultat sera l'encodage "mod_proxy" à nouveau la slash déjà encodée "%2F" à "%252F".
Dans le fichier "httpd.conf", utilisez le mot-clé ProxyPass "nocanon pour passer l'URL brute par le proxy.
Exemple du fichier httpd.conf:
AllowEncodedSlashes NoDecode
<Location /example/>
</Location>
Vérification finale
Pour vérifier si tout fonctionne bien après vos modifications, dans myFulfillment allez au menu Intégrations > [Sélectionnez votre intégration Magento 2] > Outils.
Là, vous trouverez la section "Outils" contenant un champ "Stock article" .
Dans ce champ, entrez le SKU que vous souhaitez tester (Utilisez un SKU contenant un slash ("/") pour vérifier si vos modifications précédentes fonctionnent) :
==> Si les détails du produit sont affichés, cela signifie que myFulfillment est capable de traiter les appels vers votre serveur Magento 2 pour les SKU avec slash(es).
Si vous obtenez toujours le message d'erreur . "Impossible de trouver l'ID d'article en stock pour sku XXXXXXXX", cela signifie que vos changements n'ont pas fonctionné.