| |
| Posté le 12 décembre 2019 - 09:08 |
Bonjour,
Je bute sur l'utilisation d'un service web rest proposé par les transporteurs Géodis et France-Express. J'ai beau mettre les informations demandées j'obtiens toujours l'erreur 400 "Bad Request". Il s'agit du service Zoom permettant de récupérer les informations sur les colis que nous envoyons.
Est-ce que quelqu'un a déjà utilisé ce service rest avec Windev ?
>Jean |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 330 messages |
|
| Posté le 12 décembre 2019 - 10:12 |
| |
| |
| | | |
|
| | |
| |
| Posté le 12 décembre 2019 - 12:10 |
Bonjour Jean, Tu utilises restenvoie ?
J'ai exactement le même problème j'obtiens toujours le code erreur 400. J'ai essayé avec restenvoie et httprequest.
J'ai réussi a créer une page php grâce à l'exemple fourni. J'ai donc pu vérifier que mon header était identique en php et sous windev. Donc je pense pas que cela vienne de la construction de la requête. Il doit y avoir des paramètres à ajouter soit dans les propriété de la variable restrequete. Mais lesquels ???
Pour le moment je vais utiliser un httprequete sur une page que je vais développer en php pour récupérer les infos json. L'inconvénient c'est qu'il faut déployer un serveur php pour heberger et executer cette page php. >Et que c'est pas très propre non plus. |
| |
| |
| | | |
|
| | |
| |
| Posté le 12 décembre 2019 - 14:08 |
Bonjour,
J'ai réussi à obtenir le résultat recherché. Je prépare un bout de code et je te l'envoie.
>Jean |
| |
| |
| | | |
|
| | |
| |
| Posté le 12 décembre 2019 - 14:36 |
Voici un bout de code que j'ai fait pour mon test. En espérant qu'il te servira.
Jean
LOCAL S_Chaine_A_Calculer est une chaîne Buf_Parametres est un Buffer Req_Demande est un restRequête Req_Reponse est un restRéponse Buf_Hash est un Buffer
Var_Reponse est un Variant
N_Epoch est un entier sur 8 octets DH_Maintenant est une DateHeure
ST_Requete est une Structure dateDepart est une chaîne dateDepartDebut est une chaîne dateDepartFin est une chaîne noRecepisse est une chaîne reference1 est une chaîne cabColis est une chaîne noSuivi est une chaîne codeSa est une chaîne codeClient est une chaîne codeProduit est une chaîne typePrestation est une chaîne dateLivraison est une chaîne refDest est une chaîne nomDest est une chaîne codePostalDest est une chaîne natureMarchandise est une chaîne FIN
GF_MaDemande est un ST_Requete
// on remplit les informations.
// ici je demande les mouvements entre le 01/01/2019 et le 31/12/2019 // j'y ai mis aussi le numéro du colis que je recherche dans SAI_S_No_Colis qui provient de ma fenêtre de test GF_MaDemande:dateDepart="" GF_MaDemande:dateDepartDebut="2019-01-01" GF_MaDemande:dateDepartFin="2019-12-31" GF_MaDemande:noRecepisse="" GF_MaDemande:reference1="" GF_MaDemande:cabColis=SAI_S_NoColis GF_MaDemande:noSuivi="" GF_MaDemande:codeSa="" GF_MaDemande:codeClient="" GF_MaDemande:codeProduit="" GF_MaDemande:typePrestation="" GF_MaDemande:dateLivraison="" GF_MaDemande:refDest="" GF_MaDemande:nomDest="" GF_MaDemande:codePostalDest="" GF_MaDemande:natureMarchandise=""
// On sérialise la demande en json Sérialise(GF_MaDemande,Buf_Parametres,psdJSON)
// on prend l'heure actuelle DH_Maintenant=DateSys()+HeureSys()
// on la transforme en epoch N_Epoch=DateHeureVersEpoch(DH_Maintenant,epochUnixMilliseconde)
// on prépare la chaîne pour laquelle il faut calculer le hash qui sera mis dans l'entête // SAI_S_Cle_API est la clé API demandée dans notre compte chez Géodis (champ de ma fenêtre de test) // SAI_S_ID est notre identifiant chez Géodis (champ de ma fenêtre de test)
S_Chaine_A_Calculer=SAI_S_Cle_API+";"+SAI_S_ID+";"+NumériqueVersChaîne(N_Epoch)+";"+SAI_S_Langue+";"+SAI_S_Service+";"+Buf_Parametres // on calcule le hash sha256 Buf_Hash=HashChaîne(HA_SHA_256,S_Chaine_A_Calculer)
// on prépare la requête Req_Demande..Méthode=httpPost Req_Demande..ContentType="application/json" // SAI_S_ID est un champ dans lequel se trouve l'identifiant du compte Géodis // SAI_S_Langue est un champ contenant la langue. Mettre : fr Req_Demande..Entête["X-GEODIS-Service"]=SAI_S_ID+";"+NumériqueVersChaîne(N_Epoch)+";"+SAI_S_Langue+";"+BufferVersHexa(Buf_Hash,SansRegroupement) // l'url est donnée dans la documentation Géodis (https://espace-client.geodis.com/services) // elle provient d'un champ de ma fenêtre de test // SAI_S_Service est un champ contenant le service donné dans la documentation Géodis (api/zoomclient/recherche-envois) Req_Demande..URL=SAI_S_Url+"/"+SAI_S_Service
// affectation des champs de la demande dans Contenu Req_Demande..Contenu=Buf_Parametres
// on execute la requête Req_Reponse=HTTPEnvoie(Req_Demande)
SI ErreurDétectée ALORS Erreur(ErreurInfo()) SINON SI Req_Reponse.CodeEtat=200 ALORS // OK // récupération du json renvoyé Var_Reponse=JSONVersVariant(Req_Reponse.Contenu) POUR TOUT Une_Livraison DE Var_Reponse.contenu // on parcourt le tableau de résultat pour en faire ce qu' l'on veut Info(ChaîneConstruit("Etat du suivi %1 = %2 au %3 ",Une_Livraison.noSuivi,Une_Livraison.codeSituation,Une_Livraison.dateEtat)) FIN
Info("Récupération OK") SINON // à compléter avec le libellé d'erreur retourné Erreur("Erreur en appelant le service Géodis.") FIN >FIN |
| |
| |
| | | |
|
| | |
| |
| Posté le 12 décembre 2019 - 15:30 |
Merci Jean. Il fallait juste que j'ajoute la requête dans contenu. J'avais pourtant essayer mais lors de cet essai j'avais des problèmes sur ma requêtes.
>Un GRAND merci à toi |
| |
| |
| | | |
|
| | |