Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 14739|Odpowiedź: 3

[Interfejs] C# nie nazywa Alibaba SMS dll, jak używać interfejsu http do wysyłania SMS

[Skopiuj link]
Opublikowano 01.12.2018 18:37:34 | | |
  Jakiś czas temu firma miała projekt, który wymagał obsługi powiadomień SMS, a potem kupiłem Alibaba Cloud SMS do tworzenia interfejsów SMS. Projekt działa jednak na systemie XP, więc musi być frameworkiem .NET3.5, ale DLL SMS udostępnione przez Alibabę można używać tylko w .NET 4.0 i wyższych, co jest bardzo krępujące, na szczęście Alibaba podała przykład Javy dla HTTP, więc próbowałem napisać metodę wywoływania Alibaba Cloud HTTP w C# zgodnie z kodem Java. Wracając do sedna, przejdź do kodu! (Publikowałem też w CSDN, gwarancja osobistości to nie piracki post, dziękuję)  
Klasa publiczna SendShort
    {
        /// <summary>
        Metoda wywołań w interfejsie SMS C#
        /// </summary>
        <nazwa parametru="URL"></param>
        /// <returns></returns>
        public static string GetHtmlFormUrl(string url)
        {
            string strRet = null;
            if (url == null || url. trim(). ToString() == "")
            {
                powrót strRet;
            }
            String targeturl = URL. trim(). ToString();
            spróbuj
            {
                HttpWebRequest hr = (HttpWebRequest)WebRequest.Create(targeturl);
                HR. UserAgent = "Mozilla/4.0 (kompatybilny; MSIE 6.0; Windows NT 5.1)";
                HR. Metoda = "GET";
                HR. Timeout = 30 * 60 * 1000;
                WebResponse hs = godzina. GetResponse();
                Strumień sr = hs. GetResponseStream();
                StreamReader ser = nowy StreamReader(sr, Encoding.Default);
                strRet = MessageHandle(ser. ReadToEnd());
            }
            złapanie (Wyjątek ex)
            {
               strRet = "SMS wysłany niepowodzeniem!" +ex. Komunikat;
            }
            powrót strRet;
        }
        /// <summary>
        Sprawdź, czy numer komórkowy jest prawidłowy
        /// </summary>
        <nazwa parametru="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>
        Kod weryfikacyjny SMS
        /// </summary>
        <nazwa parametru="mobilny"></param>
        <nazwa parametru="kod"></param>
        /// <returns></returns>
        publiczny ciąg statyczny SignDemo (string mobile, kod int)
        {
            string accessKeyId = "Twój accessKeyId";
            string accessSecret = "twój accessSecret";
            string nowDate = DateTime.Now.ToUniversalTime(). ToString("yyyy-MM-dd'T'HH:mm:ss'Z'"); Czas GTM
            Dictionary<string, string> keyValues = nowy Dictionary<string, string>(); Deklaruj słownik
            1. Parametry systemu
            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"); można zastąpić XML

            2. Parametry API biznesowego
            keyValues.Add("Action", "SendSms");
            keyValues.Add("Version", "2017-05-25");
            keyValues.Add("RegionId", "cn-hangzhou");
            keyValues.Add("PhoneNumbers", telefon komórkowy);
            keyValues.Add("SignName", "Your Signature");
            keyValues.Add("TemplateParam", "{\"code\":\"" + code + "\"}");
            keyValues.Add("TemplateCode", "Twój numer szablonu");
            keyValues.Add("OutId", "123");

            3. Usuń słowo kluczowe charakterystyczne
            if (keyValues.ContainsKey("Signature"))
            {
                keyValues.Reremove ("Signature");
            }

            4. Sortowanie kluczy parametrów
            Dictionary<string, string> ascDic = keyValues.OrderBy(o => o.Key). ToDictionary(o => o.Key, p => p.Value.ToString());
            5. Skonstruuj ciąg znaków
            StringBuilder builder = nowy StringBuilder();
            foreach (element var w ascDic)
            {
                jeśli (pozycja. Key == "SignName")
                {

                }
                else
                {
                    Budowniczcie. Dodaj ("&"). Dodaj(specialUrlEncode(item. Key)). Dodaj ("="). Dodaj(specialUrlEncode(item. Value));
                }
                jeśli (pozycja. Key == "RegionId")
                {
                    Budowniczcie. Dodaj ("&"). Dodaj(specialUrlEncode("SignName")). Dodaj ("="). Append(specialUrlEncode(keyValues["SignName"]);
                }
            }
            string sorteQueryString = builder. ToString(). Podciąg(1);

            StringBuilder stringToSign = nowy StringBuilder();
            stringToSign.Append("GET"). Dołącz ("&");
            stringToSign.Append(specialUrlEncode("/")). Dołącz ("&");
            stringToSign.Append(specialUrlEncode(sorteQueryString));

            string Sign = MySign(accessSecret + "&", stringToSign.ToString());
            6. Podpis powinien być również zakodowany specjalnym adresem URL na końcu
            string signture = specialUrlEncode(Sign);
            Na koniec wydrukuj adres URL prawdziwego żądania GET
            string url = "http://dysmsapi.aliyuncs.com/?Signature=" + signture + builder;
            string result = GetHtmlFormUrl(url);
            Zwróć wynik;
        }
        /// <summary>
        Kodowanie URL
        /// </summary>
        <nazwa parametru="wartość"></param>
        /// <returns></returns>
        public static string specialUrlEncode(string temp)
        {

            StringBuilder stringBuilder = nowy StringBuilder();
            dla (int i = 0; Ja < temperaturę. Długość; i++)
            {
                Struna T = Temp[i]. ToString();
                string k = HttpUtility.UrlEncode(t, Encoding.UTF8);
                jeśli (t == k)
                {
                    stringBuilder.Append(t);
                }
                else
                {
                    stringBuilder.Append(k.ToUpper());
                }
            }
            return stringBuilder.ToString(). Zastąp("+", "%20"). Zamień ("*", "%2A"). Zastąp("%7E", "~");
        }
        /// <summary>
        HMACSHA1 podpis
        /// </summary>
        <nazwa paramu="accessSecret"></param>
        <nazwa parametru="stringToSign"></param>
        /// <returns></returns>
        publiczny ciąg statyczny MySign(string accessSecret, stringToSign)
        {
            spróbuj
            {
                var hmacsha1 = new HMACSHA1(Encoding.UTF8.GetBytes(accessSecret));
                var dataBuffer = Encoding.UTF8.GetBytes(stringToSign);
                var hashBytes = hmacsha1. ComputeHash(dataBuffer);
                stringbytebyte = BitConverter.ToString(hashBytes, 0). Replace("-", string. Pusty). ToLower();
                bajt[] bajty = strToHexByte(stringbyte);
                return Convert.ToBase64String(bytes);
            }
            złapanie (Wyjątek ex)
            {

                Rzuć ex;
            }
        }
        /// <summary>
        Tablica łańcuchowa do 16-bajtowej
        /// </summary>
        <nazwa parametru="hexString"></param>
        /// <returns></returns>
        prywatny bajt statyczny[] strToToHexByte(string hexString)
        {
            hexString = hexString.Replace(" ", "");
            if (hexString.Length % 2) != 0)
                hexString += " ";
            bajt[] returnBytes = nowy bajt[hexString.Length / 2];
            dla (int i = 0; i < returnBytes.Length; i++)
                returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
            return returnBytes;
        }
        /// <summary>
        Mechanizmy przetwarzania wiadomości
        /// </summary>
        <nazwa parametru="str"></param>
        /// <returns></returns>
        prywatny statyczny ciąg MessageHandle(string str)
        {
            MessageModel message = JsonConvert.DeserializeObject<MessageModel>(str);
            wynik ciągu = "";
            przełącznik (wiadomość. Kod)
            {
                przypadek "OK":
                    result = "SMS wysłany pomyślnie!";
                    przerwę;
                Sprawa "ISP. RAM_PERMISSION_DENY":
                    result = "Pozwolenie na RAM DEN";
                    przerwę;
                Sprawa "ISV. OUT_OF_SERVICE":
                    rezultat = "Przestoje biznesowe";
                    przerwę;
                Sprawa "ISV. PRODUCT_UN_SUBSCRIPT":
                    result = "Klienci Alibaba Cloud, którzy nie otworzyli jeszcze produktów komunikacyjnych w chmurze";
                    przerwę;
                Sprawa "ISV. PRODUCT_UNSUBSCRIBE":
                    result = "Produkt nie otwarty";
                    przerwę;
                Sprawa "ISV. ACCOUNT_NOT_EXISTS":
                    result = "Konto nie istnieje";
                    przerwę;
                Sprawa "ISV. ACCOUNT_ABNORMAL":
                    result = "Wyjątek od konta";
                    przerwę;
                Przypadek "isv.SMS_TEMPLATE_ILLEGAL":
                    result = "Szablon SMS jest nielegalny";
                    przerwę;
                Przypadek "isv.SMS_SIGNATURE_ILLEGAL":
                    result = "Podpis SMS nie jest legalny";
                    przerwę;
                Sprawa "ISV. INVALID_PARAMETERS":
                    result = "wyjątek parametrów";
                    przerwę;
                Sprawa "ISV. MOBILE_NUMBER_ILLEGAL":
                    rezultat = "nielegalny numer telefonu komórkowego";
                    przerwę;
                Sprawa "ISV. MOBILE_COUNT_OVER_LIMIT":
                    wynik = "Liczba numerów komórkowych przekracza limit";
                    przerwę;
                Sprawa "ISV. TEMPLATE_MISSING_PARAMETERS":
                    result = "brakująca zmienna szablonu";
                    przerwę;
                Sprawa "ISV. BUSINESS_LIMIT_CONTROL":
                    wynik = "Bieżący biznes";
                    przerwę;
                Sprawa "ISV. INVALID_JSON_PARAM":
                    result = "Parametr JSON nie jest legalny, akceptowane są tylko wartości ciągu znaków";
                    przerwę;
                Sprawa "ISV. PARAM_LENGTH_LIMIT":
                    result = "Parametr przekracza limit długości";
                    przerwę;
                Sprawa "ISV. PARAM_NOT_SUPPORT_URL":
                    result = "URL nie obsługiwany";
                    przerwę;
                Sprawa "ISV. AMOUNT_NOT_ENOUGH":
                    rezultat = "Niewystarczające saldo na koncie";
                    przerwę;
                Sprawa "ISV. TEMPLATE_PARAMS_ILLEGAL":
                    result = "Zmienne szablonowe zawierają nielegalne słowa kluczowe";
                    przerwę;
            }
            Zwróć wynik;
        }
    }

Wynik

Liczba uczestników2MB+2 przyczynić się+2 Zapaść powód
Mały śmiecie + 1 + 1 Pokaż mu kciuk w górę
Admin + 1 + 1 Bardzo potężne!

Zobacz wszystkie oceny





Poprzedni:1000 budynków jest ręcznie malowanych i pięknych
Następny:Materiały Byłej Marynarki Wojennej i Armii Japońskiej, PDF
Opublikowano 02.12.2018 09:00:04 |
Opublikowano 02.12.2018 10:19:01 |
Dzięki kodowi udostępnionemu przez właściciela wysyłaj SMS przez interfejs HTTP do symulacji, nie musisz dzwonić do dużego dll, pokaż ci kciuk w górę
Opublikowano 14.12.2018 16:03:21 |
Wszyscy są mistrzami
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com