PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Probleme API Rest JSON
Probleme API Rest JSON
Iniciado por Paul SOULAT, 03,mar. 2020 08:16 - 26 respuestas
Miembro registrado
49 mensajes
Publicado el 03,marzo 2020 - 08:16
Bonjour,

Je me rapproche de vous car je ne suis pas très expert dans la manipulation des API et
j'ai du mal à comprendre le fonctionnement de celle-ci.

Quelqu'un pourrait-il m'aider s'il vous plait

Page de l'API
https://api.fulleapps.io/docs/

Explication fournies:

Pour utiliser l'API en externe, vous devez utiliser la clé utilisateur unique de votre compte commerçant.
Cette clé est disponible à la demande auprés de votre revendeur.
Une fois la clé obtenue, utilisez celle ci dans un header Authorization afin de récupérer et gérer les données de compte via notre API REST.
Pour utiliser l'API avec votre clé, voici un exemple du header à placer :
'Authorization' : 'Mutual %CLE_UTILISATEUR%'

J'ai bien la clé mais où faut-il la renseigner?
Quel adresse dois-je renseigner dans ma ligne restrequette.url

Merci à vous pour votre aide
Miembro registrado
134 mensajes
Publicado el 03,marzo 2020 - 10:00
Bonjour,

Quelque chose comme ça ?

requete est un restRequête
reponse est un restRéponse

port est un entier
protocole, serveur, url_compte est une chaîne

protocole = "https://"
serveur = "api.fulleapps.io";
port = 443

url_compte = "/account"

requete..URL = protocole + serveur + ":" + port + url_compte
requete..Méthode = httpGet

requete..entete [ "Accept" ] = "application/json"
requete..Entête [ "Authorization" ] = "Mutual " + valeur_de_la_cle

reponse = RESTEnvoie( requete )

SI ErreurDétectée ALORS
Erreur( ErreurInfo( errComplet ) )
SINON
Trace( reponse..Contenu )
FIN // SI ErreurDétectée ALORS
Miembro registrado
49 mensajes
Publicado el 03,marzo 2020 - 10:27
Bonjour Julien,

Merci pour votre réponse je vais tester et vous tiens informé

un grand merci
Miembro registrado
49 mensajes
Publicado el 03,marzo 2020 - 10:39
Ca fonctionne merci beaucoup
Miembro registrado
49 mensajes
Publicado el 03,marzo 2020 - 13:36
Re bonjour,

Je remonte bien le retour de l'API mais je ne parviens pas a en extraire les données
j'ai essayé avec jsonversvariant mais cela ne fonctionne pas

Merci
Miembro registrado
2.682 mensajes
Publicado el 03,marzo 2020 - 14:39
qu'est ce qui ne fonctionne pas ?

--
Cordialement,

Philippe SAINT-BERTIN
Miembro registrado
49 mensajes
Publicado el 03,marzo 2020 - 14:48
je ne parviens pas a recupérer la liste des éléments dont j'ai besoins

lorsque je test avec jsonversvariant j'ai le retour suivant :






et lorsque j'utilise reponseJson est un JSON = reponse..Contenu
j'ai en retour







je souhaite récupérer la liste des articles je peux vous fournir la clé de test que j'utilise :
"3e67788c611f2b3b16f4bfc49ccea465fa9c8b71"

Merci à vous
Miembro registrado
134 mensajes
Publicado el 03,marzo 2020 - 15:19
Re,

Il faut faire un resultat est un Variant et resultat = JSONVersVariant( reponse..Contenu ).
Je ne sais pas quelle requête vous faites mais à vu de nez il faudrait faire un

resultat = JSONVersVariant( reponse..Contenu )
SI resultat.list..Existe ALORS
POUR i = 1 _À_ TableauOccurrence( resultat.list )
Trace( resultat.list[ i ].id )
FIN
FIN


Le meilleur moyen de savoir est de mettre un point d'arrêt juste après resultat = JSONVersVariant( reponse..Contenu ) et regarder dans le volet Débogueur le contenu de resultat




Miembro registrado
49 mensajes
Publicado el 03,marzo 2020 - 16:52
Merci beaucoup cela fonctionne et effectivement c'est bien plus pratique d'utiliser les points d'arret je n'y avait pas pensé merci
Miembro registrado
49 mensajes
Publicado el 05,marzo 2020 - 13:44
Re bonjour à tous

Je vous remercie pour votre aide cela fonctionne parfaitement, toutefois comment doit-on procéder pour la méthode post en effet lorsque je met l'exemple fourni sur le site de l'api il y a des [] et du coup je n'arrive pas à programmer le post
il y a t il une méthode particulière là aussi ?

Merci
Miembro registrado
134 mensajes
Publicado el 05,marzo 2020 - 14:48
Bonjour,

Pour un POST :
VariableRAZ( requete )
requete..URL = protocole + serveur + url
requete..Méthode = httpPost
requete..Entête [ "Accept" ] = "application/json"
requete..Entête [ "Authorization" ] = "Mutual " + valeur_de_la_cle
requete..ContentType = typeMimeJSON
requete..Contenu = SansEspace( VariantVersJSON( parametres ) )
reponse = RESTEnvoie( requete )

où parametres est un Variant rempli avec vos infos (ex. parametres.id = 12345, parametres.monTableau[ 1 ] = [ "valeurA" , "valeurB" ], etc.).
Miembro registrado
49 mensajes
Publicado el 05,marzo 2020 - 19:16
Bonsoir merci poue votre retour julien j'ai fais comme vous me l'avez conseillé et cela me renvoi une erreur peut-être ai-je mal renseigné quelque chose ?

sCle est une chaîne = SAI_Cle //
requete est un restRequête
reponse est un restRéponse

port est un entier
protocole, serveur, url_compte est une chaîne

protocole = "https://"
serveur = "api.fulleapps.io";
port = 443

url_compte = "/rubrics"
parametres est un Variant

VariableRAZ( requete )
requete..URL = protocole + serveur + ":" + port + url_compte
requete..Méthode = httpPost
requete..Entête [ "Accept" ] = "application/json"
requete..Entête [ "Authorization" ] = "Mutual " + sCle
requete..ContentType = typeMimeJSON
requete..Contenu = SansEspace( VariantVersJSON( parametres ) )

parametres.rubrics.id = 6
parametres.rubrics.name = "TEST RUBRIQUE"
parametres.rubrics.order_name = "1 TEST RUBRIQUE"
parametres.rubrics.color = "#000000"
parametres.rubrics.archive = "0"
parametres.rubrics.id_kitchen_level = "null"
parametres.rubrics.decimals = "0"
parametres.rubrics.excluded = "0"
parametres.rubrics.id_parent = "null"
parametres.rubrics.tax_grouping.id = "25258"
parametres.rubrics.tax_grouping.name = "ALCOOL 20%"
parametres.rubrics.tax_grouping.archive = "0"
parametres.rubrics.tax_grouping.id_tax_1 = "12345"
parametres.rubrics.tax_grouping.id_tax_2 = "16342"
parametres.rubrics.tax_grouping.percent_tax_1 = "100"
parametres.rubrics.tax_grouping.percent_tax_2 = "0"
parametres.rubrics.order_slot = "15"
parametres.rubrics.limit_order_slot = "0"

reponse = RESTEnvoie( requete )

SI ErreurDétectée ALORS
Erreur( ErreurInfo( errComplet ) )
FIN


Merci pour votre aide
Miembro registrado
134 mensajes
Publicado el 06,marzo 2020 - 09:56
Bonjour,

Le remplissage du variant parametres doit se faire avant la ligne requete..Contenu = SansEspace( VariantVersJSON( parametres ) )
Miembro registrado
49 mensajes
Publicado el 06,marzo 2020 - 10:22
Merci je vais tester
Miembro registrado
49 mensajes
Publicado el 06,marzo 2020 - 11:09
J'ai bien mis les éléments "parametres" où indiqué mais rien n'est envoyé je n'ai aucun retour m'informant d'une quelconque erreur
Miembro registrado
953 mensajes
Publicado el 06,marzo 2020 - 12:42
bonjour,

si jamais présentez votre code une fois modifié,
mais du bout de code que je vois,

après un restEnvoie() , il faut tester ErreurDetecté ok, mais cela n'indique que si la requête est bien partie ou non, cela ne vous indique pas le retour du serveur.
Il faut analyser la valeur de la propriété ..CodeEtat de votre variable resteReponse ( reponse ).

de plus, vous souhaitez faire quoi avec votre code ?
Créer une rubrique ? ou la modifier ?

Si c'est une création et que tout c'est correctement déroulé, vous devriez avoir 200 dans reponse..CodeEtat
Miembro registrado
49 mensajes
Publicado el 06,marzo 2020 - 12:58
Bonjour Christophe je souhaite faire une création dans un premier temps mais la modification viendra également dans un second temps
Miembro registrado
49 mensajes
Publicado el 06,marzo 2020 - 13:06
Je viens d'essayer avec le reponse..CodeEtat et cela me renvoi bien 200
Miembro registrado
953 mensajes
Publicado el 06,marzo 2020 - 13:14
et du coup,

quelle valeur avez vous dans la propriété 'CodeEtat' de votre variable restResponse ( response ) ?

de plus dans votre code, vous spécifié l'ID alors que c'est une création, et que 'pour moi' , vous ne devriez pas. L'ID est attribuée par le serveur , ce n'est pas à vous de la définir.

je connais pas ces API mais un truc du genre :

Après, vous spécifié des ID de tax , je pense qu'il faut qu'ils existent dans votre système...
Attention à order_slot et limit_order_slot qui sont spécifié en 'number' , des valeurs numérique.

sCle est une chaîne = SAI_Cle //
requete est un restRequête
reponse est un restRéponse

port est un entier
protocole, serveur, url_compte est une chaîne

protocole = "https://"
serveur = "api.fulleapps.io";
port = 443

url_compte = "/rubrics"
parametres est un Variant

VariableRAZ( requete )
requete..URL = protocole + serveur + ":" + port + url_compte
requete..Méthode = httpPost
requete..Entête [ "Accept" ] = "application/json"
requete..Entête [ "Authorization" ] = "Mutual " + sCle
requete..ContentType = typeMimeJSON


parametres.id = Null
parametres.name = "TEST RUBRIQUE"
parametres.order_name = "1 TEST RUBRIQUE"
parametres.color = "#000000"
parametres.archive = "0"
parametres.id_kitchen_level = Null
parametres.decimals = "0"
parametres.excluded = "0"
parametres.id_parent = Null
parametres.tax_grouping.id = "25258"
parametres.tax_grouping.name = "ALCOOL 20%"
parametres.tax_grouping.archive = "0"
parametres.tax_grouping.id_tax_1 = "12345"
parametres.tax_grouping.id_tax_2 = "16342"
parametres.tax_grouping.percent_tax_1 = "100"
parametres.tax_grouping.percent_tax_2 = "0"
parametres.order_slot = 15
parametres.limit_order_slot = 0

requete..Contenu = SansEspace( VariantVersJSON( parametres ) )

reponse = RESTEnvoie( requete )

SI ErreurDétectée ALORS
SI reponse..CodeEtat=200 ALORS
Info("Création OK !",reponse..Contenu)
SINON
Erreur("Erreur de création !","Code état : "+reponse..CodeEtat,reponse..Contenu)
FIN
FIN


à tester...
Mensaje modificado, 06,marzo 2020 - 13:16
Miembro registrado
134 mensajes
Publicado el 06,marzo 2020 - 13:30
Avec la clé de test donnée auparavant ça fonctionne :

requete est un restRequête
reponse est un restRéponse
parametres, resultat est un Variant

port est un entier
protocole, serveur, url_rubrique est une chaîne

protocole = "https://"
serveur = "api.fulleapps.io";
port = 443

url_rubrique = "/rubrics"

requete..URL = protocole + serveur + ":" + port + url_rubrique
requete..Méthode = httpPost

requete..Entête [ "Accept" ] = "application/json"
requete..Entête [ "Authorization" ] = "Mutual " + "3e67788c611f2b3b16f4bfc49ccea465fa9c8b71"

parametres.id = Null
parametres.name = "TEST RUBRIQUE"
parametres.order_name = "1 TEST RUBRIQUE"
parametres.color = "#000000"
parametres.archive = "0"
parametres.id_kitchen_level = Null
parametres.decimals = "0"
parametres.excluded = "0"
parametres.id_parent = Null
parametres.tax_grouping.id = "25258"
parametres.tax_grouping.name = "ALCOOL 20%"
parametres.tax_grouping.archive = "0"
parametres.tax_grouping.id_tax_1 = "12345"
parametres.tax_grouping.id_tax_2 = "16342"
parametres.tax_grouping.percent_tax_1 = "100"
parametres.tax_grouping.percent_tax_2 = "0"
parametres.order_slot = 15
parametres.limit_order_slot = 0

requete..ContentType = typeMimeJSON
requete..Contenu = SansEspace( VariantVersJSON( parametres ) )

reponse = RESTEnvoie( requete )

SI ErreurDétectée ALORS
Erreur( ErreurInfo( errComplet ) )
SINON
resultat = JSONVersVariant( reponse..Contenu )
Trace( "ici" )
FIN // SI ErreurDétectée ALORS
Miembro registrado
49 mensajes
Publicado el 06,marzo 2020 - 15:03
Merci Christophe pour votre aide

Christophe :
CodeEtat renvois : 200
Je me suis basé sur la doc de l'api qui indique que l'id est obligatoire c'est pour cela que je l'ai mis mais effectivement il me semble logique qu'il soit fourni automatiquement en effet

Julien :
Le code fonctionne en effet mais aucune modification n'est effective sur le serveur je vais tester sans les id

Merci encore
Miembro registrado
49 mensajes
Publicado el 06,marzo 2020 - 16:23
Un grand merci à tous vous êtes tous au top il faut effectivement ne pas renseigner les ID

Merci beaucoup.
Miembro registrado
49 mensajes
Publicado el 10,marzo 2020 - 13:38
Bonjour je reviens vers vous j'ai une petite question:

Comment renseigner la date de début et de fin lorsque celle ci est obligatoire pour obtenir la réponse?

pour le palmares des ventes par exemple je dois fournir ceci

from_date - required

Date de début de période (YYYY-MM-DD)

to_date required

Date de fin de période (YYYY-MM-DD)


id_point_of_sale
integer

Identifiant du point de vente associé à la vente
id_device
integer

Identifiant de l'appareil associé à la vente
service_number
integer

Numéro de service associé à la vente
id_operator
integer

Identifiant de l'opérateur associé à la vente
id_sale_method
integer

Identifiant du mode de vente associé à la vente
id_client
integer

Identifiant du client associé à la vente


Merci à vous
Miembro registrado
49 mensajes
Publicado el 12,marzo 2020 - 06:31
Re bonjour,

je suis désolé quoi que j'essai je ne parviens pas à renseigner le champ obligatoire :

mon code :
requete est un restRequête
reponse est un restRéponse

port est un entier
protocole, serveur, url_compte est une chaîne

protocole = "https://"
serveur = "api.fulleapps.io";
port = 443

url_compte = "/top_products/statistics"

requete..URL = protocole + serveur + ":" + port + url_compte
requete..Méthode = httpGet

requete..Entête [ "Accept" ] = "application/json"
requete..Entête [ "Authorization" ] = "Mutual " + "520852062bbc6da2540752926c2a9c75a8df3aa3"
reponse = RESTEnvoie( requete )

SI ErreurDétectée ALORS
Erreur( ErreurInfo( errComplet ) )
SINON
resultat est un Variant

resultat = JSONVersVariant( reponse..Contenu )
resultat.request.from_date = "2020-02-01"
resultat.request.to_date = "2020-02-29"

SI resultat.rubrics..Existe ALORS

POUR i = 1 _À_ TableauOccurrence( resultat.rubrics )
sArticle est une chaîne = resultat.rubrics[ i ].name
Trace(sArticle)
FIN
FIN
FIN


les retour avec 2 méthodes ;











le "rubrics" reste inaccessible

Merci
Miembro registrado
49 mensajes
Publicado el 30,marzo 2020 - 11:57
Bonjour Julien je reviens vers vous car je bloque sur un dernier point et je pense le dernier

Lorsque je souhaite créer ou modifier un produit l'API demande un tableau de chaine pour les prix et les catégories

j'ai créé une structure que j'affecte à un tableau mais je n'arrive pas à l'envoyer il n'est jamais pris en compte

Ma structure est la suivante :

stTarif est une structure
sIdTaxGroup est une chaîne
sIMoveVente est une chaîne
sIdPeriode est une chaîne
moPrix est un monétaire
FIN

UnPrix est un stTarif
tabInfoPrix est un tableau de stTarif

POUR TOUT Liste_Prix
UnPrix.sIdTaxGroup = Liste_Prix.Id_TaxG
UnPrix.sIMoveVente = Liste_Prix.Id_ModeVente
UnPrix.sIdPeriode = Liste_Prix.Id_Periode
UnPrix.moPrix = Liste_Prix.Tarif

TableauAjoute(tabInfoPrix, UnPrix)
FIN


j'ai ensuite essayé divers moyen pour le retourner :

Methode 1 :
POUR i = 1 _À_ TableauOccurrence( parametres.prices )
parametres.prices.id_tax_grouping = UnPrix.sIdTaxGroup
parametres.prices.id_sale_method = UnPrix.sIMoveVente
parametres.prices.id_price_period = UnPrix.sIdPeriode
parametres.prices.price = UnPrix.moPrix
FIN



Méthode 2:
POUR TOUT i de tabInfoPrix
parametres.prices.id_tax_grouping = UnPrix.sIdTaxGroup
parametres.prices.id_sale_method = UnPrix.sIMoveVente
parametres.prices.id_price_period = UnPrix.sIdPeriode
parametres.prices.price = UnPrix.moPrix
FIN


Pourriez vous m'indiquer comment retourner le tableau demandé

Merci de votre aide
Miembro registrado
134 mensajes
Publicado el 30,marzo 2020 - 15:58
Bonjour,

Il faut mettre un indice au niveau de prices pour qu'il soit considéré comme un tableau

i est un entier
parametres est un Variant

// Méthode 1
i = TableauAjouteLigne( parametres.prices )
parametres.prices[ i ].id_tax_grouping = UnPrix.sIdTaxGroup
parametres.prices[ i ].id_sale_method = UnPrix.sIMoveVente
parametres.prices[ i ].id_price_period = UnPrix.sIdPeriode
parametres.prices[ i ].price = UnPrix.moPrix

// Méthode 2
POUR TOUT UnPrix de tabInfoPrix
i = TableauAjouteLigne( parametres.prices )
parametres.prices[ i ].id_tax_grouping = UnPrix.sIdTaxGroup
parametres.prices[ i ].id_sale_method = UnPrix.sIMoveVente
parametres.prices[ i ].id_price_period = UnPrix.sIdPeriode
parametres.prices[ i ].price = UnPrix.moPrix
FIN
Publicado el 30,marzo 2020 - 17:27
Woaw ca à l'aire tellement simple une semaine que je me prends la tête

un grand merci