|
| Iniciado por patrick.bouquet, 04,ago. 2020 11:06 - 4 respuestas |
| |
| | | |
|
| |
| Publicado el 04,agosto 2020 - 11:06 |
Bonjour,
Un utilisateur vient de m'indiquer que l'envoi de SMS avec les API OVH ne fonstionnait plus.
Voici la procédure de connexion que j'utilise:
PROCÉDURE ConnexionAPI( sIdentifiantOVH est une chaîne, sMotDePasseOVH est une chaîne, nDuration est un entier, sMethodes est une chaîne = "GET, POST, PUT, DELETE", sPath est une chaîne = "/*" )
// Première requête d'ouverture de session sURLRedirect est une chaîne = "http://localhost/ident_ok_"+DonneGUID(guidBrut) reqAuth est un httpRequête reqAuth.Entête["X-Ovh-Application"]=:msCléPublique reqAuth.Entête["Content-type"] = "application/json" reqAuth.URL = "https://eu.api.ovh.com/1.0/auth/credential" reqAuth.Méthode = httpPost reqAuth.Contenu = ChaîneConstruit([ { "accessRules": [ { "method": "GET","path": "/*" }, { "method": "POST","path": "/*" }, { "method": "PUT","path": "/*" }, { "method": "DELETE","path": "/*" } ], "redirection":"%3" } ],sMethodes,sPath,sURLRedirect)
// Requête pour obtenir la page de connexion repAuth est un httpRéponse = HTTPEnvoie(reqAuth)
SI repAuth.CodeEtat<>200 ALORS ErreurDéclenche(1,"Echec de la connexion à l'API. Erreur renvoyée : "+repAuth.Contenu) FIN
// Décode la réponse JSON vRep est un Variant = JSONVersVariant(repAuth.Contenu)
// Mémorise la clé de session :msCleUtilisateur = vRep.consumerKey
// Lecture de la page de connexion sURLValidation est une chaîne = vRep.validationUrl HTTPRequête(sURLValidation) sPageConnexion est une chaîne = HTTPDonneRésultat(httpRésultat)
// Analyse pour trouver les id des champs du formulaire sIDAccoundID est une chaîne sIDPassword est une chaîne sCredentialToken est une chaîne sNonce est une chaîne
SI XMLDocument ( "connexionOVH" , sPageConnexion , xdHTML ) ALORS SI XMLExécuteXPath ( "connexionOVH" , "//input[contains(@placeholder,'Account ID or email address')]" ) ALORS sIDAccoundID = XMLDonnée ( "connexionOVH" , "name" ) FIN SI XMLExécuteXPath ( "connexionOVH" , "//input[contains(@placeholder,'Password')]" ) ALORS sIDPassword = XMLDonnée ( "connexionOVH" , "name" ) FIN SI XMLExécuteXPath ( "connexionOVH" , "//input[@name='credentialToken']" ) ALORS sCredentialToken = XMLDonnée ( "connexionOVH" , "value" ) FIN SI XMLExécuteXPath("connexionOVH","//input[@name='nonce']") ALORS sNonce = XMLDonnée("connexionOVH","value") FIN XMLTermine ( "connexionOVH" ) FIN
// Construction du formulaire réponse reqIdent est un httpRequête reqIdent.Méthode = httpPost reqIdent.URL = sURLValidation reqIdent.IgnoreErreur = httpIgnoreRedirection reqIdent.Entête["Content-type"] = "application/x-www-form-urlencoded" //reqIdent.Contenu = ChaîneConstruit("credentialToken=%1&%2=%3&%4=%5&duration=%6",sCredentialToken,sIDAccoundID,sIdentifiantOVH,sIDPassword,URLEncode(:msPasswordOVH),nDuration,sNonce) reqIdent.Contenu = ChaîneConstruit("credentialToken=%1&%2=%3&%4=%5&duration=%6&nonce=%7&JsE=no",sCredentialToken,sIDAccoundID,sIdentifiantOVH,sIDPassword,URLEncode(sMotDePasseOVH),nDuration,sNonce)
// Requête pour obtenir la page de connexion repIdent est un httpRéponse = HTTPEnvoie(reqIdent) sLocation est une chaîne = repIdent.Entête["Location"] SI repIdent.CodeEtat<>302 _OU_ sLocation<>sURLRedirect ALORS ErreurDéclenche(2,"Echec de la connexion à l'API. Erreur renvoyée : "+repIdent.Contenu) FIN
CAS ERREUR: ErreurPropage("Echec de la connexion à l'API. Erreur renvoyée : "+ErreurInfo(errComplet)) RETOUR
CAS EXCEPTION: ErreurDéclenche(3,"Echec de la connexion à l'API. Erreur renvoyée : "+ExceptionInfo()) RETOUR
La fonction repAuth.CodeEtat retourne bien la valeur 200. Mais la réponse est maintenant une demande de saisie de mot de passe au format HTML ce qui conduit naturellement à une erreur lors de son affectation à XMLDocument.
Je ne sais pas quoi faire pour résoudre ce problème. J'espère que l'un d'entre-vous suara me fournit la solution miracle. Je l'en remercie par avance.
Cordialement.
Patrick Bouquet |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 189 mensajes |
|
| Publicado el 05,agosto 2020 - 17:57 |
Bonjour Patrick,
Effectivement, je constate le même problème que toi.
Jean-Marc |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 189 mensajes |
|
| Publicado el 05,agosto 2020 - 18:43 |
Patrick,
Je n'ai pas encore compris pourquoi, mais lors de mes tests, ça passe, mais pas en prod. La différence, c'est qu'en tests, je suis en procédural alors que j'utilise des classes en prod. Je précise que bien sûr, tout fonctionnait nickel jusqu'à ce jour. Voici le code de mon test qui fonctionne:
Procedure test()
sApplicationKey est une chaîne = gsApplicationKey sApplicationSecret est une chaîne = gsApplicationSecret sConsumerKey est une chaîne = gsConsumerKey sServiceName est une chaîne = gsServiceName
stSms_jobs est une structure charset est une chaîne coding est une chaîne 'class' est une chaîne sender est une chaîne receivers est un tableau de chaînes 'Message' est une chaîne priority est une chaîne senderForResponse est un booléen noStopClause est une booléen FIN
stSms_jobs est un stSms_jobs
stSms_jobs.charset = "UTF-8" stSms_jobs.coding = "7bit" stSms_jobs.class = "phoneDisplay" stSms_jobs.sender = "Nom expéditeur" Ajoute(stSms_jobs.receivers ,"+33xxxxxxxxx") stSms_jobs.message = "Test SMS OVH" stSms_jobs.priority = "high" stSms_jobs.senderForResponse = False stSms_jobs.noStopClause = True
sUrl est une chaîne sToSign est une chaîne sSignature est une chaîne sBody est une chaîne
Req est une httpRequête Rep est un httpRéponse
sUrl = "https://eu.api.ovh.com/1.0/sms/"+sServiceName+"/jobs/"
sBody = VariantVersJSON(stSms_jobs)
pDateHeure est une DateHeure = Maintenant() sHeuredate est une chaîne = Gauche(pDateHeure,14) sHeuredateUTC est une chaîne = Gauche(DateHeureLocaleVersUTC(sHeuredate),14) sTimeStamp est une chaîne = "19700101000000" sDiffDateHeure est une chaîne = DateHeureDifférence(sTimeStamp, sHeuredateUTC) dDurée est une Durée = ChaîneVersDurée(sDiffDateHeure,duréeCentième) nTimeStamp est un entier = dDurée..Jour * 86400 + dDurée..Heure * 3600 + dDurée..Minute * 60 + dDurée..Seconde
Req.Méthode = httpPost
sToSign = sApplicationSecret + "+" + sConsumerKey + "+POST+" + sUrl + "+" + sBody + "+" + nTimeStamp; sSignature = "$1$"+(Minuscule(Remplace(BufferVersHexa(HashChaîne(HA_SHA_160,sToSign)),[Caract(32),RC],"")))
Req.URL = sUrl Req.Entête["Content-Type"] = "application/json" Req.Entête["X-Ovh-Application"] = sApplicationKey Req.Entête["X-Ovh-Consumer"] = sConsumerKey Req.Entête["X-Ovh-Signature"] = sSignature Req.Entête["X-Ovh-Timestamp"] = "" + nTimeStamp Req.Contenu = sBody Req.IgnoreErreur = httpIgnoreCertificatExpiré+httpIgnoreCertificatInvalide+httpIgnoreNomCertificatInvalide
Rep = HTTPEnvoie(Req)
SI ErreurDétectée ALORS Erreur(ErreurInfo(errComplet)) SINON Info(Rep..Contenu) FIN |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 189 mensajes |
|
| Publicado el 07,agosto 2020 - 09:26 |
| Ce jour, tout fonctionne de nouveau, comme par magie... |
| |
| |
| | | |
|
| | |
| |
| Publicado el 08,agosto 2020 - 10:32 |
Jean-Marc a exprimé avec précision : > Ce jour, tout fonctionne de nouveau, comme par magie...
Bonjour,
Chez moi pas de miracle !
J'attends une réponse d'OVH mais il ne faut pas être pressé.
Cordialement.
Patrick Bouquet |
| |
| |
| | | |
|
| | | | |
| | |
|