Bruno Fedrigo
30/05/2016, 11h42
Bonjour,
Je vous expose le problème : dans une application console C#, je dois être capable d'envoyer des SMS automatiquement via celle-ci. Nous devons êtres capables de faire passer n'importe quel message sans nous soucier des caractères à utiliser.
Pour cela il me semble nécessaire de passer par paramètre "coding" en "8bit" ainsi qu'une conversion forcée du message en UTF-8 (bien que dans un post concernant le même problème en JAVA, la personne expliquait qu'il fallait encoder en "ISO-8859-1", solution testée aussi mais sans succès), malheureusement après plusieurs tests rien n'y fait, je continues de recevoir un message "Invalid Signature". (exactement comme décrit par smsDecision dans sa mise à jour datant du 26/02/2015, 17h31 du post : https://forum.ovh.com/showthread.php...ESTful-en-java)
Voici le code utilisé, la méthode d'envoi de message :
Et le détail de la méthode InvokeREST :
Méthode SHA1Hash :
Pouvez-vous me dire où je me suis trompé et surtout quel encodage est le bon au final ?
Merci d'avance,
Bruno
Je vous expose le problème : dans une application console C#, je dois être capable d'envoyer des SMS automatiquement via celle-ci. Nous devons êtres capables de faire passer n'importe quel message sans nous soucier des caractères à utiliser.
Pour cela il me semble nécessaire de passer par paramètre "coding" en "8bit" ainsi qu'une conversion forcée du message en UTF-8 (bien que dans un post concernant le même problème en JAVA, la personne expliquait qu'il fallait encoder en "ISO-8859-1", solution testée aussi mais sans succès), malheureusement après plusieurs tests rien n'y fait, je continues de recevoir un message "Invalid Signature". (exactement comme décrit par smsDecision dans sa mise à jour datant du 26/02/2015, 17h31 du post : https://forum.ovh.com/showthread.php...ESTful-en-java)
Voici le code utilisé, la méthode d'envoi de message :
Code:
string receivers = string.Join(",", numberTo.Select(n => @"""" + n.Trim() + @"""").ToArray()); try { byte[] utfBytes = Encoding.UTF8.GetBytes(message); byte[] isoBytes = Encoding.Convert(Encoding.UTF8, Encoding.GetEncoding("ISO-8859-1"), utfBytes); string msg = Encoding.GetEncoding("ISO-8859-1").GetString(isoBytes); JObject jBody = new JObject(); jBody.Add("charset", "UTF-8"); jBody.Add("coding", "8bit"); jBody.Add("message", msg); jBody.Add("receivers", new JArray(numberTo)); jBody.Add("sender", numberFrom); if (!string.IsNullOrWhiteSpace(tag)) { jBody.Add("tag", tag); } string body = jBody.ToString(); string response = InvokeREST("/sms/" + account + "/jobs/", "POST", body); ...
Code:
string uri = "https://eu.api.ovh.com/1.0/sms/" + account + "/jobs/; string time = TimeServer; string toSign = this.applicationSecret + "+" + this.consumerKey + "+" POST "+" + uri + "+" + body + "+" + time; string signature = "$1$" + SHA1Hash(toSign); string response = null; using (var client = new WebClient()) { client.Headers.Add(HttpRequestHeader.ContentType, "application/json"); client.Headers.Add(HttpRequestHeader.ContentEncoding, "UTF-8"); client.Headers.Add(HttpRequestHeader.Accept, "*/*"); client.Headers.Add("X-Ovh-Application", this.applicationKey); client.Headers.Add("X-Ovh-Consumer", this.consumerKey); client.Headers.Add("X-Ovh-Signature", signature); client.Headers.Add("X-Ovh-Timestamp", time); switch (method) { case "GET": response = client.DownloadString(uri); break; case "POST": { try { response = client.UploadString(uri, "POST", body); } ...
Code:
public string SHA1Hash(string s) { var sha = SHA1.Create(); byte[] bHash = sha.ComputeHash(Encoding.UTF8.GetBytes(s)); StringBuilder sBuilder = new StringBuilder(); for (int i = 0; i < bHash.Length; i++) { sBuilder.Append(bHash[i].ToString("x2")); } return sBuilder.ToString(); }
Merci d'avance,
Bruno