PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 27 → Webservices Adelya
Webservices Adelya
Started by guev, May, 13 2022 12:34 AM - 10 replies
Registered member
77 messages
Posted on May, 13 2022 - 12:34 AM
Bonjour

Je suis un peu perdu et surtout novice avec les webservices.

Je dois utiliser des webservices pour un logiciel de fidélité.
La doc est ici : https://qa.adelya.com/apiv1/index.jsp

Voici les identifiants :
Identifiant API : API_YvesRocher_Gbh
Mot de Passe : XJcqLM759pd5
APIKEYS : KEY-f6fde269-2753-4eba-8bf3-55928432c74a

Je n'arrive pas à me connecter. Je ne sais pas trop quelle syntaxe écrire.
J'ai fait ceci mais ça ne fonctionne pas.
api_key est une chaîne UNICODE = "KEY-f6fde269-2753-4eba-8bf3-55928432c74a"
h est un HTTPRequête
h..Méthode = httpGet
h..URL = "http://qa.adelya.com/apiv1/webapi.do"
h..Utilisateur = "API_YvesRocher_Gbh"
h..MotDePasse = "XJcqLM759pd5"

r est un restRéponse = RESTEnvoie(h)

SI r..CodeEtat = 200 ALORS
MonJson est un JSON = r.Contenu
Info(MonJson)
SINON
Erreur("Erreur")
FIN


Quelqu'un peut-il m'aider ?
Je vous remercie.

Hervé

--
Hervé
Registered member
77 messages
Posted on May, 13 2022 - 4:41 AM
Voici une doc supplémentaire : https://docs.google.com/document/d/1tje4bLnMhTJjxni4yyJt8j8kjEdBIa4KWYdxJj4pCC8/edit

J'ai modifié mon code comme ceci mais toujours une erreur :
h est un HTTPRequête
h..Méthode = httpGet
h..URL = "http://qa.adelya.com/apiv1/webapi.do"
h..Entête["Authorization"] = Encode("KEY-f6fde269-2753-4eba-8bf3-55928432c74a" + ";" + "API_YvesRocher_Gbh" + ";" + "XJcqLM759pd5", encodeBASE64)

r est un restRéponse = RESTEnvoie(h)

SI r..CodeEtat = 200 ALORS
MonJson est un JSON = r.Contenu
Info(MonJson)
SINON
Erreur("Erreur")
FIN


Il manque la mentions "Basic " dans le header HTTP, mais je ne sais pas où le placer.
Merci à ceux qui veulent bien m'aider.

hervé

--
Hervé
Registered member
77 messages
Posted on May, 13 2022 - 5:32 AM
J'ai avancé un peu mais toujours une erreur.

Serveur, protocole, url_API est une chaîne
requete est un HTTPRequête
reponse est un httpRéponse
vConstReq est un Variant
vConstReqCompl est un Variant

Serveur = "qa.adelya.com"
protocole = "https://"
url_API = "/apiv1/webapi.do?"

sUsername est une chaîne = "API_YvesRocher_Gbh"
sPassword est une chaîne = "XJcqLM759pd5"
gsClAPI est une chaîne = "KEY-f6fde269-2753-4eba-8bf3-55928432c74a"

sBasiAuth est une chaîne = gsClAPI+";"+sUsername+":"+sPassword
sBasiAuth = "Basic "+Encode(sBasiAuth, encodeBASE64)

//Construction de la requete
vConstReqCompl.action = "show"
vConstReq.FidelityMember.name = "DUPOND"


//AVEC requete
requete.URL = protocole + sErveur + url_API+"json_header="+VariantVersJSON(vConstReqCompl)+"&json_data="+VariantVersJSON(vConstReq)
//requete.URL = "https://qa.adelya.com/apiv1/webapi.do?json_header={action:'show'}&json_data={FidelityMember:{name:'DUPOND'}}"
requete.Méthode = httpGet
requete.ContentType = typeMimeJSON
requete.Entête [ "Accept" ] = "application/json"
requete.Entête[ "Authorization" ] = sBasiAuth
requete.IgnoreErreur = httpIgnoreCertificatExpiré + httpIgnoreCertificatInvalide + httpIgnoreNomCertificatInvalide + httpIgnoreRedirection + httpIgnoreRevocation

reponse = HTTPEnvoie( requete )

SI ErreurDétectée ALORS
Erreur("ERREUR ----- " + ErreurInfo(errComplet))
SINON
Info("REST REPONSE --------------- " + reponse..Contenu)
FIN


Une idée ?
Merci

Hervé

--
Hervé
Registered member
10 messages
Popularité : +1 (1 vote)
Posted on May, 13 2022 - 8:57 AM
Bonjour Hervé,

J'ai fait qques modifs, ca à l'air de répondre maintenant :)

Dans la fonction Encode, il faut bien mettre "encodeBASE64SansRC" en paramètre sinon il y un RC dans l'encodage !
Il faut mettre le JSON des paramètres dans ..Contenu

Bonne journée.

Serveur, protocole, url_API est une chaîne
requete est un HTTPRequête
reponse est un httpRéponse
vConstReq est un Variant
vConstReqCompl est un Variant

Serveur = "qa.adelya.com"
protocole = "https://"
url_API = "/apiv1/webapi.do"

sUsername est une chaîne = "API_YvesRocher_Gbh"
sPassword est une chaîne = "XJcqLM759pd5"
gsClAPI est une chaîne = "KEY-f6fde269-2753-4eba-8bf3-55928432c74a"

sBasiAuth est une chaîne = gsClAPI+";"+sUsername+":"+sPassword
sBasiAuth = "Basic "+Encode(sBasiAuth, encodeBASE64SansRC)


//Construction de la requete
vConstReqCompl.action = "show"
vConstReq.FidelityMember.name = "DUPOND"


//AVEC requete
requete..URL = protocole + Serveur + url_API
requete..Méthode = httpPost
requete..ContentType = "application/json"
requete..Entête["Accept"] = "application/json"
requete..Entête["Authorization"] = sBasiAuth
requete..IgnoreErreur = httpIgnoreCertificatExpiré + httpIgnoreCertificatInvalide + httpIgnoreNomCertificatInvalide + httpIgnoreRedirection + httpIgnoreRevocation

requete.Contenu = [
json_header={action:"show"}&json_data={FidelityMember:{name:"DUPOND"}}
]

reponse = HTTPEnvoie(requete)


SI ErreurDétectée ALORS
Erreur("ERREUR ----- " + ErreurInfo(errComplet))
SINON
Info("REST REPONSE :" + RC + reponse.Contenu)
FIN
Registered member
77 messages
Posted on May, 14 2022 - 9:06 PM
Merci je regarde ça des lundi.

--
Hervé
Message modified, May, 14 2022 - 9:17 PM
Registered member
77 messages
Posted on May, 16 2022 - 6:52 AM
Bonjour

En effet l'erreur ne s'affiche plus ce qui est déjà bien.
Je me bat en ce moment pour récupérer des données.
J'ai toujours une erreur 3007.

Merci
Hervé

--
Hervé
Registered member
10 messages
Popularité : +1 (1 vote)
Posted on May, 16 2022 - 9:20 AM
Bonjour,

Il y a le même retour (3007) avec une requête en curl, cela ne vient plus de windev.
Le nom "dupont" existe dans votre base ?
Registered member
77 messages
Posted on May, 16 2022 - 10:14 PM
Bonjour

Je viens d'avoir les données contenu dans la base de test.
Il y a un seul enregistrement.
{
    "FidelityMember":{
        "id":"22",
        "dateUpdate":"2022-05-13 09:02:13",
        "idExternals":"",
        "uniqueId":"1a279800-8c07-4f05-ad20-84dd5e89de50",
        "uid":"",
        "defaultLanguage":"FR",
        "cardnumber":"",
        "type":"C",
        "src":"C",
        "gender":"",
        "name":"CAZALS",
        "secondName":"",
        "firstname":"Charlotte",
        "login":"1707117086",
        "passwordDateUpdate":"2022-05-11 14:40:01",
        "job":"",
        "webSite":"",
        "maritalState":"",
        "mobile":"",
        "carrier":"",
        "nbPoint":"0",
        "cumulPoint":"0",
        "nbCredit":"0.0",
        "cumulCredit":"0.0",
        "cumulCA":"0.0",
        "montantCA":"0.0",
        "email":"charlotte.cazals@adelya.com",
        "tel":"",
        "tel2":"",
        "smsoptin":false,
        "smsOptinStatus":"0",
        "emailoptin":false,
        "emailOptinStatus":"0",
        "mailoptin":false,
        "mailOptinStatus":"0",
        "teloptin":false,
        "telOptinStatus":"0",
        "partneroptin":false,
        "partnerOptinStatus":"0",
        "sponsored":false,
        "actif":"1",
        "npei":"0",
        "npmi":"0",
        "netPrice":"0.0",
        "dateCreate":"2022-05-11 14:40:01",
        "children":"",
        "linkedObjects":"",
        "address":{
            "id":"22",
            "country":"RE",
            "geocodingStatus":"0",
            "line1":"Apt A04 La cours des Près",
            "line2":"",
            "npai":false,
            "qualityStatus":"-1",
            "region":"",
            "rnvpStatus":"0",
            "streetNumber":"",
            "streetType":"12 Rue Simone Boudet, Apt A04 La cours des Près",
            "town":"",
            "zip":""
        },
        "criteria":{
            "id":"22"
        },
        "group":{
            "id":"28420",
            "uniqueId":"G-2a97f9b1-d707-446e-9bd8-f139680ea809",
            "codeGroup":"GBHYvesRocher",
            "salesDescr":"Yves Rocher Réunion",
            "descrGroup":"Yves Rocher Réunion"
        },
        "globalGroup":"28420",
        "fidProgramCode":"",
        "user":"153433"
    }
}


Je n'ai pas encore trouvé la solution.
Merci

Hervé

--
Hervé
Registered member
77 messages
Posted on May, 17 2022 - 2:48 AM
Bonjour

J'ai réussi avec ce code :

Serveur, protocole, url_API est une chaîne
requete est un HTTPRequête
reponse est un httpRéponse
vConstReq est un Variant
vConstReqCompl est un Variant

Serveur = "qa.adelya.com"
protocole = "https://"
url_API = "/apiv1/webapi.do?"

sUsername est une chaîne = "API_YvesRocher_Gbh"
sPassword est une chaîne = "XJcqLM759pd5"
gsClAPI est une chaîne = "KEY-f6fde269-2753-4eba-8bf3-55928432c74a"

sBasiAuth est une chaîne = gsClAPI+";"+sUsername+":"+sPassword
sBasiAuth = "Basic "+Encode(sBasiAuth, encodeBASE64SansRC)

//Construction de la requete
vConstReqCompl.action = "show"
vConstReq.FidelityMember.id = "23"
//vConstReq.FidelityMember.name = "Truc"
//vConstReq.FidelityMember.firstname = "Toto"
//vConstReq.FidelityMember.actif = "1"

//AVEC requete
requete..URL = protocole + Serveur + url_API + "json_data="+Remplace(VariantVersJSON(vConstReq,psdMinifié),Caract(34),"'")
//requete..URL = protocole + Serveur + url_API + "json_data={'FidelityMember':{'id':'23'}}"
requete..Méthode = httpPut
requete..ContentType = "application/json"
requete..Entête["Accept"] = "application/json"
requete..Entête["Authorization"] = sBasiAuth
requete..IgnoreErreur = httpIgnoreCertificatExpiré + httpIgnoreCertificatInvalide + httpIgnoreNomCertificatInvalide + httpIgnoreRedirection + httpIgnoreRevocation

//"json_header="+VariantVersJSON(vConstReqCompl)+"&json_data="+VariantVersJSON(vConstReq)

reponse = HTTPEnvoie(requete)


SI ErreurDétectée ALORS
Erreur("ERREUR ----- " + ErreurInfo(errComplet))
SINON
Info("REST REPONSE :" + RC + reponse.Contenu)
FIN


Il y a peut-être mieux pour optimiser le code.
Avez-vous des suggestions ?

En tout cas merci

hervé

--
Hervé
Registered member
77 messages
Posted on May, 17 2022 - 3:01 AM
Un problème tout de même si je met un "é" à Hervé dans la chaine firstname.
Surement un problème d'encodage.

Hervé

--
Hervé
Registered member
77 messages
Posted on May, 17 2022 - 3:05 AM
La solution :
URLEncode(protocole + Serveur + url_API + "json_data="+Remplace(VariantVersJSON(vConstReq,psdMinifié),Caract(34),"'"),encodeURLDepuisAnsi)


Hervé

--
Hervé