|
GRUPOS DE DISCUSSÃO PROFISSIONAL WINDEV, WEBDEV e 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, out., 04 2022 12:39 PM - 5 respostas |
| |
| | | |
|
| |
Membro registado 8 mensagems |
|
Publicado em outubro, 04 2022 - 12:39 PM |
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 |
| |
| |
| | | |
|
| | |
| |
Membro registado 57 mensagems Popularité : +9 (11 votes) |
|
Publicado em outubro, 04 2022 - 5:41 PM |
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 |
| |
| |
| | | |
|
| | |
| |
Membro registado 8 mensagems |
|
Publicado em outubro, 04 2022 - 6:08 PM |
| |
| |
| | | |
|
| | |
| |
Membro registado 8 mensagems |
|
Publicado em outubro, 05 2022 - 5:44 PM |
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 |
| |
| |
| | | |
|
| | |
| |
Membro registado 187 mensagems |
|
Publicado em outubro, 06 2022 - 6:44 AM |
Bonjour et merci beaucoup
-- Cordialement
Jean-Claude FLAJOULOT |
| |
| |
| | | |
|
| | |
| |
Membro registado 119 mensagems |
|
Publicado em outubro, 06 2022 - 8:14 AM |
Merci pour votre contribution. Beau boulot |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|