Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 14739|Отговор: 3

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

[Копирай линк]
Публикувано в 1.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>
        public static 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="мобилен"></param>
        <param name="код"></param>
        /// <returns></returns>
        публичен статичен низ SignDemo (мобилен низ, int код)
        {
            низов 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. Параметри на бизнес 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.Redele("Подпис");
            }

            4. Сортиране на ключове по параметри
            Речник<низ, низ> ascDic = keyValues.OrderBy(o => o.Key). ToDictionary(o => o.Key, p => p.Value.ToString());
            5. Конструирайте струната, която ще бъде подписана
            StringBuilder builder = нов StringBuilder();
            foreach (var елемент в ascDic)
            {
                ако (елемент. Ключ == "SignName")
                {

                }
                Друго
                {
                    Строител. Append("&"). Append(specialUrlEncode(предмет. Ключ)). Append("="). Append(specialUrlEncode(предмет. Стойност));
                }
                ако (елемент. Ключ == "RegionId")
                {
                    Строител. Append("&"). Append(specialUrlEncode("SignName")). Append("="). 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 = GetHtmlFormUrl(url);
            резултат от връщане;
        }
        /// <summary>
        URL кодиране
        /// </summary>
        <param name="стойност"></param>
        /// <returns></returns>
        public static string specialUrlEncode(temp на струна)
        {

            StringBuilder stringBuilder = нов StringBuilder();
            за (int i = 0; Аз < временно. Дължина; i++)
            {
                Струна t = temp[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>
        публичен статичен низ MySign(низов 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();
                байт[] байтове = strToToHexByte(stringbyte);
                return Convert.ToBase64String(bytes);
            }
            catch (Изключение напр.)
            {

                хвърли бивши;
            }
        }
        /// <summary>
        Масив от низ към 16 байта
        /// </summary>
        <param name="hexString"></param>
        /// <returns></returns>
        private static byte[] 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(string str)
        {
            MessageModel message = JsonConvert.DeserializeObject<MessageModel>(str);
            резултат от струна = "";
            Switch (съобщение. Код)
            {
                Случай "ОК":
                    резултат = "SMS изпратено успешно!";
                    прекъсване;
                Случай "Isp. RAM_PERMISSION_DENY":
                    резултат = "ОТКАЗ от разрешение за RAM";
                    прекъсване;
                Дело "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":
                    result = "изключение от параметъра";
                    прекъсване;
                Дело "ISV. MOBILE_NUMBER_ILLEGAL":
                    резултат = "незаконен мобилен телефонен номер";
                    прекъсване;
                Дело "ISV. MOBILE_COUNT_OVER_LIMIT":
                    резултат = "Броят на мобилните номера надвишава лимита";
                    прекъсване;
                Дело "ISV. TEMPLATE_MISSING_PARAMETERS":
                    резултат = "липсваща променлива в шаблона";
                    прекъсване;
                Дело "ISV. BUSINESS_LIMIT_CONTROL":
                    резултат = "Бизнес текущи";
                    прекъсване;
                Дело "ISV. INVALID_JSON_PARAM":
                    result = "JSON параметърът не е легитимен, приемат се само стойности на низове";
                    прекъсване;
                Дело "ISV. PARAM_LENGTH_LIMIT":
                    резултат = "Параметърът надвишава лимита на дължината";
                    прекъсване;
                Дело "ISV. PARAM_NOT_SUPPORT_URL":
                    резултат = "URL не се поддържа";
                    прекъсване;
                Дело "ISV. AMOUNT_NOT_ENOUGH":
                    резултат = "Недостатъчно баланс по сметката";
                    прекъсване;
                Дело "ISV. TEMPLATE_PARAMS_ILLEGAL":
                    result = "Променливите в шаблона съдържат незаконни ключови думи";
                    прекъсване;
            }
            резултат от връщане;
        }
    }

Резултат

Брой участници2MB+2 допринасям+2 Срив причина
Малък боклук + 1 + 1 Дай му палец нагоре
Администратор + 1 + 1 Много мощно!

Вижте всички оценки





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

Mail To:help@itsvse.com