예제 #1
0
        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;
        }
예제 #2
0
        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);
        }
예제 #3
0
 public String SendMultiple(String from, Dictionary<String, String> toAndText, EnumAuthenticationTypes authType)
 {
     return SendMultiple(from, toAndText, DateTime.Now, authType);
 }
예제 #4
0
 public String Send(String from, String[] to, String text, EnumAuthenticationTypes authType)
 {
     return Send(from, to, text, DateTime.MinValue, authType);
 }
예제 #5
0
 public String Send(String from, String to, String text, DateTime dateTime, EnumAuthenticationTypes authType)
 {
     return Send(from, new String[] { to }, text, dateTime, authType);
 }
예제 #6
0
        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;
        }
예제 #7
0
        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;
        }