Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 14739|Odpověď: 3

[Rozhraní] C# nevolá Alibaba SMS dll, jak použít http rozhraní pro odeslání SMS

[Kopírovat odkaz]
Zveřejněno 01.12.2018 18:37:34 | | |
  Před časem měla firma projekt, který potřeboval používat SMS notifikace, a pak jsem si koupil Alibaba Cloud SMS pro vývoj SMS rozhraní. Ale projekt běží na systému XP, takže projekt musí být framework .NET3.5, ale SMS DLL dané Alibabou lze použít pouze ve .net 4.0 a vyšších, což je velmi trapné, naštěstí Alibaba uvedla příklad Javy pro HTTP, takže jsem se pokusil napsat metodu volání Alibaba Cloud HTTP v C# podle java kódu. Zpátky k věci, jdi ke kódu! (Publikoval jsem také na CSDN, záruka osobnosti není pirátský příspěvek, děkuji)  
veřejná třída SendShort
    {
        /// <summary>
        SMS rozhraní C# metoda volání
        /// </summary>
        <název parametru="URL"></param>
        /// <returns></returns>
        public static string GetHtmlFormUrl(string url)
        {
            string strRet = null;
            if (url == null || url. trim(). ToString() == "")
            {
                zpět strRet;
            }
            String targeturl = URL. trim(). ToString();
            zkus
            {
                HttpWebRequest hr = (HttpWebRequest)WebRequest.Create(targeturl);
                HR. UserAgent = "Mozilla/4.0 (kompatibilní; MSIE 6.0; Windows NT 5.1)";
                HR. Metoda = "DOSTAŇ";
                HR. Timeout = 30 * 60 * 1000;
                WebResponse hs = hod. GetResponse();
                Stream sr = hs. GetResponseStream();
                StreamReader ser = nový StreamReader(sr, Encoding.Default);
                strRet = MessageHandle(ser. ReadToEnd());
            }
            chytit (Výjimka ex)
            {
               strRet = "SMS odeslána neuspěla!" +ex. Zpráva;
            }
            zpět strRet;
        }
        /// <summary>
        Ověřte, že je mobilní číslo legitimní
        /// </summary>
        <název 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>
        SMS ověřovací kód
        /// </summary>
        <název parametru="mobil"></param>
        <název parametru="kód"></param>
        /// <returns></returns>
        public static string SignDemo (string mobile, int code)
        {
            string accessKeyId = "Your accessKeyId" ;
            string accessSecret = "your accessSecret";
            string nowDate = DateTime.Now.ToUniversalTime(). ToString("yyyy-MM-dd'T'HH:mm:ss'Z'"); GTM čas
            Dictionary<string, string> keyValues = nový Dictionary<string, string>(); Deklarujte slovník
            1. Parametry systému
            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"); lze nahradit XML

            2. Parametry Business API
            keyValues.Add("Action", "SendSms");
            keyValues.Add("Version", "2017-05-25");
            keyValues.Add("RegionId", "cn-hangzhou");
            keyValues.Add("PhoneNumbers", mobil);
            keyValues.Add("SignName", "Your Signature");
            keyValues.Add("TemplateParam", "{\"code\":\"" + code + "\"}");
            keyValues.Add("TemplateCode", "vaše číslo šablony");
            keyValues.Add("OutId", "123");

            3. Odstraňte podpisové klíčové slovo
            if (keyValues.ContainsKey("Signature"))
            {
                keyValues.Reremove ("Signature");
            }

            4. Třídění klíčů podle parametrů
            Dictionary<string, string> ascDic = keyValues.OrderBy(o => o.Key). ToDictionary(o => o.Key, p => p.Value.ToString());
            5. Sestavte řetězec, který má být podepsán
            StringBuilder builder = nový StringBuilder();
            foreach (var položka v ascDic)
            {
                pokud (položka. Key == "SignName")
                {

                }
                jinak
                {
                    stavitel. Příloha ("&"). Append(specialUrlEncode(item. Key)). Příloha ("="). Append(specialUrlEncode(item. Value));
                }
                pokud (položka. Key == "RegionId")
                {
                    stavitel. Příloha ("&"). Append(specialUrlEncode("SignName")). Příloha ("="). Append(specialUrlEncode(keyValues["SignName"]));
                }
            }
            string sorteQueryString = builder. ToString(). Podřetěz(1);

            StringBuilder stringToSign = nový StringBuilder();
            stringToSign.Append("GET"). Příloha ("&");
            stringToSign.Append(specialUrlEncode("/")). Příloha ("&");
            stringToSign.Append(specialUrlEncode(sorteQueryString));

            string Sign = MySign(accessSecret + "&", stringToSign.ToString());
            6. Podpis by měl být také zakódován speciální URL na konci
            string signture = specialUrlEncode(Sign);
            Nakonec vytiskněte URL legitimního požadavku GET
            string url = "http://dysmsapi.aliyuncs.com/?Signature=" + signture + builder;
            string result = GetHtmlFormUrl(url);
            Výsledek vrátit;
        }
        /// <summary>
        Kódování URL
        /// </summary>
        <název parametru="hodnota"></param>
        /// <returns></returns>
        public static string specialUrlEncode(string temp)
        {

            StringBuilder stringBuilder = nový StringBuilder();
            pro (int i = 0; Já < dočasnou teplotu. Délka; i++)
            {
                struna t = temp[i]. ToString();
                string k = HttpUtility.UrlEncode(t, Encoding.UTF8);
                pokud (t == k)
                {
                    stringBuilder.Append(t);
                }
                jinak
                {
                    stringBuilder.Append(k.ToUpper());
                }
            }
            return stringBuilder.ToString(). Nahrazení ("+", "%20"). Nahrazení ("*", "%2A"). Nahrazení ("%7E", "~");
        }
        /// <summary>
        HMACSHA1 podpis
        /// </summary>
        <název parametru="accessSecret"></param>
        <název parametru="stringToSign"></param>
        /// <returns></returns>
        public static string MySign(string accessSecret, string stringToSign)
        {
            zkus
            {
                var hmacsha1 = new HMACSHA1(Encoding.UTF8.GetBytes(accessSecret));
                var dataBuffer = Encoding.UTF8.GetBytes(stringToSign);
                var hashBytes = hmacsha1. ComputeHash(dataBuffer);
                stringbytebyte = BitConverter.ToString(hashBytes, 0). Nahraďte ("-", strunu. Prázdné). ToLower();
                byte[] bytes = strToToHexByte(stringbyte);
                return Convert.ToBase64String(bytes);
            }
            chytit (Výjimka ex)
            {

                vyhoďte ex;
            }
        }
        /// <summary>
        Pole řetězce na 16 bajtů
        /// </summary>
        <název parametru="hexString"></param>
        /// <returns></returns>
        soukromý statický bajt[] strToToHexByte(string hexString)
        {
            hexString = hexString.Replace(" ", "");
            if ((hexString.Length % 2) != 0)
                hexString += " ";
            bajt[] returnBytes = nový bajt[hexString.Length / 2];
            pro (int i = 0; i < returnBytes.Length; i++)
                returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
            return returnBytes;
        }
        /// <summary>
        Mechanismy zpracování zpráv
        /// </summary>
        <název parametru="str"></param>
        /// <returns></returns>
        soukromý statický řetězec MessageHandle(string str)
        {
            MessageModel message = JsonConvert.DeserializeObject<MessageModel>(str);
            string result = "";
            Switch (zpráva. Kód)
            {
                případ "OK":
                    výsledek = "SMS odeslána úspěšně!";
                    pauza;
                Případ "ISP. RAM_PERMISSION_DENY":
                    výsledek = "RAM Permission ZAKÁZÁNO";
                    pauza;
                Případ "ISV. OUT_OF_SERVICE":
                    výsledek = "Výpadky podnikání";
                    pauza;
                Případ "ISV. PRODUCT_UN_SUBSCRIPT":
                    result = "Zákazníci Alibaba Cloud, kteří neotevřeli cloudové komunikační produkty";
                    pauza;
                Případ "ISV. PRODUCT_UNSUBSCRIBE":
                    výsledek = "Produkt nebyl otevřen";
                    pauza;
                Případ "ISV. ACCOUNT_NOT_EXISTS":
                    výsledek = "Účet neexistuje";
                    pauza;
                Případ "ISV. ACCOUNT_ABNORMAL":
                    výsledek = "Výjimka účtu";
                    pauza;
                Případ "isv.SMS_TEMPLATE_ILLEGAL":
                    result = "SMS šablona není legální";
                    pauza;
                Případ "isv.SMS_SIGNATURE_ILLEGAL":
                    result = "SMS podpis není legální";
                    pauza;
                Případ "ISV. INVALID_PARAMETERS":
                    výsledek = "výjimka parametrů";
                    pauza;
                Případ "ISV. MOBILE_NUMBER_ILLEGAL":
                    výsledek = "nelegální mobilní telefonní číslo";
                    pauza;
                Případ "ISV. MOBILE_COUNT_OVER_LIMIT":
                    výsledek = "Počet mobilních čísel překračuje limit";
                    pauza;
                Případ "ISV. TEMPLATE_MISSING_PARAMETERS":
                    výsledek = "chybějící proměnná šablony";
                    pauza;
                Případ "ISV. BUSINESS_LIMIT_CONTROL":
                    výsledek = "Obchodní proud";
                    pauza;
                Případ "ISV. INVALID_JSON_PARAM":
                    result = "Parametr JSON není legitimní, přijímají se pouze hodnoty řetězců";
                    pauza;
                Případ "ISV. PARAM_LENGTH_LIMIT":
                    výsledek = "Parametr překračuje délkový limit";
                    pauza;
                Případ "ISV. PARAM_NOT_SUPPORT_URL":
                    výsledek = "URL není podporováno";
                    pauza;
                Případ "ISV. AMOUNT_NOT_ENOUGH":
                    výsledek = "Nedostatečný zůstatek na účtu";
                    pauza;
                Případ "ISV. TEMPLATE_PARAMS_ILLEGAL":
                    result = "Šablonové proměnné obsahují nelegální klíčová slova";
                    pauza;
            }
            Výsledek vrátit;
        }
    }

Partitura

Počet účastníků2MB+2 přispět+2 Zhroucení důvod
Malý hajzl + 1 + 1 Dej tomu palec nahoru
Admin + 1 + 1 Velmi silné!

Zobrazit všechna hodnocení





Předchozí:1000 budov je ručně malovaných a krásných
Další:Materiály bývalého japonského námořnictva a armády, PDF
Zveřejněno 02.12.2018 9:00:04 |
Zveřejněno 02.12.2018 10:19:01 |
Díky kódu od majitele posílejte SMS přes HTTP simulační příkazové rozhraní, nemusíte volat velkému dll, ale dáte palec nahoru
Zveřejněno 14.12.2018 16:03:21 |
Všichni jsou mistři
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com