|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
| WebService fonction suivi zoom de Geodis |
| Débuté par serge-maury, 12 déc. 2019 08:38 - 9 réponses |
| |
| | | |
|
| |
| Posté le 12 décembre 2019 - 08:38 |
Bonjour, Je souhaite utiliser le webservice Geodis. Le webservice permet de récupérer un lien pour accéder à la page sur l'espace client de Geodis. Geodis fournit un document explicatif pas très clair et aussi des exemples en php et java. J'ai donc tenté de copier l'exemple java fournit et j'ai donc écrit ce code :
sBon est une chaine //numéro de bon a rechercher sRequete est une chaine //Requête json sMessage est une chaine //Message à envoyer dans un entête X-GEODIS-Service Buffer est un buffer //Buffer utiliser la génération du hash sha256 sChaineHashe est une chaine //Chaine contenant le hash sHeader est une chaine //Header à envoyer dans un entête X-GEODIS-Service sTimeStamp est une chaine //Timestamp courant en ms
sTimeStamp=sDateHeureVersTimeStamp() //La fonction retourne le TimeStampCourant Exemple : "1576135925000" sBon="58952366" sRequete="{""refUniExp"":"""",""noSuivi"":"""+sBon+"""}" sMessage=gsCleAPIGEODIS+";"+gsIDGEODIS+";"+sTimeStamp+";fr;api/zoomclient/recherche-envoi;"+sRequete Buffer=HashChaîne(HA_SHA_256,sMessage)
//La valeur contenu dans le Buffer comporte des valeurs hexadécimales en majuscule séparées par des espaces et un RC //Pour correspondre à la syntaxe de mon exemple j'ai éliminé ces caractères indésirables sChaineHashe=Minuscule(Remplace(Remplace(BufferVersHexa(Buffer)," ",""),RC,"")) sHeader=gsIDGEODIS+";"+sTimeStamp+";fr;"+sChaineHashe MaRequeteRest.URL="https://espace-client.geodis.com/services/api/zoomclient/recherche-envoi" MaRequeteRest.Méthode=httpPost MaRequeteRest.Entête["Content-Type"]="application/json" MaRequeteRest.Entête["Accept"]="*/*" MaRequeteRest.Entête["X-GEODIS-Service"]=sHeader LaReponseRest=RESTEnvoie(MaRequeteRest) SI ErreurDétectée() ALORS HErreurInfo(hErrComplet) SINON Info(LaReponseRest.Contenu) FIN
Je n'obtient pas de valeur dans LaReponseRest.Contenu, mais LaReponseRest.CodeEtat retourne "Bad Request." J'en déduit que mon Header est mal construit.
Est ce que quelqu'un à déjà utilisé ce webservice et peut m'aiguiller ? Merci d'avance. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 330 messages |
|
| Posté le 12 décembre 2019 - 10:09 |
| |
| |
| | | |
|
| | |
| |
| Posté le 12 décembre 2019 - 12:04 |
Salut Daryl,
merci pour tes efforts. Oui c'est bien le service que tu mentionnes. Mais le guide technique est un autre de document de 29 pages que tu peux trouver ici : https://we.tl/t-LtBsOuSB1k
Je n'ai pas essayé d'utiliser la fonction jsonexecute car ce web service fonctionne uniquement en méthode post, on ne peut donc pas passer les arguments dans l'adresse url qui est la méthode get.
Ce que tu as vu concernant un lien avec url, c'est l'ancien service qui sera abandonné le 15 décembre. C'est pourquoi nous nous réveillons maintenant avec Jean. 
Pour le moment je vais mettre en place un httprequete sur une page php pour récupérer les informations dont j'ai besoin. Puisqu'en php, cela fonctionne correctement. Mais j'aimerais bien me passer d'un serveur php pour utiliser ce webservice.
Voici l'exemple php ainsi qu'un exemple java : https://we.tl/t-w7vKSWD6cs |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 330 messages |
|
| Posté le 12 décembre 2019 - 14:20 |
Salut Serge,
Ok, j'ai tout téléchargé, laisse moi le temps de regarder tout ça et je reviens vers toi
Cordialement Daryl |
| |
| |
| | | |
|
| | |
| |
| Posté le 12 décembre 2019 - 15:17 |
| |
| |
| | | |
|
| | |
| |
| Posté le 12 décembre 2019 - 15:40 |
Bon voilà grâce à Jean j'ai trouvé le dernier problème qui me bloquait :
Un code qui fonctionne est :
sBon=ExtraitChaîne(sLien,2,CST_CodeZoomGeodis) SI EstNumérique(sBon) ALORS sBon=NumériqueVersChaîne(Val(sBon),"08d") SINON Erreur("Erreur de format pour le numéro de récépissé !") RETOUR FIN sURL="https://espace-client.france-express.com/services/api/zoomclient/recherche-envois" sRequete="""dateDepart"":"""",""dateDepartDebut"":"""",""dateDepartFin"":"""",""noRecepisse"":"""+sBon+""",""reference1"":"""",""cabColis"":"""",""noSuivi"":"""",""codeSa"":"""",""codeClient"":"""",""codeProduit"":"""",""typePrestation"":"""",""dateLivraison"":"""",""refDest"":"""",""nomDest"":"""",""codePostalDest"":"""",""natureMarchandise"":""""}" sMessage=gsCleAPIGEODIS+";"+gsIDGEODIS+";"+sTimeStamp+";fr;api/zoomclient/recherche-envois;"+sRequete sContentType="application/json; charset=utf-8" Buffer=HashChaîne(HA_SHA_256,sMessage) sChaineHashe=Minuscule(Remplace(Remplace(BufferVersHexa(Buffer)," ",""),RC,"")) sHeader=gsIDGEODIS+";"+sTimeStamp+";fr;"+sChaineHashe MaRequeteRest.URL=sURL MaRequeteRest.Méthode=httpPost MaRequeteRest.Entête["X-GEODIS-Service"]=sHeader MaRequeteRest.ContentType=sContentType MaRequeteRest.Contenu=sRequete LaReponseRest=RESTEnvoie(MaRequeteRest) SI ErreurDétectée() ALORS Info(HErreurInfo(hErrComplet)) SINON Info(LaReponseRest.Contenu) FIN
Il faut bien veiller à doubler les quotes pour toutes les rubriques et toutes les variables dans la requête. Il faut aussi envoyer la requête (sans utiliser le hash) dans la variable Contenu de la requête, même si celle-ci est déjà envoyée en entête.
Sinon vous pouvez aller voir le code de jean qui est bien plus propre et bien commenté :
https://forum.pcsoft.fr/fr-FR/pcsoft.fr.windev/235366-utiliser-service-zoom-geodis-france-express-235395/read.awp… |
| |
| |
| | | |
|
| | |
| |
| Posté le 12 décembre 2019 - 16:05 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 330 messages |
|
| Posté le 12 décembre 2019 - 16:08 |
Salut Serge,
N'ayant aucune possibilité de tester ce code, pourrais-tu le tester en indiquant les bonnes informations ? Mais si jamais tu as des données pour tester, je suis preneur 
Pour info, je me suis basé sur l'exemple en PHP.
sLang est une chaîne = "fr" sLogin est une chaîne = "AFCA" sSecretKey est une chaîne = "47e052d33541412fb951bb3e74394d61" sService est une chaîne = "api/zoomclient/recherche-envois" sUri est une chaîne = "https://espace-client.geodis.com/services/" vrBody est un Variant jsBodyInLine est un JSON sBon est une chaîne = "12345678" sTimestamp est une chaîne = HeureSys() sMessage est une chaîne sHash est une chaîne sServiceRequestHeader est une chaîne sSizeRequest est une chaîne GeodisRequest est une restRequête GeodisResponse est une restRéponse
vrBody.dateDepart = "" vrBody.dateDepartDebut = "" vrBody.dateDepartFin = "" vrBody.noRecepisse = sBon vrBody.reference1 = "" vrBody.noSuivi = "" vrBody.cabColis = "" vrBody.codeSa = "" vrBody.codeClient = "" vrBody.codeProduit = "" vrBody.typePrestation = "" vrBody.dateLivraison = "" vrBody.refDest = "" vrBody.nomDest = "" vrBody.codePostalDest = "" vrBody.natureMarchandise = ""
jsBodyInLine = VariantVersJSON(vrBody, psdMiseEnForme)
sMessage = ChaîneConstruit("%1;%2;%3;%4;%5;%6", sSecretKey, sLogin, sTimestamp, sLang, sService, jsBodyInLine) sHash = Remplace(BufferVersHexa(HashChaîne(HA_SHA_256, sMessage)), " ", "")
sServiceRequestHeader = ChaîneConstruit("%1;%2;%3;%4", sLogin, sTimestamp, sLang, sHash) sSizeRequest = SansEspace(NumériqueVersChaîne(Taille(sServiceRequestHeader), "15d"))
GeodisRequest.URL = ChaîneConstruit("%1%2", sUri, sService) GeodisRequest.Méthode = httpPost GeodisRequest.Entête["X-GEODIS-Service"] = sServiceRequestHeader GeodisRequest.Entête["Content-Type"] = "application/json; charset=utf-8" GeodisRequest.Entête["Content-Length"] = sSizeRequest
GeodisResponse = RESTEnvoie(GeodisRequest) SI ErreurDétectée ALORS Erreur(ErreurInfo(errComplet)) FIN
Cordialement Daryl |
| |
| |
| | | |
|
| | |
| |
| Posté le 12 décembre 2019 - 17:31 |
Merci pour ton aide Daryl,
Mais j'ai publié un code fonctionnel plus haut. Et jean a mis un lien vers son post avec un autre code fonctionnel.
Ton code aurait du marcher chez toi car tu avais mes identifiants et donc accès à mes données. J'ai par contre changer de code depuis 
Cordialement Serge MAURY |
| |
| |
| | | |
|
| | |
| |
| Posté le 08 janvier 2020 - 11:29 |
Hello,
Sorry , that I cannot answer you in French, I hope my english is clear. I'm also looking for a solution to call the zoom function in java. Can you give me a working example in Java?
Kind Regards Cordialement
Patrick Tans |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|