|
FOROS PROFESIONALES WINDEV, WEBDEV y WINDEV Mobile |
| | | | | |
Inicio → WINDEV 2024 → Code CURL en Windev pour accès oauth2 à une application API publique |
Code CURL en Windev pour accès oauth2 à une application API publique |
Iniciado por OR, 04,oct. 2022 12:39 - 5 respuestas |
| |
| | | |
|
| |
Miembro registrado 8 mensajes |
|
Publicado el 04,octubre 2022 - 12:39 |
Bonjour Forum,
Je travaille actuellement sur un raccordement à une application qui utilise le site https://api.dgfip.finances.gouv.fr Pour me raccorder à une application il faut que je passe par un protocole oauth2.
Malheureusement, je n'arrive pas à trouver la solution malgré tout le temps passé à lire la documentation de l'API et à tester différentes possibilités.
Le site propose deux instructions CURL : curl -k -X POST https://IP-GATEWAY-AB/token -d "grant_type=password&username=Username&password=Password" -H "Authorization: Basic Base64(consumer-key:consumer-secret)"
curl -k -X POST https://IP-GATEWAY-AB/token -d "grant_type=client_credentials" -H "Authorization: Basic Base64(consumer-key:consumer-secret)"
Nous avons essayé la même stratégie que sur le site Piste de Chorus Pro déjà largement commenté sur le forum mais sans succès :
MaHttp est une httpRequête cMaReponse est une httpRéponse MaHttp.Méthode = httpPost MaHttp.User = gsinfClientid MaHttp.Password = gsinfclientsecret MaHttp.Entête["Content-Type"] = "application/x-www-form-urlencoded" MaHttp.URL = "https://IP-GATEWAY-AB/token" MaHttp.Contenu = ChaîneVersUTF8(ChaîneConstruit("grant_type=client_credentials&gsinclient_id=%1&gsinfclient_secret=%2",gsinfClientid,gsinfclientsecret))) cMaReponse = HTTPEnvoie(MaHttp) v est un Variant = JSONVersVariant(cMaReponse.Contenu) gstoken = v.access_token Valeur est une chaîne SI ErreurDétectée ALORS Trace("Erreur" + RC + ErreurInfo(errComplet)) Info("Erreur" + RC + ErreurInfo(errComplet)) RETOUR SINON Valeur=(cMaReponse..Contenu) FIN
Comme nous avons vu que la clef id + secret était demandée en Base 64 nous avons essayé une autre approche pour envoyer directement la clef encodée.
MaHttp est une httpRequête cMaReponse est une httpRéponse Data est une Structure grant_type est une chaîne Authorization est une chaîne FIN
sDataJSON est une chaîne stDataStructure est un Data sAuth_base64 est une chaîne sEnteteAuthentification est une chaîne ANSI =ChaîneVersUTF8(ChaîneConstruit(gsinfClientid+":"+gsinfclientsecret)) sAuth_base64=Encode(sEnteteAuthentification,encodeBASE64SansRC) stDataStructure:grant_type="client_credentials" stDataStructure:Authorization=sAuth_base64 Sérialise(stDataStructure, sDataJSON, psdJSON) MaHttp.Méthode = httpPost MaHttp.Entête["Content-Type"] = "application/x-www-form-urlencoded" MaHttp.URL = "https://IP-GATEWAY-AB/token" MaHttp.Contenu = sDataJSON cMaReponse = HTTPEnvoie(MaHttp) SI ErreurDétectée ALORS Trace("Erreur" + RC + ErreurInfo(errComplet)) SINON Trace(cMaReponse..Contenu) FIN
Voici ce que je transmets { "grant_type":"client_credentials", "Authorization":"wtXV4eXBIxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzVwdVFuVU04VXzy" }
Ce qui nous restitue Windev en anomalie.
Erreur<\r><\n>Appel WL :<\r><\n>Traitement de 'Clic sur BTN_SansNom1' (FEN_MENU.BTN_SansNom1), ligne 24<\r><\n>Fonction 'HTTPEnvoie', syntaxe 0<\r><\n><\r><\n>Que s'est-il passé ?<\r><\n>Le serveur HTTP ne répond pas. Vérifiez l'adresse et l'accessibilité au serveur.<\r><\n><\r><\n>Code erreur : 100072<\r><\n>Niveau : erreur non fatale<\r><\n><\r><\n>Message d'erreur système :<\r><\n>Impossible de résoudre le nom de l'hôte.<\r><\n>Module : wd270com64.dll (01F270103n - 27.0.362.0)<\r><\n><\r><\n>Informations de débogage :<\r><\n>Fonction (10,420)<\r><\n>Informations supplémentaires :<\r><\n>EIT_PILEWL :<\r><\n>Clic sur BTN_SansNom1 (FEN_MENU.BTN_SansNom1), ligne 24<\r><\n>EIT_DATEHEURE : 04/10/2022 12:08:21<\r><\n>EIT_TYPE_WDFILE : <2><\r><\n>EIT_IDCODE : <18>
Si vous avez une solution, elle sera la bienvenue.
Merci d'avance pour votre aide.
Olivier |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 57 mensajes Popularité : +9 (11 votes) |
|
Publicado el 04,octubre 2022 - 17:41 |
Bonjour,
La réponse "Impossible de résoudre le nom de l'hôte" est sans appel, c'est "juste" l'adresse IP ou le nom de serveur donné dans l'url qui ne permet pas d'atteindre le serveur.
Dans votre code c'est à ce niveau : MaHttp.URL = "https:// ICI IL FAUT DOMAINE ou IP VALIDE /token"
Si le nom ou m'adresse donnée est valide, il peut s'agir d'un barrière de sécurité de vos installations réseau (antivirus trop agressif qui bloque les accès aux programmes qui ne sont pas explicitement autorisés...)
Au passage, l'ajout de MaHttp..ProcédureTrace permet de voir les échanges avec le serveur (une fois qu'il sera joignable), ça facilite ce genre de mise au point.
-- A+ Dev-OC |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 8 mensajes |
|
Publicado el 04,octubre 2022 - 18:08 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 8 mensajes |
|
Publicado el 05,octubre 2022 - 17:44 |
Voici la solution à notre question pour avoir un token Infinoe qui s'appuie sur le site https://api.dgfip.finances.gouv.fr
Cà pourra servir utilement à la communauté.
sAuth_base64 est une chaîne sEnteteAuthentification est une chaîne ANSI = ChaîneVersUTF8(ChaîneConstruit(gsinfClientid+":"+gsinfclientsecret)) sAuth_base64 = Encode(sEnteteAuthentification,encodeBASE64SansRC) Authorization est une chaîne Authorization=sAuth_base64
MaHttp est une httpRequête cMaReponse est un httpRéponse MaHttp.Méthode = httpPost MaHttp.Entête["Content-Type"] = "application/x-www-form-urlencoded" MaHttp.Entête["Authorization"] = Authorization MaHttp.User=gsinfClientid MaHttp.Password=gsinfclientsecret
SI gninfServeur=1 ALORS MaHttp.URL = gsinfURLtest SINON SI gninfServeur=2 ALORS MaHttp.URL = gsinfURLprod SINON SI gninfServeur=0 ALORS Info("Il n'y a pas de serveur actif)") RETOUR FIN Info(gsinfURLtest) MaHttp.Contenu = ChaîneVersUTF8(ChaîneConstruit("grant_type=client_credentials&client_id=%1&client_secret=%2&authorization=%3&scope=openid",gsinfClientid,gsinfclientsecret,Authorization)) Trace(MaHttp.Contenu) Info(MaHttp.Contenu) cMaReponse = HTTPEnvoie(MaHttp) v est un Variant = JSONVersVariant(cMaReponse.Contenu) // Stocke le token gstoken = v.access_token Valeur est une chaîne SI ErreurDétectée ALORS Trace("Erreur" + RC + ErreurInfo(errComplet)) Info("Erreur" + RC + ErreurInfo(errComplet)) RETOUR SINON Trace(cMaReponse..Contenu) Valeur=(cMaReponse..Contenu) Info(Valeur) FIN |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 187 mensajes |
|
Publicado el 06,octubre 2022 - 06:44 |
Bonjour et merci beaucoup
-- Cordialement
Jean-Claude FLAJOULOT |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 120 mensajes |
|
Publicado el 06,octubre 2022 - 08:14 |
Merci pour votre contribution. Beau boulot |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|