public String SendMultiple(String from, Dictionary<String, String> toAndText, DateTime dateTime, EnumAuthenticationTypes authType) { // TODO: Нужно проверить хватит ли баланса. Баланса не хватит, чтобы отправить на все номера - сообщение будет уничтожено (его не получит никто). String result = String.Empty; if (toAndText.Count < 1) throw new ArgumentNullException("to", "Неверные входные данные - массив пуст."); if (toAndText.Count > 100) throw new ArgumentOutOfRangeException("to", "Неверные входные данные - слишком много элементов (больше 100) в массиве."); if (dateTime == DateTime.MinValue) dateTime = DateTime.Now; // Лишнее, не надо генерировать это исключение. Если время меньше текущего времени, сообщение отправляется моментально - правило на сервере. // if ((DateTime.Now - dateTime).Days > new TimeSpan(7, 0, 0, 0).Days) // throw new ArgumentOutOfRangeException("dateTime", "Неверные входные данные - должно быть не больше 7 дней с момента подачи запроса."); try { if (!Directory.Exists(dir)) Directory.CreateDirectory(dir); } catch (Exception ex) { throw new Exception("Ошибка доступа", ex.InnerException); } using (StreamWriter writer = new StreamWriter(log_sent, true)) { String auth = String.Empty; String parameters = String.Empty; String answer = String.Empty; String recipients = String.Empty; String token = String.Empty; foreach (KeyValuePair<String, String> kvp in toAndText) { recipients += "&multi[" + kvp.Key + "]=" + kvp.Value; } writer.WriteLine(String.Format("{0}={1}{2}Отправка СМС получателям: {3}", DateTime.Now.ToLongDateString(), DateTime.Now.ToLongTimeString(), Environment.NewLine, recipients)); try { token = GetToken(); String sha512 = HashCodeHelper.GetSHA512Hash(String.Format("{0}{1}", password, token)).ToLower(); String sha512wapi = HashCodeHelper.GetSHA512Hash(String.Format("{0}{1}{2}", password, token, apiId)).ToLower(); if (authType == EnumAuthenticationTypes.Simple) auth = String.Format("api_id={0}", apiId); if (authType == EnumAuthenticationTypes.Strong) auth = String.Format("login={0}&token={1}&sha512={2}", login, token, sha512); if (authType == EnumAuthenticationTypes.StrongApi) auth = String.Format("login={0}&token={1}&sha512={2}", login, token, sha512wapi); parameters = String.Format("{0}&from={1}{2}", auth, from, recipients); if (dateTime != DateTime.MinValue) parameters += "&time=" + TimeHelper.GetUnixTime(dateTime); if (partnerId != String.Empty) parameters += "&partner_id=" + partnerId; if (translit == true) parameters += "&translit=1"; if (test == true) parameters += "&test=1"; writer.WriteLine(String.Format("Запрос: {0}{1}", Environment.NewLine, parameters)); WebRequest request = WebRequest.Create(sendUrl); request.ContentType = "application/x-www-form-urlencoded"; request.Method = "POST"; Byte[] bytes = Encoding.UTF8.GetBytes(parameters); request.ContentLength = bytes.Length; Stream os = request.GetRequestStream(); os.Write(bytes, 0, bytes.Length); os.Close(); using (WebResponse resp = request.GetResponse()) { if (resp == null) return null; using (StreamReader sr = new StreamReader(resp.GetResponseStream())) { answer = sr.ReadToEnd().Trim(); } } writer.WriteLine(String.Format("Ответ: {0}{1}", Environment.NewLine, answer)); writer.WriteLine("Документация - http://sms.ru/?panel=api&subpanel=method&show=sms/send" + Environment.NewLine); String[] lines = answer.Split(new String[] { "\n" }, StringSplitOptions.None); if (Convert.ToInt32(lines[0]) == Convert.ToInt32(ResponseOnSendRequest.MessageAccepted)) { result = answer; } else { using (StreamWriter w = new StreamWriter(log_error, true)) { w.WriteLine(String.Format("{0}={1}{2}Отправка СМС получателям: {3}", DateTime.Now.ToLongDateString(), DateTime.Now.ToLongTimeString(), Environment.NewLine, recipients)); w.WriteLine(String.Format("Ответ: {0}{1}", Environment.NewLine, answer)); w.WriteLine("Документация - http://sms.ru/?panel=api&subpanel=method&show=sms/send" + Environment.NewLine); } result = String.Empty; } } catch (Exception ex) { writer.WriteLine("Возникла непонятная ошибка. Нужно проверить значения в файле конфигурации и разобраться в коде. Скорее всего введены неверные значения, либо сервер SMS.RU недоступен."); writer.WriteLine(ex.Message); writer.WriteLine(ex.StackTrace + Environment.NewLine); using (StreamWriter w = new StreamWriter(log_error, true)) { w.WriteLine("Возникла непонятная ошибка. Нужно проверить значения в файле конфигурации и разобраться в коде. Скорее всего введены неверные значения, либо сервер SMS.RU недоступен."); w.WriteLine(ex.Message); w.WriteLine(ex.StackTrace + Environment.NewLine); } } } return result; }
private async Task <String> Send(String from, String[] to, String text, DateTime dateTime, EnumAuthenticationTypes authType) { // TODO: Нужно проверить хватит ли баланса. Баланса не хватит, чтобы отправить на все номера - сообщение будет уничтожено (его не получит никто). String result = String.Empty; if (to.Length < 1) { logger.Error("SmsRu: to=Неверные входные данные - массив пуст."); return(result); } if (to.Length > 100) { logger.Error("SmsRu: to=Неверные входные данные - слишком много элементов (больше 100) в массиве."); return(result); } if (dateTime == DateTime.MinValue) { dateTime = DateTime.Now; } // Лишнее, не надо генерировать это исключение. Если время меньше текущего времени, сообщение отправляется моментально - правило на сервере. // if ((DateTime.Now - dateTime).Days > new TimeSpan(7, 0, 0, 0).Days) // throw new ArgumentOutOfRangeException("dateTime", "Неверные входные данные - должно быть не больше 7 дней с момента подачи запроса."); String auth = String.Empty; String parameters = String.Empty; String answer = String.Empty; String recipients = String.Empty; String token = String.Empty; foreach (String item in to) { recipients += item + ","; } recipients = recipients.Substring(0, recipients.Length - 1); logger.Info($"SmsRu: Отправка СМС получателям: {recipients}"); try { token = await GetToken(); String sha512 = HashCodeHelper.GetSHA512Hash(String.Format("{0}{1}", password, token)).ToLower(); String sha512wapi = HashCodeHelper.GetSHA512Hash(String.Format("{0}{1}{2}", password, token, apiId)).ToLower(); if (authType == EnumAuthenticationTypes.Simple) { auth = String.Format("api_id={0}", apiId); } if (authType == EnumAuthenticationTypes.Strong) { auth = String.Format("login={0}&token={1}&sha512={2}", login, token, sha512); } if (authType == EnumAuthenticationTypes.StrongApi) { auth = String.Format("login={0}&token={1}&sha512={2}", login, token, sha512wapi); } parameters = String.Format("{0}&to={1}&text={2}&from={3}", auth, recipients, text, from); if (dateTime != DateTime.MinValue) { parameters += "&time=" + TimeHelper.GetUnixTime(dateTime); } if (!string.IsNullOrWhiteSpace(partnerId)) { parameters += "&partner_id=" + partnerId; } if (translit == true) { parameters += "&translit=1"; } if (test == true) { parameters += "&test=1"; } logger.Info($"SmsRu: Запрос: {parameters}"); WebRequest request = WebRequest.Create(sendUrl); request.ContentType = "application/x-www-form-urlencoded"; request.Method = "POST"; Byte[] bytes = Encoding.UTF8.GetBytes(parameters); request.Headers["ContentLength"] = bytes.Length.ToString(); using (Stream os = await request.GetRequestStreamAsync()) { os.Write(bytes, 0, bytes.Length); } using (WebResponse resp = await request.GetResponseAsync()) { if (resp == null) { return(null); } using (StreamReader sr = new StreamReader(resp.GetResponseStream())) { answer = sr.ReadToEnd().Trim(); } } logger.Info($"SmsRu: Ответ: {answer}"); String[] lines = answer.Split(new String[] { "\n" }, StringSplitOptions.None); if (Convert.ToInt32(lines[0]) == Convert.ToInt32(ResponseOnSendRequest.MessageAccepted)) { result = answer; } else { result = String.Empty; } } catch (Exception ex) { logger.Error("SmsRu: Возникла непонятная ошибка", ex); } return(result); }
public String SendMultiple(String from, Dictionary<String, String> toAndText, EnumAuthenticationTypes authType) { return SendMultiple(from, toAndText, DateTime.Now, authType); }
public String Send(String from, String[] to, String text, EnumAuthenticationTypes authType) { return Send(from, to, text, DateTime.MinValue, authType); }
public String Send(String from, String to, String text, DateTime dateTime, EnumAuthenticationTypes authType) { return Send(from, new String[] { to }, text, dateTime, authType); }
Boolean translit = Convert.ToBoolean(ConfigurationManager.AppSettings["translit"]); // Переводит все русские символы в латинские. #endregion Fields #region Methods public ResponseOnAuthRequest AuthCheck(EnumAuthenticationTypes authType) { ResponseOnAuthRequest result = ResponseOnAuthRequest.Error; try { if (!Directory.Exists(dir)) Directory.CreateDirectory(dir); } catch (Exception ex) { throw new Exception("Ошибка доступа", ex.InnerException); } using (StreamWriter writer = new StreamWriter(log_auth, true)) { writer.WriteLine(String.Format("{0}={1}{2}Проверка номера телефона и пароля на действительность:", DateTime.Now.ToLongDateString(), DateTime.Now.ToLongTimeString(), Environment.NewLine)); String auth = String.Empty; String link = String.Empty; String answer = String.Empty; String token = String.Empty; try { token = GetToken(); String sha512 = HashCodeHelper.GetSHA512Hash(String.Format("{0}{1}", password, token)).ToLower(); String sha512wapi = HashCodeHelper.GetSHA512Hash(String.Format("{0}{1}{2}", password, token, apiId)).ToLower(); if (authType == EnumAuthenticationTypes.Simple) auth = String.Format("{0}?api_id={1}", authUrl, apiId); if (authType == EnumAuthenticationTypes.Strong) auth = String.Format("{0}?login={1}&token={2}&sha512={3}", authUrl, login, token, sha512); if (authType == EnumAuthenticationTypes.StrongApi) auth = String.Format("{0}?login={1}&token={2}&sha512={3}", authUrl, login, token, sha512wapi); link = String.Format("{0}", auth); writer.WriteLine(String.Format("Запрос: {0}", link)); WebRequest req = WebRequest.Create(link); using (WebResponse response = req.GetResponse()) { using (Stream stream = response.GetResponseStream()) { if (stream != null) using (StreamReader sr = new StreamReader(stream)) { answer = sr.ReadToEnd(); writer.WriteLine(String.Format("Ответ: {0}", answer)); writer.WriteLine("Документация - http://sms.ru/?panel=api&subpanel=method&show=auth/check" + Environment.NewLine); String[] lines = answer.Split(new String[] { "\n" }, StringSplitOptions.None); if (Convert.ToInt32(lines[0]) == Convert.ToInt32(ResponseOnAuthRequest.Done)) { result = ResponseOnAuthRequest.Done; } else { using (StreamWriter w = new StreamWriter(log_error, true)) { w.WriteLine(String.Format("{0}={1}{2}Проверка номера телефона и пароля на действительность:", DateTime.Now.ToLongDateString(), DateTime.Now.ToLongTimeString(), Environment.NewLine)); w.WriteLine(String.Format("Ответ: {0}{1}", Environment.NewLine, answer)); w.WriteLine("Документация - http://sms.ru/?panel=api&subpanel=method&show=auth/check" + Environment.NewLine); } result = (ResponseOnAuthRequest)Convert.ToInt32(lines[0]); } } } } } catch (Exception ex) { writer.WriteLine("Возникла непонятная ошибка. Нужно проверить значения в файле конфигурации и разобраться в коде. Скорее всего введены неверные значения, либо сервер SMS.RU недоступен."); writer.WriteLine(ex.Message); writer.WriteLine(ex.StackTrace + Environment.NewLine); using (StreamWriter w = new StreamWriter(log_error, true)) { w.WriteLine("Возникла непонятная ошибка. Нужно проверить значения в файле конфигурации и разобраться в коде. Скорее всего введены неверные значения, либо сервер SMS.RU недоступен."); w.WriteLine(ex.Message); w.WriteLine(ex.StackTrace + Environment.NewLine); } result = ResponseOnAuthRequest.Error; } } return result; }
public Boolean StoplistDelete(String phone, EnumAuthenticationTypes authType) { Boolean result = false; try { if (!Directory.Exists(dir)) Directory.CreateDirectory(dir); } catch (Exception ex) { throw new Exception("Ошибка доступа", ex.InnerException); } using (StreamWriter writer = new StreamWriter(log_stoplist, true)) { String auth = String.Empty; String parameters = String.Empty; String answer = String.Empty; String recipients = String.Empty; String token = String.Empty; writer.WriteLine(String.Format("Удаление номера из стоплиста:{0}Номер: {1}", Environment.NewLine, phone)); try { token = GetToken(); String sha512 = HashCodeHelper.GetSHA512Hash(String.Format("{0}{1}", password, token)).ToLower(); String sha512wapi = HashCodeHelper.GetSHA512Hash(String.Format("{0}{1}{2}", password, token, apiId)).ToLower(); if (authType == EnumAuthenticationTypes.Simple) auth = String.Format("api_id={0}", apiId); if (authType == EnumAuthenticationTypes.Strong) auth = String.Format("login={0}&token={1}&sha512={2}", login, token, sha512); if (authType == EnumAuthenticationTypes.StrongApi) auth = String.Format("login={0}&token={1}&sha512={2}", login, token, sha512wapi); parameters = String.Format("{0}&stoplist_phone={1}", auth, phone); writer.WriteLine(String.Format("Запрос: {0}{1}", Environment.NewLine, parameters)); WebRequest request = WebRequest.Create(stoplistDelUrl); request.ContentType = "application/x-www-form-urlencoded"; request.Method = "POST"; Byte[] bytes = Encoding.UTF8.GetBytes(parameters); request.ContentLength = bytes.Length; Stream os = request.GetRequestStream(); os.Write(bytes, 0, bytes.Length); os.Close(); using (WebResponse resp = request.GetResponse()) { if (resp == null) return false; using (StreamReader sr = new StreamReader(resp.GetResponseStream())) { answer = sr.ReadToEnd().Trim(); } } writer.WriteLine(String.Format("Ответ: {0}{1}", Environment.NewLine, answer)); writer.WriteLine("Документация - http://sms.ru/?panel=api&subpanel=method&show=stoplist/del" + Environment.NewLine); String[] lines = answer.Split(new String[] { "\n" }, StringSplitOptions.None); if (Convert.ToInt32(lines[0]) == Convert.ToInt32(ResponseOnStoplistDeleteRequest.Done)) { result = true; } else { using (StreamWriter w = new StreamWriter(log_error, true)) { w.WriteLine(String.Format("{0}={1}{2}Удаление номера из стоплиста:{2}Номер: {3}", DateTime.Now.ToLongDateString(), DateTime.Now.ToLongTimeString(), Environment.NewLine, phone)); w.WriteLine(String.Format("Ответ: {0}{1}", Environment.NewLine, answer)); w.WriteLine("Документация - http://sms.ru/?panel=api&subpanel=method&show=stoplist/del" + Environment.NewLine); } result = false; } } catch (Exception ex) { writer.WriteLine("Возникла непонятная ошибка. Нужно проверить значения в файле конфигурации и разобраться в коде. Скорее всего введены неверные значения, либо сервер SMS.RU недоступен."); writer.WriteLine(ex.Message); writer.WriteLine(ex.StackTrace + Environment.NewLine); using (StreamWriter w = new StreamWriter(log_error, true)) { w.WriteLine("Возникла непонятная ошибка. Нужно проверить значения в файле конфигурации и разобраться в коде. Скорее всего введены неверные значения, либо сервер SMS.RU недоступен."); w.WriteLine(ex.Message); w.WriteLine(ex.StackTrace + Environment.NewLine); } } } return result; }