Bonsoir,
J'aurais voulu savoir si certain(e)s d'entre vous ont déjà utilisés l'API magento dans windev et si cela est plutôt simple à mettre en oeuvre ;)
Merci
@++
Version imprimable
Bonsoir,
J'aurais voulu savoir si certain(e)s d'entre vous ont déjà utilisés l'API magento dans windev et si cela est plutôt simple à mettre en oeuvre ;)
Merci
@++
Bonjour,
Si tu parles des WebServices de la version 1.4 de Magento, alors oui, je l'utilise dans l'un de mes projets.
En l'intégrant "à l'ancienne", et en générant une collection de procédure, Windev crée automatiquement toutes les structures nécessaires pour exploiter ce WebService.
Les temps de réponses ne sont pas terribles, mais malgré quelques incohérences c'est assez simple à utiliser.
Tatayo.
Salut,
Merci pour ta réponse. En revanche, en regardant un peu, j'ai l'impression qu'il n'est pas simple d'utiliser les structures imbriquées utilisées pour les paramètres d'appels.
Par exemple le type : catalogProductAttributeMediaCreateEntity
qui contient un second niveau au niveau du file
Comment as-tu géré cela ?
Merci ;)
En fait c'est bien plus simple qu'il n'y parait: Windev s'occupe de (presque) tout.
J'ai une classe qui s'occupe de mettre à jour les articles sur Magento, et justement puisque tu parles de catalogProductAttributeMediaCreateEntity, voici la méthode qui met à jour les images:
Comme tu le vois, le code est bien plus simple qu'il n'y parait quand on intègre le WebService, et les structures imbriquées sont un vrai bonheur.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64 sListeTypes est une chaîne = "image,small_image,thumbnail" sContenuImage est une chaîne MediaCreation est un STcatalogProductAttributeMediaCreateEntity MediaInfo est un STcatalogProductImageEntity bTrouve est un booléen = Faux sNomFicTemp est une chaîne = "FichierCrypte.txt" sRangExport est une chaîne sListeRepertoire est une chaîne sNomRepertoire est une chaîne sListeRepertoire = "j:\Base_Image,j:\Base_Image_annexe" SI :m_sProductId <> "" ALORS POUR TOUTE CHAINE sNomRepertoire DE sListeRepertoire SEPAREE PAR "," SI PAS bTrouve ALORS SI fFichierExiste(sNomRepertoire + sNomFic) ALORS sNomFic = sNomRepertoire + sNomFic bTrouve = Vrai FIN FIN FIN // J'ai trouvé une image qui correspond SI bTrouve ALORS SI Dimension(:ListeMedia:m_catalogProductImageEntityArray) = 0 ALORS // Je charge la liste des images :ListeMedia = MagentoService.catalogProductAttributeMediaList(::mg_sIdSession, :m_sCodeUvc,"","sku") FIN fCrypte(sNomFic,sNomFicTemp,"",crypteAucun,encodeBASE64) sContenuImage = fChargeTexte(sNomFicTemp) sRangExport = Majuscule(Remplace(ExtraitChaîne(sNomFic,2,"-"),".jpg","",SansCasse)) MediaCreation:m_exclude = "0" MediaCreation:m_label = "" MediaCreation:m_remove = "0" SI EstNumérique(sRangExport) OU sRangExport = "A" ALORS Dimension(MediaCreation:m_types:m_ArrayOfString,3) MediaCreation:m_types:m_ArrayOfString[1] = "image" MediaCreation:m_types:m_ArrayOfString[2] = "small_image" MediaCreation:m_types:m_ArrayOfString[3] = "thumbnail" FIN MediaCreation:m_file:m_content = sContenuImage MediaCreation:m_file:m_name = fExtraitChemin(sNomFic,fFichier+fExtension) MediaCreation:m_file:m_mime = "image/jpeg" bTrouve = Faux POUR TOUT MediaInfo DE :ListeMedia:m_catalogProductImageEntityArray SI Position(MediaInfo:m_file,MediaCreation:m_file:m_name,0,SansCasse+DepuisFin) <> 0 ALORS MagentoService.catalogProductAttributeMediaRemove(::mg_sIdSession,:m_sCodeUvc,MediaInfo:m_file,"sku") bTrouve = Vrai FIN FIN MagentoService.catalogProductAttributeMediaCreate(::mg_sIdSession, :m_sCodeUvc,MediaCreation,"0","sku") fSupprime(sNomFicTemp) FIN FIN
Pour la récupération des commandes, c'est aussi simple: il suffit de récupérer la commande avec SalesOrderInfo(), qui te renvoie un salesOrderEntity. Cette structure contient un tableau de SalesOrderItemEntity: les lignes de la commande.
Pour lire le contenu de la commande, il suffit donc de déclarer une variable de type SalesOrderItemEntity, et de faire une boucle Pour Tout:
Tatayo.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 Filtre est un STfilters Resultat est un STsalesOrderEntityArray Commande est un STsalesOrderEntity LigneCommande est un STsalesOrderItemEntity CommandeComplete est un STsalesOrderEntity sIdSession est une chaîne Historique est un STsalesOrderStatusHistoryEntity Dimension(Filtre:m_filter:m_associativeArray,1) Filtre:m_filter:m_associativeArray[1]:m_key = "order_id" Filtre:m_filter:m_associativeArray[1]:m_value = "24485" sIdSession = MagentoService.login("xxxxx","xxxxx") Resultat = MagentoService.salesOrderList(sIdSession,Filtre) POUR TOUT Commande DE Resultat:m_salesOrderEntityArray CommandeComplete = MagentoService.salesOrderInfo(sIdSession,Commande:m_increment_id) SI CommandeComplete:m_state <> "canceled" ALORS Trace(CommandeComplete:m_increment_id,CommandeComplete:m_order_id,CommandeComplete:m_customer_firstname,CommandeComplete:m_customer_lastname,CommandeComplete:m_status,CommandeComplete:m_state,CommandeComplete:m_created_at,CommandeComplete:m_updated_at,CommandeComplete:m_shipping_method) Trace("Réglement : ",CommandeComplete:m_payment:m_cc_type + "_" + CommandeComplete:m_payment:m_method,CommandeComplete:m_payment:m_po_number,CommandeComplete:m_payment:m_amount_ordered,CommandeComplete:m_payment:m_base_amount_ordered,CommandeComplete:m_payment:m_cc_last4,CommandeComplete:m_payment:m_cc_number_enc,CommandeComplete:m_payment:m_po_number,CommandeComplete:m_payment:m_created_at,CommandeComplete:m_payment:m_updated_at) POUR TOUT LigneCommande DE CommandeComplete:m_items:m_salesOrderItemEntityArray Trace(LigneCommande:m_sku,LigneCommande:m_qty_ordered,LigneCommande:m_base_price,LigneCommande:m_row_total,LigneCommande:m_tax_amount,LigneCommande:m_base_discount_amount) FIN POUR TOUT Historique DE CommandeComplete:m_status_history:m_salesOrderStatusHistoryEntityArray Trace(Historique:m_updated_at,Historique:m_status,Historique:m_created_at,Historique:m_is_customer_notified) FIN FIN Trace("================") FIN MagentoService.endSession(sIdSession)
Bonjour j'essaye désespérément de me connecter magento avec windev15 pour consulter la liste de mes nouveaux produit et je n'y arrives pas
je voudrais faire une fenêtre qui accède au infos des nouveaux produits de mon site magento
pouvez vous me donner des infos sur la procédure cote magento et windev
avez vous des exemples que je pourrais utiliser pour faire des test merci d'avance
Pourrais tu me dire la procédure que tu utilise pour te connecter sur l'api, utilises tu soap ?
Bonjour,
Pour le côté Magento, aucune idée vu que ce n'est pas moi qui m'occupe de nos sites Web. Je ne prends en charge que la partie "applicative", qui fait communiquer notre base de données avec les sites Magento.
Pour me connecter à Magento (version 1.4.kekchose :aie:), j'utilise l'API SOAP version 2, que j'ai intégré "à l'ancienne" en demandant à Windev de générer une collection de procédure.
Pour récupérer les informations d'un article, il te faut:
1. Déclarer une variable de type STcatalogProductReturnEntity:
C'est cettte variable qui contiendra les données de l'articleCode:
1
2 ArticleDetail est un magentoservice.STcatalogProductReturnEntity.
2. Te connecter au WebService:
La variable IdSession est importante, elle sera utilisé pour tous les appels au WebServiceCode:
1
2 sIdSession = MagentoService.login("TonLogin","TonModDePasse").
3. Pour récupérer les données de l'article:
La variable sCodeUvc contient l'identifiant de ton article, 0 est le numéro du StoreView de Magento, attributs contient la liste des attributs que tu veux récupérer. Je la renseigne ainsi:Code:
1
2
3 Attributs est un STcatalogProductRequestAttributes ArticleDetail = MagentoService.catalogProductInfo(sIdSession,sCodeUvc,"0",:Attributs,"sku")
Et voilà, tu as les infos de ton article. Et pour avoir la liste des articles, tu peux utiliser catalogProductList. Par contre je ne sais pas si tu peux ne récupérer que les nouveaux articles.Code:
1
2
3
4
5
6 sListeAttributs est une chaîne = "name,description,short_description,weight,status,url_key,url_path,visibility,has_options,gift_message_available,price,special_price,special_from_date,special_to_date,tax_class_id,websites,category_ids,website_ids,meta_title,meta_keyword,meta_description,custom_design,custom_layout_update,options_container" Dimension(:Attributs:m_attributes:m_ArrayOfString,ChaîneOccurrence(sListeAttributs,",") + 1) POUR nIndice = 1 _A_ ChaîneOccurrence(sListeAttributs,",") + 1 Attributs:m_attributes:m_ArrayOfString[nIndice] = ExtraitChaîne(sListeAttributs,nIndice,",") FIN
Dernière petite chose, si ça fonctionne en version 15 de Windev, je ne suis pas sûr que ça marche avec la 14, et je sais que ça ne fonctionne pas du tout avec les versions antérieures.
Tatayo.
Bonjour merci pour le post ci dessus mais j'aurais 2autres petites question ( Je n'ai jamais utiliser sopa :))
1- Quel est la procedure de connexion a soap et comment on rapatrie la collection de procedure ????
<ue j'ai intégré "à l'ancienne" en demandant à Windev de générer une collection de procédure.>
comment tu fais ?????
2- vous utiliser soapexecute ???
3- quel est l'url por magento car jai essayer http://youmagentohost/api/soap/?wsdl) mais ça ne marche pas
pouvez vous mettre un exemple merci d'avance car je comprend pas le mode d'interface entre windev et magento
merci
Alors dans l'ordre:
Atelier => WebService => importer un Webservice. Il faut par contre cocher la case "Importer en mode compatible version 14".
Ca fonctionne peut-être sans, mais comme j'ai besoin de surcharger la fonction "erreur" de Windev pour trapper les messages d'erreur, j'en ai besoin.
Ensuite il faut indiquer à Windev que c'est un WebService Soap générique, et qu'il faut créer une collection de procédure.
Moi non, mais c'est intégré dans la collection de procédure générée par Windev.
http://AdresseDuSite/index.php/api/v2_soap/index?wsdl
C'est déjà fait, j'ai posté quelques exemples avec des explications...
Tatayo.
a l'importation du webservice j'ai le fichier obtenu n'est pas un fichier de description de webservice valide wsdl
avez vous une idee
quelle est votre version de magento ??
Là je ne sais pas, ce n'est pas moi qui m'occupe des sites Internet. Est-ce que le fichier est bien affiché quand tu le récupères dans un navigateur ? Si ce n'est pas le cas il faut peut-être voir avec un forum dédié à Magento...
:whistle:
Tatayo.
avec le lien suivant j'ai une erreur
http://AdresseDuSite/index.php/api/v2_soap/index?wsdl
par contre ça importe avec ce lien
http://www.monsite.fr/index.php/api/soap/index?wsdl
mais il manque des procédure a première vue avez vous une idee
apres l'import j'ai anyType type inconnu dans les erreur et STFixedArray type inconu
moi j'ai ça comme procédure apres import et vous ???
call
endsession
globalfaults
login
multicall
resourcefaults
resources
startsession
et 2 variable stfixedarray et
si c'est ok apres on fais quoi ???
si le lien est bon il resemble a quoi le fichier ????
moi j'ai pas ce type dans les procedure STcatalogProductReturnEntity
c'est vous qui l'avais créer ????
Je dirai que tu as importé l'API en version 1, la version 2 m'a généré 84 procédure publiques et au moins le double de procédures privées...
Si le lien est bon le fichier ressemble à un fichier xml, avec la description des procédures et des types de données.
Si le lien que je t'ai donné ne fonctionne pas, il faut peut-être installer la nouvelle version, mais là je ne peux pas t'aider...
Tatayo.
j'ai enfin trouve la bonne collection de procedure v2
comment faire un test simple pour savoir si la connexion login password marche ??
j'ai fais ça sur un bouton et quand je clique ça renvois rien
MagentoService.login("comptedetestapi","password")
info(MagentoService.login("comptedetestapi","password"))
??
1 j'importe l apiV2 avec mon login et password magento api
Je crée un bouton et je met
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 ArticleDetail est un magentoservice.STcatalogProductReturnEntity sIdSession est une chaine sIdSession = MagentoService.login("TonLogin","TonModDePasse Attributs est un STcatalogProductRequestAttributes ArticleDetail = MagentoService.catalogProductInfo(sIdSession,sCodeUvc,"0",:Attributs,"sku") sListeAttributs est une chaîne = "name,description,short_description,weight,status,url_key,url_path,visibility,has_options,gift_message_available,price,special_price,special_from_date,special_to_date,tax_class_id,websites,category_ids,website_ids,meta_title,meta_keyword,meta_description,custom_design,custom_layout_update,options_container" Dimension(:Attributs:m_attributes:m_ArrayOfString,ChaîneOccurrence(sListeAttributs,",") + 1) POUR nIndice = 1 _A_ ChaîneOccurrence(sListeAttributs,",") + 1 Attributs:m_attributes:m_ArrayOfString[nIndice] = ExtraitChaîne(sListeAttributs,nIndice,",") FIN
c'est bien ça
et je clique le bouton ? le resultat c'est quoi ???
je narrive pas a etablir la connexion
Erreur à la ligne 23 du traitement Procédure globale login.
La fonction SOAPDonneRésultat aurait dû renvoyer une valeur.
problème réglé voir detail solution installation soap sur serveur
Pour le premier message, tu as bon mais dans le désordre. L'affectation de la structure attributs sert à indiquer au WebService quels attributs doivent être renvoyés. Si tu affectes cette structure APRES l'appel au WebService, elle ne sert plus à grand chose...
Après pour ton problème de connexion, je ne peux pas t'aider, il faut regarder dans les logs du serveur si tu peux en trouver la raison.
Tatayo.
comme ça alors
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 ArticleDetail est un magentoservice.STcatalogProductReturnEntity Attributs est un STcatalogProductRequestAttributes ArticleDetail = MagentoService.catalogProductInfo(sIdSession,sCodeUvc,"0",:Attributs,"sku") sListeAttributs est une chaîne = "name,description,short_description,weight,status,url_key,url_path,visibility,has_options,gift_message_available,price,special_price,special_from_date,special_to_date,tax_class_id,websites,category_ids,website_ids,meta_title,meta_keyword,meta_description,custom_design,custom_layout_update,options_container" Dimension(:Attributs:m_attributes:m_ArrayOfString,ChaîneOccurrence(sListeAttributs,",") + 1) POUR nIndice = 1 _A_ ChaîneOccurrence(sListeAttributs,",") + 1 Attributs:m_attributes:m_ArrayOfString[nIndice] = ExtraitChaîne(sListeAttributs,nIndice,",") FIN sIdSession est une chaine sIdSession = MagentoService.login("TonLogin","TonModDePasse
Le problème etais du coté serveur je vous donne la solution ça devrais aider tous le monde
les serveur dédie chez OVH centos inclus php5 mais pas l'extension client serveur soap
pour installer l'extension php soap voici la procédure
yum clean all
yum install php-soap
et la ça marche nickel
code du bouton
le résultat est une fenêtre avec le N° de sessionCode:
1
2
3
4 sIdSession est une chaîne sIdSession = MagentoService.login("login utilisateur webservice magento","password utilisateur webservice magento") Info( MagentoService.login("test","azerty"))
merci a toi pour ton aide précieuse
Jreposte ici, je crois que le MP est pas passé.
En fait j'ai essayé ca :
Pour récupérer tous les produits mais ca ne me renvoie rien.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 Filtre est un STfilters Resultat est un STcatalogProductEntityArray Produit est un STcatalogProductEntity sSdSession est une chaîne sSdSession = MagentoService.login("test","azerty") Dimension(Filtre:m_filter:m_associativeArray,1) //Filtre:m_filter:m_associativeArray[1]:m_key = "" //Filtre:m_filter:m_associativeArray[1]:m_value = "" Resultat=MagentoService.catalogProductList(sSdSession,Filtre,"0") POUR TOUT Produit DE Resultat:m_catalogProductEntityArray Trace(Produit:m_name) FIN MagentoService.endSession(sSdSession)
Alors serait ce un problème sur le filtrage, je ne veux pas filtrer j'ai donc laissé vide mais je ne sais pas si c'est correcte.
Sinon ou trouves tu Tatayo les types de filtres comme id_order etc...
Ou alors ca vient du parcours du tableau mais je ne sais pas il me semble bon ?
Qu'en penses tu ?
Dernière chose après j'arrête :calim2: sais tu exploiter les codes erreurs qu'ils mettent sur le site de l'api magento : 101 Product not exists. ?
Voila encore merci :)
Je viens de regarder dans mon code de test, et la seule différence est là:
Je j'ai pas passé de storeview en paramètre, mais comme je n'utilise pas cette méthode en production, je ne suis pas sûr que ça change quelquechose...Code:
1
2 Resultat = MagentoService.catalogproductlist(sIdSession,Filtre,"")
Pour les filtres, il s'agit juste des attributs, donc je regarde ce qu'il y a dans les structures générées par le Webservice, et je tatonne. En tout cas pour ne pas filtre, il suffit effectivement de ne rien affecter à la variable STfilter.
En ce qui concerne les codes d'erreur, comme ce WebService est utilisé dans un process en batch, je me "contente" de les prendre tels quels, de les logguer et les envoyer par mail (ce qui parfois fait beaucoup de mails :aie:). Je n'ai pas trouvé de doc regroupant les messages d'erreur, mais je n'ai pas trop cherché non plus.
Tatayo.
Salut Tatayo, merci pour tout ton aide cela nous a permis de bien avancer et mieux comprendre l'api.
Pour mon problème ou je n'arrivais pas à récupérer les infos de ma base avec le message SOAP-ERROR: Encoding: object hasn't 'website_ids'
Voici la solution :
http://www.magentocommerce.com/bug-t...sue?issue=6614
Par contre j'ai un petit problème sur la récupération des dates created_at et updated_at, elles sont bien remplies dans la base mais impossible de les récupérer je récupère bien les autres infos :m_name... mais impossible pour :m_updated_at et m_created_at
As tu deja eu ce problème de date ?
Autre problème, je n'arrive pas à récupérer le manufacturer qui n'est pas dans la liste des attributs :
Je pense qu'il s'agit d'un "additional_attribut" ? Si oui comment exploiter ces attributs additionnels ?Code:
1
2 sListeAttributs est une chaîne = "name,description,short_description,weight,status,url_key,url_path,visibility,has_options,gift_message_available,price,special_price,special_from_date,special_to_date,tax_class_id,websites,category_ids,website_ids,meta_title,meta_keyword,meta_description,custom_design,custom_layout_update,options_container"
J'ai fait ca :
Mais après je ne sais pas comment afficher ces attributs ?Code:
1
2
3
4
5
6
7
8 sListeAttributs2 est une chaîne="manufacturer" Dimension(Attributs:m_additional_attributes:m_ArrayOfString,ChaîneOccurrence(sListeAttributs2,",") + 1) POUR nIndice = 1 _A_ ChaîneOccurrence(sListeAttributs2,",") + 1 Attributs:m_additional_attributes:m_ArrayOfString[nIndice]= ExtraitChaîne(sListeAttributs2,nIndice,",") FIN
Es tu tomber sur ces types de problème mon bon Tatayo ?
Merci à toi
Salut pfont,
Pour les additional attributes, je fais exactement ce que tu décris.
Je ne me sers pas des dates de création/modifications (en tous cas celle de Magento), donc je ne les récupère pas. Par contre j'ai noté que certains attributs étendus ne sont pas renvoyés (je ne les ai plus en tête, mais j'en avais au moins 2 qui n'étaient pas renvoyés). Peut-être que ces des dates sont aussi concernés par ce qui semble être un bug de l'interface.
Pour afficher les attributs étendus, regarde bien la définition de la structure que renvoie catalogProductInfo(), et tu auras la réponse.
Petit indice: le nom est plutôt explicite :mrgreen:
Tatayo.
Je comprend pas trop la logique :
Par exemple on veut récupérer la liste des produits avec MagentoService.catalogProductList qui retourne un tableau de produits : STcatalogProductEntityArray
Donc pour parcourir nos produits on parcourt le tableau :
ou "Produit" est un produit :mouarf: donc un STcatalogProductEntityCode:
1
2
3
4 POUR TOUT Produit DE Resultat:m_catalogProductEntityArray info(Produit:m_name) FIN
(en fait jviens de capter que windev s'en fou du type de l'objet dans un POUR TOUT .... DE le typage se fait en auto)
Donc jusque là c'est logique.
Ensuite pour afficher les attributs avec la méthode MagentoService.catalogProductInfo qui renvoie STcatalogProductReturnEntity (hummm c'est quoi la différence entre un STcatalogProductEntity et un STcatalogProductReturnEntity ???)
Enfin bref on cale un
ArticleDetail = MagentoService.catalogProductInfo(sSdSession,id,"0",Attributs)
et on accède par ArticleDetail:m_price
et heu....
Heu ok j'ai compris...
Donc ca donnerai ca pour exploiter les additionnal attributes :
ArticleDetail:m_additional_attributes:m_associativeArray[0]:m_value
Oui.... logique :calim2:okkkkkkkkkkkkkk
Du coup je viens de saisir la différence entre STcatalogProductEntity et STcatalogProductReturnEntity.
Merci Tatayo de m'avoir fait monologuer la solution :ccool: