|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
Aide envoi de SMS via API rest OVH |
Débuté par Martin Christophe, 05 oct. 2015 14:50 - 28 réponses |
| |
| | | |
|
| |
Posté le 05 octobre 2015 - 14:50 |
Bonjour à tous et à toutes,
Voilà je suis en train de tester l'api d'OVH avec Windev pour envoyer des SMS. Pour ce faire il faut que je me connecte à l'api dans un premier temps puis je pourrais envoyer des messages. Pour me connecter à l'API il est nécessaire de faire une requête HTTP avec différents header et dans l'un deux une signature.
Voilà mon bous de code:
Heuredate est une chaîne = DateSys() + Gauche(HeureSys(), 6) HeuredateUTC est une chaîne = Gauche(DateHeureLocaleVersUTC(Heuredate), 14)
TimeStamp est une chaîne = "19700101000000"
DiffDateHeure est une chaîne = DateHeureDifférence(TimeStamp, HeuredateUTC)
Durée est une Durée = ChaîneVersDurée(DiffDateHeure,duréeCentième)
ResultatTimeStamp est un entier = Durée..Jour * 86400 + Durée..Heure * 3600 + Durée..Minute * 60 + Durée..Seconde
signature="$1$"+ HashChaîne(HA_SHA_160,applicationSecret+"+"+consumerKey+"+GET+https://eu.api.ovh.com/1.0/sms/"+"++"+ ResultatTimeStamp)
enTeteHTTP est une chaîne="Content-Type: application/json"+RC+"X-Ovh-Application:"+applicationKey+RC+"X-Ovh-Consumer:"+consumerKey+RC+"X-Ovh-Signature:"+signature+RC+"X-Ovh-Timestamp:"+ResultatTimeStamp+RC resRequete est une chaîne resRequete=HTTPRequête("https://eu.api.ovh.com/1.0/sms/","",enTeteHTTP)
La partie qui nous interresse est le hash de la requête et son envoi, si quelqu'un a déjà fait ce genre de choses je suis preneur de tout aide, j'y suis depuis ce matin...
En vous remerciant d'avance |
| |
| |
| | | |
|
| | |
| |
Posté le 07 octobre 2015 - 22:23 |
Personne ? je suis également intéressé |
| |
| |
| | | |
|
| | |
| |
Posté le 08 octobre 2015 - 23:08 |
Bonjour, je suis dans le même cas avec un code similaire. Cependant j'ai déja remarqué la chose suivante.
Si on fait simplement :
signature="$1$"+ HashChaîne(HA_SHA_160,applicationSecret+"+"+consumerKey+"+GET+https://eu.api.ovh.com/1.0/sms/"+"++"+ ResultatTimeStamp)
et que l'on compare la chaine à "HASHER" avec un convertisseur en ligne on se rend compte que HASHCHAINE renvoi un buffer hors il faut envoyer à OVH un texte brut. Avec le code suivant j'obtient la même réponse que le site de conversion on-line (J'ai repris ici votre code)
sTmp est une chaîne = BufferVersHexa(HashChaîne(HA_SHA_160,sApplicationsecret+"+"+consumerKey+"+GET+https://eu.api.ovh.com/1.0/sms/"+"++"+ ResultatTimeStamp)) sTmp=(Minuscule(Remplace(sTmp,[Caract(32),RC],"")))
signature est une chaîne ="$1$"+sTmp Malheureusement j'ai toujours la même réponse du serveur OVH (BAD SIGNATURE)
Du nouveau de votre côté ? |
| |
| |
| | | |
|
| | |
| |
Posté le 08 octobre 2015 - 23:37 |
Autant pour moi
En convertissant le buffer en hexa et en supprimant les RC et les espace (caract(32)) ça fonctionne. (Une erreur lors de la copie des codes OVH) résultat de httpdonnerésultat :
["sms-qt1497-1"]
Pour rappel le code complet (sans les clefs)
nSTime est un entier = TIMESTAMP() sTosign est une chaîne = ovhapiNV.AS+"+"+ovhapiNV.CK+"+"+"GET"+"+"+"https://eu.api.ovh.com/1.0/sms/"+"++"+nSTime sTmp est une chaîne= BufferVersHexa(HashChaîne(HA_SHA_160,sTosign)) sTmp =(Minuscule(Remplace(sTmp,[Caract(32),RC],""))) sIgnature est une chaîne ="$1$"+Minuscule(sTmp)
HTTPRequête("https://eu.api.ovh.com/1.0/sms/","","X-Ovh-Application:"+ovhapiNV.AK+RC+"X-Ovh-Consumer:"+ovhapiNV.CK+RC+"X-Ovh-Signature:"+sIgnature+RC+"X-Ovh-Timestamp:"+nSTime,"","application/json") Trace(HTTPDonneRésultat()) |
| |
| |
| | | |
|
| | |
| |
Posté le 09 octobre 2015 - 01:21 |
Re.
Encore un dernier message pour vous confirmer que cela fonctionne. Je peux envoyé des sms via une fenêtre Windev.
Je suis occupé à le ré-encoder sous formes de classe. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 message |
|
Posté le 09 octobre 2015 - 01:32 |
Bonjour,
Cela fonctionne.
la fonction HASHCHAINE renvoi un buffer qui doit etre converti pour etre compris par OVH
Si vous avez besoin d'aide, j'ai pu envoyer des SMS.
(Je suis occupé à recoder tout ça sous forme de classe.)
Voici la solution :
nSTime est un entier = :TIMESTAMP() sTosign est une chaîne = :AS+"+"+:CK+"+"+"GET"+"+"+"https://eu.api.ovh.com/1.0/sms/"+"++"+nSTime sTmp est une chaîne= BufferVersHexa(HashChaîne(HA_SHA_160,sTosign)) sTmp =(Minuscule(Remplace(sTmp,[Caract(32),RC],""))) sIgnature est une chaîne ="$1$"+(sTmp) HTTPRequête("https://eu.api.ovh.com/1.0/sms/","","X-Ovh-Application:"+:AK+RC+"X-Ovh-Consumer:"+:CK+RC+"X-Ovh-Signature:"+sIgnature+RC+"X-Ovh-Timestamp:"+nSTime,"","application/json")
En reprenant le code de Martin Christophe voici ce qu'il y à lieu de changer :
[code:wl] //HASH de la requête à envoyé à OVH
//signature="$1$"+ HashChaîne(HA_SHA_160,applicationSecret+"+"+consumerKey+"+GET+https://eu.api.ovh.com/1.0/sms/"+"++"+ ResultatTimeStamp)
signature =BufferVersHexa(HashChaîne(HashChaîne(HA_SHA_160,applicationSecret+"+"+consumerKey+"+GET+https://eu.api.ovh.com/1.0/sms/"+"++"+ ResultatTimeStamp))
signature="$1$"+(Minuscule(Remplace(signature,[Caract(32),RC],""))) |
| |
| |
| | | |
|
| | |
| |
Posté le 07 janvier 2016 - 15:28 |
Bonjour,
Actuellement, j'utilise le service SoAPI mais celui ci va bientôt cesser de fonctionner, je migre pour utiliser l'API V6.
J'ai repris votre code pour l'envoi de SMS via l'API d'OVH.
En résultat de la requête HTTP, j'ai l'erreur suivante : {"errorCode":"NOT_GRANTED_CALL","httpCode":"403 Forbidden","message":"This call has not been granted"}
Pour les codes AK, AS et CK, je les ai récupérés via cette page : https://eu.api.ovh.com/createToken/
Avez-vous fait de même ? Voyez-vous d'où peut venir l'erreur ?
Merci d'avance |
| |
| |
| | | |
|
| | |
| |
Posté le 13 octobre 2016 - 13:16 |
Bonjour,
J'arrive à la même erreur que vous. Avez trouvez une solution ? Merci |
| |
| |
| | | |
|
| | |
| |
Posté le 24 novembre 2016 - 16:44 |
Bonjour,
Je me permet de relancer le sujet, j'ai réussi en utilisant le code très gentiment proposé par Qouet a faire la première étape pour l'envoi de SMS, c'est à dire récupérer "récupération du compte SMS" :
sEntete est une chaîne = "X-Ovh-Application:"+sAK+RC+... "X-Ovh-Consumer:"+sCK+RC+... "X-Ovh-Signature:"+sIgnature+RC+... "X-Ovh-Timestamp:"+nSTime
HTTPRequête("https://eu.api.ovh.com/1.0/sms/","",sEntete,"","application/json") sCompteSMS est une chaîne = HTTPDonneRésultat() Trace(sCompteSMS)
Cela fonctionne parfaitement et sans soucis. Maintenant là ou ça se complique c'est pour l'étape suivante, l'envoi de SMS.
J'essai de me baser sur l'exemple en C# fourni par OVH accessible au travers du lien suivant
https://www.ovh.com/fr/g1654.envoyer_des_sms_avec_lapi_ovh_en_c…
Mon problème numéro 1 est que je ne maitrise pas le sujet, ce sont mes premiers pas en httprequete, j'ai pour l'instant toujours utilisé des webservices SOAP en les intégrant dans windev (beaucoup plus facile ^^)
Au premier abord, ça ressemble fort à la récupération du compte SMS, la différence est qu'il faut passer une enveloppe BODY en plus et se mettre en mode "POST"
Pour la partie body essayé de faire ça :
stBody est une structure charset est une chaîne receivers est un tableau de chaînes 'Message' est une chaîne priority est une chaîne senderForResponse est une chaîne FIN
stBodyToSend est un stBody
stBodyToSend:charset = "UTF-8" Ajoute(stBodyToSend:receivers,"+monNumDeTelephone") stBodyToSend:'Message' = "Test SMS OVH" stBodyToSend:priority = "high" stBodyToSend:senderForResponse = True
Sérialise(stBodyToSend, sBody, psdJSON)
Puis, n'écoutant que mon courage, je me lance désespérément dans un
HTTPRequête("https://eu.api.ovh.com/1.0/sms/"+sServiceName+"/jobs/","",sEntete,sBody,"application/json") sRetour est une chaîne = HTTPDonneRésultat() Trace(sRetour)
Et là, je trace me renvoi inlassablement un : {"errorCode":"INVALID_SIGNATURE","httpCode":"400 Bad Request","message":"Invalid signature"}
Sachant que la signature est la même que dans le code pour récuperer le compte SMS est que celui-ci fonctionne, j'avoue que je sèche un peu...
L'un (ou l'une) d'entre vous aurait-il une idée ?
Merci d'avance |
| |
| |
| | | |
|
| | |
| |
Posté le 27 décembre 2016 - 10:00 |
Bonjour Maxime,
Avant tout, merci beaucoup pour ce bout de code très propre, qui nous éclaire sur la façon de procéder, mais j'arrive inévitablement au même résultat que toi avec pour toute réponse: {"errorCode":"INVALID_SIGNATURE","httpCode":"400 Bad Request","message":"Invalid signature"}
As tu trouvé la réponse à ce problème ?
Je vous remercie par avance. |
| |
| |
| | | |
|
| | |
| |
Posté le 03 février 2017 - 10:42 |
Salut à tous Il faut modifier la signature Du style String toSign = AS + "+" + CK + "+" + METHOD + "+" + QUERY + "+" + BODY + "+" + TSTAMP;
A voir sur https://www.ovh.com/fr/g1670.guide… |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 12 messages Popularité : +0 (2 votes) |
|
Posté le 22 décembre 2017 - 11:01 |
Bonjour a tous et toutes, Nous souhaitons faire l'envoi de SMS via l'api REST d'OVH. Malgré la lecture des différents post, toujours cette erreur 400 : {"errorCode":"INVALID_SIGNATURE","httpCode":"400 Bad Request","message":"Invalid signature"}
Je colle le code si qq'un à une idée du pourquoi .... Je sèche (et je suis pas le seul dans l’équipe) Merci et bonnes fêtes...
// Déclaration de la structure st_SMS est une Structure receivers est un tableau dynamique de chaîne 'message' est une chaîne priority est une chaîne sender est une chaîne senderForResponse est un booléen FIN
// instanciation de la structure Mon_Sms est un st_SMS Mon_Sms.'message' = "test" Mon_Sms.priority = "high" Mon_Sms.sender = "MonSenderQuiExiste" Ajoute(Mon_Sms.receivers,"+33......") Mon_Sms.senderForResponse = Vrai
// sérialisation BODY est une chaîne Sérialise(Mon_Sms,BODY,psdJSON)
BODY = ChaîneVersUTF8(BODY)
soit ServiceName = "sms-mc........" soit METHOD = "POST" soit QUERY = "https://eu.api.ovh.com/1.0/sms/"+ServiceName+"/jobs/"
soit TSTAMP = TimeStamp() // essai avec : HTTPRequête("https://eu.api.ovh.com/1.0/auth/time") -> mm résultat
//Création de la signature soit cSigne = AS + "+" + CK + "+" + METHOD + "+" + QUERY + "+" + BODY + "+" + TSTAMP cTmp est une chaîne = BufferVersHexa( HashChaîne( HA_SHA_160,ManSigne ) ) cTmp = ( Minuscule( Remplace( cTmp,[Caract(32),RC],"" ) ) ) soit Signature = "$1$"+Minuscule(cTmp)
// init & Envoi de la requete soit RqEnvoi est un restRequête RqEnvoi..URL = QUERY RqEnvoi..Méthode = METHOD RqEnvoi..ContentType = "application/json" RqEnvoi..Entête["X-Ovh-Application"] = AK RqEnvoi..Entête["X-Ovh-Consumer"] = CK RqEnvoi..Entête["X-Ovh-Signature"] = Signature RqEnvoi..Entête["X-Ovh-Timestamp"] = "" + TSTAMP rqReponse est une restRéponse = RESTEnvoie(RqEnvoi)
Trace(rqReponse.CodeEtat,rqReponse.Contenu)Message modifié, 22 décembre 2017 - 11:03 |
| |
| |
| | | |
|
| | |
| |
Posté le 12 janvier 2018 - 08:17 |
Bonjour à tous,
Je rencontre exactement le même problème. si La récupération du compte SMS (ce qui semble indiquer que la méthode de génération de la signature fonctionne ) l'envoi d'un SMS ne fonctionne pas et j'obtiens la même erreur en retour
{"errorCode":"INVALID_SIGNATURE","httpCode":"400 Bad Request","message":"Invalid signature"}
je n'ai vraiment aucune piste.
Avez vous déjà réussi à envoyer un SMS avec l' API ?
Merci de votre retour.
Hervé HARLAY |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 12 messages Popularité : +0 (2 votes) |
|
Posté le 21 février 2018 - 10:49 |
Voici le code fonctionnel pour API OVH SMS en Windev 23. Si message d'erreur : refaire les ApplicationKey....
Par contre la copie du code en webdev pour faire une API Rest ne fonctionne pas...bizarre, une idée
st_Sms est une structure charset est une chaîne coding est une chaîne 'Message' est une chaîne noStopClause est un booléen priority est une chaîne receivers est un tableau dynamiquedynamique de chaîne sender est une chaîne senderForResponse est un booléen validityPeriod est un entier FIN
st_Reponse est une structure totalCreditsRemoved est une entier invalidReceivers est un tableau dynamiquedynamique de chaîne ids est un tableau dynamique d'entiers validReceivers est un tableau dynamiquedynamique de chaîne FIN MaReponse est un st_Reponse
MonSms est un st_Sms MonSms.charset = "UTF-8" MonSms.coding = "8bit" MonSms.'Message' = LeTexte MonSms.noStopClause = Vrai MonSms.priority = "high" Ajoute(MonSms.receivers,NoMobile) MonSms.sender = "Sender qui existe dans le compte OVH" MonSms.senderForResponse = Faux MonSms.validityPeriod = 2880
soit BODY = "" Sérialise(MonSms,BODY,psdJSON)
soit reqEnvoi est une restRequête soit reqReponse est une restRéponse soit QUERY = "https://eu.api.ovh.com/1.0/sms/+"CompteSMSOVH+"/jobs"
reqEnvoi.URL = QUERY reqEnvoi.Méthode = httpPost reqEnvoi.ContentType = "application/json" reqEnvoi.Entête["X-Ovh-Application"] = Application_Key reqEnvoi.Entête["X-Ovh-Consumer"] = Consumer_Key
HTTPRequête("https://eu.api.ovh.com/1.0/auth/time") nSTime est une chaîne = HTTPDonneRésultat()
soit METHOD = "POST" soit ManSigne = Application_Secret + "+" + Consumer_Key + "+" + METHOD + "+" + QUERY + "+" + BODY + "+" + nSTime cTmp est une chaîne=BufferVersHexa(HashChaîne(HA_SHA_160,ManSigne)) cTmp=(Minuscule(Remplace(cTmp,[Caract(32),RC],""))) soit Signature = "$1$"+Minuscule(cTmp) reqEnvoi.Contenu = BODY reqEnvoi.Entête["X-Ovh-Signature"] = Signature reqEnvoi.Entête["X-Ovh-Timestamp"] = nSTime
reqReponse = RESTEnvoie(reqEnvoi) SI reqReponse.CodeEtat = 200 Désérialise(MaReponse,reqReponse.Contenu,psdJSON) SINON Erreur(reqReponse.CodeEtat+" - "+reqReponse.Contenu) FIN
Message modifié, 21 février 2018 - 10:51 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 91 messages Popularité : +3 (3 votes) |
|
Posté le 21 février 2018 - 16:21 |
Bonjour,
pour dans ta déclaration de la structure le mot Dynamique est doublé ???
st_Reponse est une structure totalCreditsRemoved est une entier invalidReceivers est un tableau dynamiquedynamique de chaîne ids est un tableau dynamique d'entiers validReceivers est un tableau dynamiquedynamique de chaîne FIN
Stéphane |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 12 messages Popularité : +0 (2 votes) |
|
Posté le 21 février 2018 - 17:10 |
Ha oui tien, c'est une erreur de copier/coller dans le code "d'origine" pas de double, merci pour l'info |
| |
| |
| | | |
|
| | |
| |
Posté le 01 juin 2018 - 12:37 |
Merci pour ce script! Quelqu'un a-t-il des infos sur la création de la clé chez OVH? l'adresse: https://api.ovh.com/createToken Dans le champ "Rights" j'ai mis POST mais pour le champs "Path" à côté je ne sais pas quoi mettre?
Merci de votre aide. |
| |
| |
| | | |
|
| | |
| |
Posté le 01 juin 2018 - 17:15 |
plusieurs anomalies dans votre code qui le rendent non fonctionnel. 'Message' doit être 'message' notament Voici la correction:
st_Sms est une structure charset est une chaîne coding est une chaîne 'Message' est une chaîne noStopClause est un booléen priority est une chaîne receivers est un tableau dynamiquedynamique de chaîne sender est une chaîne senderForResponse est un booléen validityPeriod est un entier FIN
st_Reponse est une structure totalCreditsRemoved est une entier invalidReceivers est un tableau dynamiquedynamique de chaîne ids est un tableau dynamique d'entiers validReceivers est un tableau dynamiquedynamique de chaîne FIN MaReponse est un st_Reponse
MonSms est un st_Sms MonSms.charset = "UTF-8" MonSms.coding = "8bit" MonSms.'Message' = "LeTexteDuSMS" MonSms.noStopClause = Vrai MonSms.priority = "high" Ajoute(MonSms.receivers,NoMobile) MonSms.sender = "Sender qui existe dans le compte OVH" MonSms.senderForResponse = Faux MonSms.validityPeriod = 2880
soit BODY = "" Sérialise(MonSms,BODY,psdJSON)
soit reqEnvoi est une restRequête soit reqReponse est une restRéponse soit QUERY = "https://eu.api.ovh.com/1.0/sms/+"CompteSMSOVH"+"/jobs"
reqEnvoi.URL = QUERY reqEnvoi.Méthode = httpPost reqEnvoi.ContentType = "application/json" reqEnvoi.Entête["X-Ovh-Application"] = Application_Key reqEnvoi.Entête["X-Ovh-Consumer"] = Consumer_Key
HTTPRequête("https: nSTime est une chaîne = HTTPDonneRésultat()
soit METHOD = "POST" soit ManSigne = Application_Secret + "+" + Consumer_Key + "+" + METHOD + "+" + QUERY + "+" + BODY + "+" + nSTime cTmp est une chaîne=BufferVersHexa(HashChaîne(HA_SHA_160,ManSigne)) cTmp=(Minuscule(Remplace(cTmp,[Caract(32),RC],""))) soit Signature = "$1$"+Minuscule(cTmp) reqEnvoi.Contenu = BODY reqEnvoi.Entête["X-Ovh-Signature"] = Signature reqEnvoi.Entête["X-Ovh-Timestamp"] = nSTime
reqReponse = RESTEnvoie(reqEnvoi) SI reqReponse.CodeEtat = 200 Désérialise(MaReponse,reqReponse.Contenu,psdJSON) SINON Erreur(reqReponse.CodeEtat+" - "+reqReponse.Contenu) FIN
|
| |
| |
| | | |
|
| | |
| |
Posté le 01 juin 2018 - 17:17 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 messages Popularité : +1 (1 vote) |
|
Posté le 04 juin 2018 - 19:33 |
Dans le code ci-dessus, le copier/coller engendre une erreur sur la variable 'Message' qui doit être 'message' Par contre le fait de sérialiser avec psdJSON entraine le remplacement des caractères accentués comme "é" par "\u00e9e" ce qui ajoute des caractères au sms. comment éviter cela? Merci de votre aide. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 38 messages Popularité : +1 (1 vote) |
|
Posté le 11 octobre 2019 - 16:50 |
Bonjour
Voici la version 2.343 beta actualisée , j'ai ajouté les variables manquantes pour une plus grande facilité d'utilisation
Merci pour l'exemple
CompteSMSOVH, Application_Key, Consumer_Key, Application_Secret,NoMobile est une chaîne
CompteSMSOVH="moncomptesmsOVH" Application_Key="MaClef" Consumer_Key="MaClef" Application_Secret="MaClef" NoMobile= "N° de mobile du destinataire format international +33" Sender est une chaîne = "Expediteur présent dans le compte ovh" ScriptName est une chaîne = "NomDu Script API KEY"
// URL pour construire les clefs API
// https://api.ovh.com/createToken/index.cgi…
// Structure SMS st_Sms est une Structure charset est une chaîne coding est une chaîne 'message' est une chaîne noStopClause est un booléen priority est une chaîne receivers est un tableau dynamique de chaîne Sender est une chaîne senderForResponse est un booléen validityPeriod est un entier FIN // Reponse st_Reponse est une Structure totalCreditsRemoved est une entier invalidReceivers est un tableau dynamique de chaîne ids est un tableau dynamique d'entiers validReceivers est un tableau dynamique de chaîne FIN MaReponse est un st_Reponse
MonSms est un st_Sms MonSms.charset = "UTF-8" MonSms.coding = "8bit" MonSms.'message' = "LeTexteDuSMS" MonSms.noStopClause = Vrai MonSms.priority = "high" Ajoute(MonSms.receivers,NoMobile) MonSms.Sender = Sender MonSms.senderForResponse = Faux MonSms.validityPeriod = 2880
soit BODY = "" Sérialise(MonSms,BODY,psdJSON)
soit reqEnvoi est un httpRequête soit reqReponse est un httpRéponse soit QUERY = "https://eu.api.ovh.com/1.0/sms/"+CompteSMSOVH+"/jobs"
reqEnvoi..URL = QUERY reqEnvoi..Méthode = httpPost reqEnvoi..ContentType = "application/json" reqEnvoi.Entête["X-Ovh-Application"] = Application_Key reqEnvoi.Entête["X-Ovh-Consumer"] = Consumer_Key reqEnvoi..AgentUtilisateur = ScriptName HTTPRequête("https://eu.api.ovh.com/1.0/auth/time") nSTime est une chaîne = HTTPDonneRésultat()
soit METHOD = "POST" soit ManSigne = Application_Secret + "+" + Consumer_Key + "+" + METHOD + "+" + QUERY + "+" + BODY + "+" + nSTime cTmp est une chaîne=BufferVersHexa(HashChaîne(HA_SHA_160,ManSigne)) cTmp=(Minuscule(Remplace(cTmp,[Caract(32),RC],""))) soit Signature = "$1$"+Minuscule(cTmp) reqEnvoi..Contenu = BODY reqEnvoi.Entête["X-Ovh-Signature"] = Signature reqEnvoi.Entête["X-Ovh-Timestamp"] = nSTime
reqReponse = RESTEnvoie(reqEnvoi) SI reqReponse..CodeEtat = 200 Désérialise(MaReponse,reqReponse..Contenu,psdJSON) SINON Erreur(reqReponse..CodeEtat+" - "+reqReponse..Contenu) FIN |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 38 messages Popularité : +1 (1 vote) |
|
Posté le 11 octobre 2019 - 16:58 |
Bonjour à tous,
j'ai un souci avec le code ce dessus, avec le message d'erreur suivant :
<httpRéponse> Contenu={"message":"Received not described parameters: (Sender) while calling creation handler"}
En sender je met la chaine correspondant à l'expéditeur de mon compte ovh (ici un numéro de tel en +33664XXXXXX)
Quelqu'un à une idée ?? |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 38 messages Popularité : +1 (1 vote) |
|
Posté le 11 octobre 2019 - 17:14 |
Oki voici la solution pour virer le parametre Sender..... Cette solution permet d'éviter de créer un expéditeur et d'utiliser des numéros courts
La solution en PHP est ici https://docs.ovh.com/fr/sms/envoyer_des_sms_avec_lapi_ovh_en_php/
Enjoy !
CompteSMSOVH, Application_Key, Consumer_Key, Application_Secret,NoMobile est une chaîne
CompteSMSOVH="moncomptesmsOVH" Application_Key="MaClef" Consumer_Key="MaClef" Application_Secret="MaClef" NoMobile= "N° de mobile du destinataire format international +33"
// Sender est une chaîne = "Expediteur présent dans le compte ovh" ScriptName est une chaîne = "NomDu Script API KEY"
// URL pour construire les clefs API
// https://api.ovh.com/createToken/index.cgi…
// Structure SMS st_Sms est une Structure charset est une chaîne coding est une chaîne 'message' est une chaîne noStopClause est un booléen priority est une chaîne receivers est un tableau dynamique de chaîne // Sender est une chaîne A DESACTIVER senderForResponse est un booléen validityPeriod est un entier FIN // Reponse st_Reponse est une Structure totalCreditsRemoved est une entier invalidReceivers est un tableau dynamique de chaîne ids est un tableau dynamique d'entiers validReceivers est un tableau dynamique de chaîne FIN MaReponse est un st_Reponse
MonSms est un st_Sms MonSms.charset = "UTF-8" MonSms.coding = "8bit" MonSms.'message' = "LeTexteDuSMS" MonSms.noStopClause = Vrai MonSms.priority = "high" Ajoute(MonSms.receivers,NoMobile) // MonSms.Sender = Sender MonSms.senderForResponse = True // UTILISATION DES NUMEROS COURS MonSms.validityPeriod = 2880
soit BODY = "" Sérialise(MonSms,BODY,psdJSON)
soit reqEnvoi est un httpRequête soit reqReponse est un httpRéponse soit QUERY = "https://eu.api.ovh.com/1.0/sms/"+CompteSMSOVH+"/jobs"
reqEnvoi..URL = QUERY reqEnvoi..Méthode = httpPost reqEnvoi..ContentType = "application/json" reqEnvoi.Entête["X-Ovh-Application"] = Application_Key reqEnvoi.Entête["X-Ovh-Consumer"] = Consumer_Key // reqEnvoi..AgentUtilisateur = ScriptName PAS UTILE HTTPRequête("https://eu.api.ovh.com/1.0/auth/time") nSTime est une chaîne = HTTPDonneRésultat()
soit METHOD = "POST" soit ManSigne = Application_Secret + "+" + Consumer_Key + "+" + METHOD + "+" + QUERY + "+" + BODY + "+" + nSTime cTmp est une chaîne=BufferVersHexa(HashChaîne(HA_SHA_160,ManSigne)) cTmp=(Minuscule(Remplace(cTmp,[Caract(32),RC],""))) soit Signature = "$1$"+Minuscule(cTmp) reqEnvoi..Contenu = BODY reqEnvoi.Entête["X-Ovh-Signature"] = Signature reqEnvoi.Entête["X-Ovh-Timestamp"] = nSTime
reqReponse = RESTEnvoie(reqEnvoi) SI reqReponse..CodeEtat = 200 Désérialise(MaReponse,reqReponse..Contenu,psdJSON) SINON Erreur(reqReponse..CodeEtat+" - "+reqReponse..Contenu) FIN |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 194 messages Popularité : +3 (3 votes) |
|
Posté le 01 novembre 2019 - 03:24 |
Bonjour
j'ai essayé votre solution, mais il me dit : 403 message this call has not been granted
error code NOT_GRANTED_CALL
une idée ?
j'ai fait la demande comme ci dessous
|
| |
| |
| | | |
|
| | |
| |
Membre enregistré 6 messages |
|
Posté le 10 janvier 2020 - 19:24 |
Bonjour, J'ai la même erreur: "NOT_GRANTED_CALL"......"This call has not been granted." Quelqu'un a une idée ? Merci. Jean-Luc |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 11 messages Popularité : +2 (2 votes) |
|
Posté le 06 avril 2020 - 13:19 |
Bonjour. J'ai suivi la proposition de @Hervé Franco pour la version 2.343 beta. Avec Windev, tout marche bien. Par contre avec Webdev (Config = Webservice REST) ça ne marche pas. J'ai l'erreur "Invalid Signature". Quelqu'un peut-il m'aider ? Merci d'avance |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 177 messages Popularité : +16 (16 votes) |
|
Posté le 06 avril 2020 - 14:17 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 11 messages Popularité : +2 (2 votes) |
|
Posté le 07 avril 2020 - 11:11 |
Merci Jean-Marc. J'ai trouvé le problème. En faite dans la description de la configuration, j'utilisais des chaines Unicodes en exécution. Quand je l'ai ramené en ANSI, tout marche sans soucis. Je ne sais pas s'il y'a modification à faire dans le code en fonction de cette configuration. Bien à vous |
| |
| |
| | | |
|
| | |
| |
Posté le 24 octobre 2021 - 13:19 |
La version de Jean-Marc pour l'unicode
Procedure SMS_OVH_Envoie(LOCAL sNumero est une chaîne, LOCAL sMessage est une chaîne)
sApplicationKey est une chaîne = "" sApplicationSecret est une chaîne = "" sConsumerKey est une chaîne = "" sServiceName est une chaîne = ""
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 = "" Ajoute(stSms_jobs.receivers ,sNumero) stSms_jobs.message = sMessage stSms_jobs.priority = "high" stSms_jobs.senderForResponse = False stSms_jobs.noStopClause = True
sUrl est une chaîne ANSI sToSign est une chaîne ANSI sSignature est une chaîne ANSI sBody est une chaîne ANSI = ""
Req est une httpRequête reponse est un httpRéponse
sUrl = "https://eu.api.ovh.com/1.0/sms/"+sServiceName+"/jobs/"
sBody = WL.VariantVersJSON(stSms_jobs)
pDateHeure est une DateHeure = Maintenant() sHeuredate est une chaîne ANSI = Gauche(pDateHeure,14) sHeuredateUTC est une chaîne ANSI = Gauche(DateHeureLocaleVersUTC(sHeuredate),14) sTimeStamp est une chaîne ANSI = "19700101000000" sDiffDateHeure est une chaîne ANSI = 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(WL.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
reponse = HTTPEnvoie(Req)
SI ErreurDétectée ALORS Erreur(ErreurInfo(errComplet)) SINON SI reponse.CodeEtat >= 200 _ET_ reponse.CodeEtat <230 ALORS ToastValidé("Connexion valide ") SINON vRep est un Variant = WL.JSONVersVariant(reponse..Contenu) Erreur(vRep.message) FIN FIN
PROCEDURE INTERNE HashSHA(sChaine est une chaîne ANSI ) sSha est un chaîne ANSI = HashChaîne(HA_SHA_160,sChaine) sShaBuffer est une chaîne ANSI = WL.BufferVersHexa(sSha) sChaineX est une chaîne ANSI = Minuscule(Remplace(sShaBuffer,[Caract(32),RC],"")) RENVOYER sChaineX FIN |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|