Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 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 = hr. 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)
        {
            повернути 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="code"></param>
        /// <returns></returns>
        публічний статичний рядок SignDemo (рядок мобільний, int code)
        {
            рядок accessKeyId = "Ваш accessKeyId ";
            string 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. Параметри Business API
            keyValues.Add("Дія", "SendSms");
            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("Підпис"))
            {
                keyValues.Remove("Підпис");
            }

            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(specialUrlEncode(item. Value));
                }
                якщо (пункт. Ключ == «RegionId»)
                {
                    Будівельник. Додаток("&"). Додати(specialUrlEncode("SignName")). Додати("="). Append(specialUrlEncode(keyValues["SignName"]));
                }
            }
            string sorteQueryString = builder. ToString(). Підстрінг(1);

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

            string sign = 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(temp string)
        {

            StringBuilder stringBuilder = новий StringBuilder();
            для (int i = 0; Я < тимчасово. Довжина; i++)
            {
                Струна t = темп[i]. ToString();
                string 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>
        public static string 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(string hexString)
        {
            hexString = hexString.Replace(" ", "");
            якщо ((hexString.Length % 2) != 0)
                hexString += " ";
            байт[] 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(string str)
        {
            MessageModel message = JsonConvert.DeserializeObject<MessageModel>(str);
            результат рядка = "";
            Switch (повідомлення. Код)
            {
                Випадок «OK»:
                    результат = "SMS успішно надіслано!";
                    перерва;
                Справа: «Ісп. 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 09: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