Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 14739|Ответ: 3

[Интерфейс] C# не вызывает Alibaba SMS dll, как использовать http-интерфейс для отправки SMS

[Скопировать ссылку]
Опубликовано 01.12.2018 18:37:34 | | |
  Некоторое время назад у компании был проект, в котором нужно было использовать SMS-уведомления, и тогда я купил Alibaba Cloud SMS для разработки SMS-интерфейсов. Но проект работает на системе XP, поэтому он должен быть фреймворком .NET3.5, а SMS-DLL, предоставленный Alibaba, может использоваться только в .NET 4.0 и выше, что очень неловко, к счастью, Alibaba привела пример Java для HTTP, поэтому я попытался написать метод вызова Alibaba Cloud HTTP на C# в соответствии с java-кодом. Вернёмся к сути, переходите к коду! (Я также публиковался в CSDN, гарантия личности — это не пиратский пост, спасибо)  
публичный класс SendShort
    {
        /// <summary>
        Метод вызова SMS-интерфейса C#
        /// </summary>
        <param name="url"></param>
        /// <returns></returns>
        публичная статическая строка GetHtmlFormUrl (строка url)
        {
            string strRet = null;
            если (url == null || url. Trim(). ToString() == "")
            {
                возвращать strRet;
            }
            String targeturl = url. Trim(). ToString();
            Попробуй
            {
                HttpWebRequest hr = (HttpWebRequest)WebRequest.Create(targeturl);
                HR. UserAgent = "Mozilla/4.0 (совместим; MSIE 6.0; Windows NT 5.1)»;
                HR. Метод = «GET»;
                HR. Тайм-аут = 30 * 60 * 1000;
                WebResponse hs = ч. GetResponse();
                Поток sr = hs. GetResponseStream();
                StreamReader ser = новый StreamReader(sr, Encoding.Default);
                strRet = MessageHandle(ser. ReadToEnd());
            }
            catch (исключение, например)
            {
               strRet = «SMS не удалось!» +ex. Сообщение;
            }
            возвращать strRet;
        }
        /// <summary>
        Проверьте, что номер мобильного телефона легитимен
        /// </summary>
        <param name="str_handset"></param>
        /// <returns></returns>
        публичный статический bool IsHandset (string str_handset)
        {
            return System.Text.RegularExpressions.Regex.IsMatch(str_handset, @"^1[3|4|5|7|8][0-9]\d{8}$");
        }
        /// <summary>
        Код проверки SMS
        /// </summary>
        <param name="mobile"></param>
        <param name="код"></param>
        /// <returns></returns>
        публичная статическая строка SignDemo (строка мобильная, int код)
        {
            строка accessKeyId = «Ваш accessKeyId»;
            строка accessSecret = «ваш accessSecret»;
            string nowDate = DateTime.Now.toUniversalTime(). ToString("yyyy-MM-dd'T'HH:mm:ss'Z'"); Время GTM
            Словарь<строка, строка> ключЗначения = новый словарь<строка, строка>(); Объявить словарь
            1. Параметры системы
            keyValues.Add("SignatureMethod", "HMAC-SHA1");
            keyValues.Add ("SignatureNonce", Guid.NewGuid(). ToString());
            keyValues.Add("AccessKeyId", accessKeyId);
            keyValues.Add ("SignatureVersion", "1.0");
            keyValues.Add ("Timestamp", nowDate);
            keyValues.Add("Format", "Json"); может быть заменён на XML

            2. Параметры бизнес-API
            keyValues.Add («Действие», «Отправить SMS»);
            keyValues.Add ("Версия", "2017-05-25");
            keyValues.Add("RegionId", "cn-hangzhou");
            keyValues.Add("PhoneNumbers", мобильный телефон);
            keyValues.Add("SignName", "Ваша подпись");
            keyValues.Add("TemplateParam", "{\"code\":\"" + код + "\"}");
            keyValues.Add("TemplateCode", "Ваш номер шаблона");
            keyValues.Add("OutId", "123");

            3. Удалите ключевое слово с подписью
            если (keyValues.ContainsKey("Signature"))
            {
                keyValues.Redele(«Подпись»);
            }

            4. Сортировка ключей параметров
            Словарь<строка, строка> ascDic = keyValues.OrderBy(o => o.Key). ToDictionary(o => o.Key, p => p.Value.ToString());
            5. Постройте строку для подписи
            Конструктор StringBuilder = новый StringBuilder();
            foreach (var элемент в ascDic)
            {
                если (пункт. Ключ == «SignName»)
                {

                }
                Другое
                {
                    Строитель. Приложение("&"). Append(specialUrlEncode(item. Ключ)). Append("="). Append(specialUrlEncode(item. Value));
                }
                если (пункт. Ключ == «RegionId»)
                {
                    Строитель. Приложение("&"). Append(specialUrlEncode("SignName")). Append("="). Append(specialUrlEncode(keyValues["SignName"]));
                }
            }
            string sorteQueryString = builder. ToString(). Substring(1);

            StringBuilder stringToSign = новый StringBuilder();
            stringToSign.Append("GET"). Append("&");
            stringToSign.Append(specialUrlEncode("/")). Append("&");
            stringToSign.Append(specialUrlEncode(sorteQueryString));

            строковый знак = MySign(accessSecret + "&", stringToSign.ToString());
            6. Подпись также должна быть закодирована специальным URL в конце
            string signture = specialUrlEncode(Sign);
            Наконец, распечатайте URL легитимного запроса GET
            String url = "http://dysmsapi.aliyuncs.com/?Signature=" + signture + builder;
            string result = GetHtmlFormUrl(url);
            результат возврата;
        }
        /// <summary>
        Кодирование URL
        /// </summary>
        <param name="значение"></param>
        /// <returns></returns>
        public static string specialUrlEncode(string temp)
        {

            StringBuilder stringBuilder = новый StringBuilder();
            для (int i = 0; Я < временно. Длина; i++)
            {
                Строка t = temp[i]. ToString();
                строка k = HttpUtility.UrlEncode(t, Encoding.UTF8);
                если (t == k)
                {
                    stringBuilder.Append(t);
                }
                Другое
                {
                    stringBuilder.Append(k.ToUpper());
                }
            }
            return stringBuilder.ToString(). Заменить("+", "%20"). Заменить("*", "%2A"). Заменить ("%7E", "~");
        }
        /// <summary>
        HMACSHA1 подпись
        /// </summary>
        <param name="accessSecret"></param>
        <param name="stringToSign"></param>
        /// <returns></returns>
        публичная статическая строка MySign(string accessSecret, string stringToSign)
        {
            Попробуй
            {
                var hmacsha1 = new HMACSHA1(Encoding.UTF8.GetBytes(accessSecret));
                var dataBuffer = Encoding.UTF8.GetBytes(stringToSign);
                var hashBytes = hmacsha1. ComputeHash(dataBuffer);
                stringbyte = BitConverter.ToString(hashBytes, 0). Заменить("-", струну. Пусто). ToLower();
                byte[] bytes = strToToHexByte(stringbyte);
                вернуть Convert.ToBase64String(bytes);
            }
            catch (исключение, например)
            {

                брось бывшего;
            }
        }
        /// <summary>
        Строка в массив на 16 байт
        /// </summary>
        <param name="hexString"></param>
        /// <returns></returns>
        приватный статический байт[] strToToHexByte(строка hexString)
        {
            hexString = hexString.Replace(" ", "");
            если ((hexString.Length % 2) != 0)
                hexString += " ";
            byte[] returnBytes = новый байт[hexString.Length / 2];
            для (int i = 0; i < returnBytes.Length; i++)
                returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
            return returnBytes;
        }
        /// <summary>
        Механизмы обработки сообщений
        /// </summary>
        <param name="str"></param>
        /// <returns></returns>
        приватная статическая строка MessageHandle(строка str)
        {
            MessageModel message = JsonConvert.DeserializeObject<MessageModel>(str);
            результат строки = "";
            Switch (сообщение. Код)
            {
                Случай «ОК»:
                    результат = «SMS отправлен успешно!»;
                    перерыв;
                Дело «ISP. RAM_PERMISSION_DENY»:
                    результат = «ОТКЛОНЕНИЕ разрешения на использование оперативной памяти»;
                    перерыв;
                Дело «ISV. OUT_OF_SERVICE»:
                    результат = «Простой бизнеса»;
                    перерыв;
                Дело «ISV. PRODUCT_UN_SUBSCRIPT»:
                    результат = «Клиенты Alibaba Cloud, которые не открывали облачные коммуникационные продукты»;
                    перерыв;
                Дело «ISV. PRODUCT_UNSUBSCRIBE»:
                    результат = «Продукт не открыт»;
                    перерыв;
                Дело «ISV. ACCOUNT_NOT_EXISTS»:
                    результат = «Аккаунт не существует»;
                    перерыв;
                Дело «ISV. ACCOUNT_ABNORMAL»:
                    результат = «Исключение для аккаунта»;
                    перерыв;
                Дело «isv.SMS_TEMPLATE_ILLEGAL»:
                    результат = «Шаблон SMS не является легальным»;
                    перерыв;
                Случай «isv.SMS_SIGNATURE_ILLEGAL»:
                    результат = «SMS-подпись нелегальна»;
                    перерыв;
                Дело «ISV. INVALID_PARAMETERS»:
                    результат = «исключение параметров»;
                    перерыв;
                Дело «ISV. MOBILE_NUMBER_ILLEGAL»:
                    результат = «нелегальный номер мобильного телефона»;
                    перерыв;
                Дело «ISV. MOBILE_COUNT_OVER_LIMIT»:
                    результат = «Количество мобильных номеров превышает лимит»;
                    перерыв;
                Дело «ISV. TEMPLATE_MISSING_PARAMETERS»:
                    результат = «отсутствующая переменная шаблона»;
                    перерыв;
                Дело «ISV. BUSINESS_LIMIT_CONTROL»:
                    результат = «Деловой текущий»;
                    перерыв;
                Дело «ISV. INVALID_JSON_PARAM»:
                    результат = «Параметр JSON не является легитимным, принимаются только значения строк»;
                    перерыв;
                Дело «ISV. PARAM_LENGTH_LIMIT»:
                    результат = «Параметр превышает предел длины»;
                    перерыв;
                Дело «ISV. PARAM_NOT_SUPPORT_URL»:
                    результат = «URL не поддерживается»;
                    перерыв;
                Дело «ISV. AMOUNT_NOT_ENOUGH»:
                    результат = «Недостаток баланса счета»;
                    перерыв;
                Дело «ISV. TEMPLATE_PARAMS_ILLEGAL»:
                    результат = «Переменные шаблона содержат незаконные ключевые слова»;
                    перерыв;
            }
            результат возврата;
        }
    }

Счёт

Количество участников2МБ+2 способствовать+2 Коллапс причина
Маленькая мразь + 1 + 1 Дайте ему большой палец вверх
Администратора + 1 + 1 Очень мощно!

Смотреть все рейтинги





Предыдущий:1000 зданий расписаны вручную и красивы
Следующий:Материалы бывшего военно-морского и армейского флота Японии, PDF
Опубликовано 02.12.2018 9:00:04 |
Опубликовано 02.12.2018 10:19:01 |
Благодаря коду, предоставленному владельцем, отправляйте SMS через интерфейс HTTP-симуляции, не нужно вызывать большой dll, дайте вам одобрение
Опубликовано 14.12.2018 16:03:21 |
Они все мастера
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com