WooFrance Dépannage et support WordPress WooCommerce › Forums › Forum de Support WooCommerce › Problème sur API REST Refunds
- Ce sujet contient 11 réponses, 2 participants et a été mis à jour pour la dernière fois par c3do, le il y a 6 années et 9 mois.
-
AuteurMessages
-
18 janvier 2018 à 13 h 50 min #49342
Bonjour,
J’ai un petit soucis avec l’API REST pour créer un remboursement. Le remboursement est effectué, le total est bon, mais l’argument « line_items » du remboursement ne se transmet pas. On ne sait donc pas quelle ligne de la commande a été remboursée.
Voilà ce que j’envoie:
{« amount »: »4.89″, »reason »: »test », »refunded_by »:1, »line_items »:[{« id »:2052, »name »: »nom du produit », »product_id »:51765, »variation_id »:51766, »quantity »:1, »tax_class »:0, »subtotal »: »4.89″, »total »: »4.89″, »meta_data »:[{« id »:16294, »key »: »pa_taille », »value »: »52″}]}]}
et la réponse de woocommerce:
[« id »]=> int(103883) [« date_created »]=> string(19) « 2018-01-18T13:22:02 » [« date_created_gmt »]=> string(19) « 2018-01-18T12:22:02 » [« amount »]=> string(4) « 4.89 » [« reason »]=> string(4) « test » [« refunded_by »]=> int(1) [« meta_data »]=> array(0) { } [« line_items »]=> array(0) { } [« _links »]=> object(stdClass)#175 (3) { [« self »]=> array(1) { [0]=> object(stdClass)#178 (1) { [« href »]=> string(74) « https://sandbox.XXX.com/wp-json/wc/v2/orders/103864/refunds/103883 » } } [« collection »]=> array(1) { [0]=> object(stdClass)#176 (1) { [« href »]=> string(67) « https://sandbox.XXX.com/wp-json/wc/v2/orders/103864/refunds » } } [« up »]=> array(1) { [0]=> object(stdClass)#174 (1) { [« href »]=> string(59) « https://sandbox.XXX.com/wp-json/wc/v2/orders/103864 » } } } }
Si, par hasard, quelqu’un a une idée du pourquoi ce « line_items » ne se transmet pas…
Merci de votre aide!
18 janvier 2018 à 22 h 56 min #49370Vous indiquez déjà les données de remboursement dans la requête, que voulez-vous faire avec ces mêmes données dans la réponse ?
s’il s’agit de vérifier que tout c’est bien passé, je pense que vous devrez lire le résultat de « orders/103864/refunds/103883 » pour votre exemple.
Développeur PHP et WordPress En Alsace dans l'annuaire des prestataires WordPress et WooCommerce
Création d'extensions pour WordPress et WooCommerce - Personnalisation d'extensions existantes
🔶 Si vous appréciez mon aide, vous pouvez me faire un don de n'importe quel montant en cliquant ici.18 janvier 2018 à 23 h 21 min #49371Je vois le résultat en direct, sur la commande woocommerce et ce n’est pas le résultat voulu. Je vais essayer d’être plus clair.
Lorsque je fais un remboursement sur woocommerce, j’incrémente la quantité des produits à rembourser, et je valide. L’intérêt est double. Le client sait de quoi il a été remboursé sur l’avoir qui est généré automatiquement, et on sait exactement ce qui a été remboursé sur la commande en un coup d’oeil.
En passant par l’API pour créer le remboursement, j’indique la ligne à rembourser à woocommerce dans line_items (id,quantity,amount) et les attributs généraux (reason, amount,refunded_by). Mais malheureusement, seul le total du remboursement est pris en compte, un avoir sans produit est généré.
J’ai beau tourner le code dans tous les sens, avec plus ou moins d’attributs, en mettant l’id produit en clé de tableau, je sèche…
19 janvier 2018 à 9 h 17 min #49384J’avais mal compris, ce que vous avez indiqué après « et la réponse de woocommerce: » c’est la réponse de la lecture de « orders/103864/refunds/103883 » ?
En créant un remboursement à partir de l’espace d’administration, les valeurs « quantity » et les 4 totaux sont négatifs donc essayez peut-être d’indiquer « quantity : -1 » à la création du remboursement.
Développeur PHP et WordPress En Alsace dans l'annuaire des prestataires WordPress et WooCommerce
Création d'extensions pour WordPress et WooCommerce - Personnalisation d'extensions existantes
🔶 Si vous appréciez mon aide, vous pouvez me faire un don de n'importe quel montant en cliquant ici.19 janvier 2018 à 13 h 35 min #49390A chaque requête, l’API retourne une réponse, avec ou sans erreur. Dans cette réponse, je devrais logiquement avoir sensiblement le même line_items que ce que je lui ai envoyé. Mais il est vide. J’ai posté la réponse pour que vous puissiez le constater.
C’est vrai. J’ai testé les 2 dans line_items (montant et quantité), sans résultat. Le montant global ne passe pas en négatif.
object(stdClass)#180 (3) { ["code"]=> string(37) "woocommerce_rest_invalid_order_refund" ["message"]=> string(60) "Le montant du remboursement doit être supérieure à zéro." ["data"]=> int(400) }
19 janvier 2018 à 19 h 13 min #49423j’ai mis ma lampe frontale pour me plonger dans le code est ce que j’ai trouvé pour « line_items » n’a pas grand chose à voir avec la documentation ou avec ce qui s’affiche avec une requête « OPTIONS ».
les arguments à envoyer sont les suivants :
https://pastebin.com/r9XzXCqAlà on se dit « super on a trouvé » mais ça ne fonctionne pas encore à cause d’un bug qui remplace le « idLigne » par 0. en mettant le code suivant sur le serveur, ça évite ce remplacement en bloquant la mise en forme du tableau « line_items » lors de la requête.
https://pastebin.com/rt2EWQRkDéveloppeur PHP et WordPress En Alsace dans l'annuaire des prestataires WordPress et WooCommerce
Création d'extensions pour WordPress et WooCommerce - Personnalisation d'extensions existantes
🔶 Si vous appréciez mon aide, vous pouvez me faire un don de n'importe quel montant en cliquant ici.19 janvier 2018 à 20 h 28 min #49425Merci beaucoup d’y avoir consacré de ton temps.
J’essaierai ce petit patch temporaire un peu plus tard (santé fragile en ce moment). Comment es-tu arrivé à trouver ce bug? J’avais essayé de remonter le code à partir de la classe « class-wc-rest-order-refunds-controller.php » sans succès.
Est-ce que ce bug a été signalé pour une future correction?
19 janvier 2018 à 23 h 11 min #49434C’est dans cette classe qu’il y a la même fonction qui est utilisée pour créé un remboursement que dans l’espace d’administration. Et donc j’ai comparé ce que reçoit cette fonction dans les 2 cas pour voir que le tableau « ligne_items » était différent.
Pour le signalement, je n’utilise plus trop Github en ce moment donc je n’ai rien marqué.
Développeur PHP et WordPress En Alsace dans l'annuaire des prestataires WordPress et WooCommerce
Création d'extensions pour WordPress et WooCommerce - Personnalisation d'extensions existantes
🔶 Si vous appréciez mon aide, vous pouvez me faire un don de n'importe quel montant en cliquant ici.20 janvier 2018 à 19 h 01 min #49470Je vois bien que le problème viendrait de la variable $request[‘line_items’]. $request correspondrait à la requête que j’envoie. Par contre, je n’arrive pas à savoir à quel endroit est traitée cette variable pour mettre idligne à zéro avant d’arriver dans la fonction wc_create_refund. (ça fait au moins 2 heures que j’essaie de comprendre ^^)
21 janvier 2018 à 0 h 33 min #49481la clé est enlevée dans le fichier « wp-includes/rest-api.php » ligne 1 236
la trace d’appel de cette ligne est là :
https://pastebin.com/cAhtzq33Pour faire des recherches dans le code et pour développer en PHP, je vous conseille Eclipse for PHP.
Cet éditeur fait beaucoup de choses pratiques comme par exemple aller à la définition d’une fonction et inversement retrouver les appels d’une fonction.Développeur PHP et WordPress En Alsace dans l'annuaire des prestataires WordPress et WooCommerce
Création d'extensions pour WordPress et WooCommerce - Personnalisation d'extensions existantes
🔶 Si vous appréciez mon aide, vous pouvez me faire un don de n'importe quel montant en cliquant ici.25 janvier 2018 à 21 h 22 min #49813Finalement, ça ne fonctionnait toujours pas. J’ai donc tenté un report de bug sur github, et vu que j’ai un anglais approximatif, j’ai juste écrit que line_items bug.
Mais ça n’a pas eu l’effet escompté. Ils ont décidé que line_items est read-only, et ils ont « amélioré » le code en conséquence.
Ce qui veut dire qu’en passant par l’API, tu génères des avoirs vides, normal…
25 janvier 2018 à 21 h 23 min #49814 -
AuteurMessages
- Vous devez être connecté pour répondre à ce sujet.