Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 14739|Vastaus: 3

[Käyttöliittymä] C# ei kutsu Alibaba SMS dll:ää, miten käyttää http-rajapintaa SMS:n lähettämiseen

[Kopioi linkki]
Julkaistu 1.12.2018 18.37.34 | | |
  Jonkin aikaa sitten yrityksellä oli projekti, jossa piti käyttää SMS-ilmoituksia, ja sitten ostin Alibaba Cloud -SMS:n SMS-käyttöliittymän kehittämiseen. Mutta projekti pyörii XP-järjestelmällä, joten projektin täytyy olla .NET3.5:n kehys, mutta Alibaban antama SMS DLL sopii vain .net 4.0:ssa ja uudemmissa versioissa, mikä on hyvin noloa. Onneksi Alibaba antoi esimerkin Javasta HTTP:lle, joten yritin kirjoittaa menetelmän, jossa kutsutaan Alibaba Cloud HTTP:tä C#:lla java-koodin mukaan. Takaisin asiaan, mene koodiin! (Olen myös julkaissut CSDN:ssä, persoonallisuustakuu ei ole piraattipostaus, kiitos)  
julkinen luokka SendShort
    {
        /// <summary>
        SMS-rajapinnan C#-kutsumenetelmä
        /// </summary>
        <param name="URL"></param>
        /// <returns></returns>
        public static string GetHtmlFormUrl(string url)
        {
            string strRet = null;
            if (url == null || url. Trim(). ToString() == "")
            {
                return strRet;
            }
            string targeturl = url. Trim(). ToString();
            yritä
            {
                HttpWebRequest hr = (HttpWebRequest)WebRequest.Create(targeturl);
                HR. UserAgent = "Mozilla/4.0 (yhteensopiva; MSIE 6.0; Windows NT 5.1)";
                HR. Metodi = "GET";
                HR. Aikalisä = 30 * 60 * 1000;
                WebResponse hs = tunti. GetResponse();
                Virta sr = hs. GetResponseStream();
                StreamReader ser = uusi StreamReader(sr, Encoding.Default);
                strRet = MessageHandle(ser. ReadToEnd());
            }
            catch (poikkeus esim.)
            {
               strRet = "SMS lähetetty epäonnistui!" +ex. Viesti;
            }
            return strRet;
        }
        /// <summary>
        Varmista, että matkapuhelinnumero on aito
        /// </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-vahvistuskoodi
        /// </summary>
        <param name="mobiili"></param>
        <param name="code"></param>
        /// <returns></returns>
        julkinen staattinen merkkijono SignDemo(string mobile, int code)
        {
            string accessKeyId = "Sinun accessKeyId";
            string accessSecret = "your accessSecret";
            string nowDate = DateTime.Now.ToUniversalTime(). ToString("yyyy-MM-dd'T'HH:mm:ss'Z'"); GTM-aika
            Sanakirja<merkkijono, merkkijono> keyValues = uusi sanakirja<merkkijono, merkkijono>(); Ilmoita sanakirja
            1. Järjestelmän parametrit
            keyValues.Add("SignatureMethod", "HMAC-SHA1");
            keyValues.Add("SignatureNonce", Guid.NewGuid(). ToString());
            keyValues.Add("AccessKeyId", accessKeyId);
            keyValues.Add("SignatureVersion", "1.0");
            keyValues.Add("Aikaleima", nowDate);
            keyValues.Add("Format", "Json"); voidaan korvata XML:llä

            2. Liiketoiminnan API-parametrit
            keyValues.Add("Toiminto", "SendSms");
            keyValues.Add ("Versio", "2017-05-25");
            keyValues.Add("RegionId", "cn-hangzhou");
            keyValues.Add("Puhelinnumerot", matkapuhelin);
            keyValues.Add ("SignName", "Your Signature");
            keyValues.Add("TemplateParam", "{\"code\":\"" + code + "\"}");
            keyValues.Add("TemplateCode", "Mallinumerosi");
            keyValues.Add("OutId", "123");

            3. Poista allekirjoitusavainsana
            if (keyValues.ContainsKey("Signature"))
            {
                keyValues.Remove("Allekirjoitus");
            }

            4. Parametrien avainlajittelu
            Sanakirja<merkkijono, merkkijono> ascDic = keyValues.OrderBy(o => o.Key). ToDictionary(o => o.Key, p => p.Value.ToString());
            5. Rakenna merkkijono, joka allekirjoitetaan
            StringBuilder builder = uusi StringBuilder();
            foreach (var-kohde ascDicissa)
            {
                if (kohde. Key == "SignName")
                {

                }
                else
                {
                    rakentaja. Append("&"). Append(specialUrlEncode(item. Avain)). Append("="). Append(specialUrlEncode(item. Arvo));
                }
                if (kohde. Key == "RegionId")
                {
                    rakentaja. Append("&"). Append(specialUrlEncode("SignName")). Append("="). Append(specialUrlEncode(keyValues["SignName"]));
                }
            }
            string sorteQueryString = builder. ToString(). Alajono(1);

            StringBuilder stringToSign = uusi StringBuilder();
            stringToSign.Append("GET"). Liite("&");
            stringToSign.Append(specialUrlEncode("/")). Liite("&");
            stringToSign.Append(specialUrlEncode(sorteQueryString));

            merkki = MySign(accessSecret + "&", stringToSign.ToString());
            6. Allekirjoitus tulisi myös koodata erityisellä URL-osoitteella lopussa
            merkkijonosignture = specialUrlEncode(Sign);
            Lopuksi tulosta laillisen GET-pyynnön URL-osoite
            merkkijonon url = "http://dysmsapi.aliyuncs.com/?Signature=" + signture + builder;
            merkkijonon tulos = GetHtmlFormUrl(url);
            palautustulos;
        }
        /// <summary>
        URL-koodaus
        /// </summary>
        <param name="value"></param>
        /// <returns></returns>
        public static string specialUrlEncode(string temp)
        {

            StringBuilder stringBuilder = uusi StringBuilder();
            kun (int i = 0; Minulla < väliaikainen. Pituus; i++)
            {
                merkkijono t = lämpötila[i]. ToString();
                merkkijono k = HttpUtility.UrlEncode(t, Encoding.UTF8);
                jos (t == k)
                {
                    stringBuilder.Append(t);
                }
                else
                {
                    stringBuilder.Append(k.ToUpper());
                }
            }
            return stringBuilder.ToString(). Replace("+", "%20"). Replace("*", "%2A"). Replace("%7E", "~");
        }
        /// <summary>
        HMACSHA1 allekirjoitus
        /// </summary>
        <param name="accessSecret"></param>
        <param name="stringToSign"></param>
        /// <returns></returns>
        public static string MySign(string accessSecret, string stringToSign)
        {
            yritä
            {
                var hmacsha1 = uusi HMACSHA1(Encoding.UTF8.GetBytes(accessSecret));
                var dataBuffer = Encoding.UTF8.GetBytes(stringToSign);
                var hashBytes = hmacsha1. ComputeHash(dataBuffer);
                string stringbyte = BitConverter.ToString(hashBytes, 0). Replace("-", string. Tyhjä). ToLower();
                byte[] bytes = strToToHexByte(stringbyte);
                return Convert.ToBase64String(tavut);
            }
            catch (poikkeus esim.)
            {

                heitä ex;
            }
        }
        /// <summary>
        Merkkijono 16 tavun taulukkoon
        /// </summary>
        <param name="hexString"></param>
        /// <returns></returns>
        yksityinen staattinen tavu[] strToHexByte(merkkijono, hexString)
        {
            hexString = hexString.Replace(" ", "");
            if ((hexString.Pituus % 2) != 0)
                hexString += " ";
            byte[] returnBytes = new byte[hexString.Length / 2];
            kun (int i = 0; i < returnBytes.Length; i++)
                returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
            return returnBytes;
        }
        /// <summary>
        Viestinkäsittelymekanismit
        /// </summary>
        <param name="str"></param>
        /// <returns></returns>
        yksityinen staattinen merkkijono MessageHandle(merkkijonon voima)
        {
            MessageModel-viesti = JsonConvert.DeserializeObject<MessageModel>(str);
            merkkijonon tulos = "";
            Switch (viesti. Koodi)
            {
                tapaus "OK":
                    result = "SMS lähetetty onnistui!";
                    tauko;
                tapaus "ISP. RAM_PERMISSION_DENY":
                    result = "RAM-käyttöoikeuksien hylkääminen";
                    tauko;
                tapaus "ISV. OUT_OF_SERVICE":
                    result = "Liiketoiminnan seisokki";
                    tauko;
                tapaus "ISV. PRODUCT_UN_SUBSCRIPT":
                    result = "Alibaba Cloudin asiakkaat, jotka eivät ole avanneet pilviviestintätuotteita";
                    tauko;
                tapaus "ISV. PRODUCT_UNSUBSCRIBE":
                    tulos = "Tuote ei avattu";
                    tauko;
                tapaus "ISV. ACCOUNT_NOT_EXISTS":
                    result = "Tiliä ei ole olemassa";
                    tauko;
                tapaus "ISV. ACCOUNT_ABNORMAL":
                    result = "Tilin poikkeus";
                    tauko;
                tapaus "isv.SMS_TEMPLATE_ILLEGAL":
                    tulos = "SMS-malli ei ole laillinen";
                    tauko;
                Tapaus "isv.SMS_SIGNATURE_ILLEGAL":
                    result = "SMS-allekirjoitus ei ole laillinen";
                    tauko;
                tapaus "ISV. INVALID_PARAMETERS":
                    tulos = "parametripoikkeus";
                    tauko;
                tapaus "ISV. MOBILE_NUMBER_ILLEGAL":
                    tulos = "laiton matkapuhelinnumero";
                    tauko;
                tapaus "ISV. MOBILE_COUNT_OVER_LIMIT":
                    result = "Matkapuhelinnumeroiden määrä ylittää rajan";
                    tauko;
                tapaus "ISV. TEMPLATE_MISSING_PARAMETERS":
                    tulos = "mallipohja puuttuva muuttuja";
                    tauko;
                tapaus "ISV. BUSINESS_LIMIT_CONTROL":
                    tulos = "Business Current";
                    tauko;
                tapaus "ISV. INVALID_JSON_PARAM":
                    result = "JSON-parametri ei ole legitiimi, hyväksytään vain merkkijonoarvot";
                    tauko;
                tapaus "ISV. PARAM_LENGTH_LIMIT":
                    result = "Parametri ylittää pituusrajan";
                    tauko;
                tapaus "ISV. PARAM_NOT_SUPPORT_URL":
                    result = "URL ei tuettu";
                    tauko;
                tapaus "ISV. AMOUNT_NOT_ENOUGH":
                    result = "Riittämätön tilisaldo";
                    tauko;
                tapaus "ISV. TEMPLATE_PARAMS_ILLEGAL":
                    result = "Mallimuuttujat sisältävät laittomia avainsanoja";
                    tauko;
            }
            palautustulos;
        }
    }

Pistetilanne

Osallistujien määrä2MB+2 myötävaikuttaa+2 Romahdus syy
Pikku roisto + 1 + 1 Näytä peukku ylös
Admin + 1 + 1 Erittäin voimakas!

Katso kaikki arviot





Edellinen:1000 rakennusta on käsinmaalattuja ja kauniita
Seuraava:Entiset Japanin laivaston ja armeijan materiaalit, PDF
Julkaistu 2.12.2018 9.00.04 |
Julkaistu 2.12.2018 10.19.01 |
Omistajan antaman koodin ansiosta lähetä SMS-viestit HTTP-simulaatiopyyntöliittymän kautta, ei tarvitse kutsua suurta DLL:ää, saat peukkua ylös
Julkaistu 14.12.2018 16.03.21 |
He ovat kaikki mestareita
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com