Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 14739|Odgovoriti: 3

[Vmesnik] C# ne kliče Alibaba SMS dll, kako uporabiti http vmesnik za pošiljanje SMS

[Kopiraj povezavo]
Objavljeno na 1. 12. 2018 18:37:34 | | |
  Pred časom je podjetje imelo projekt, ki je potreboval SMS obvestila, nato pa sem kupil Alibaba Cloud SMS za razvoj SMS vmesnika. Projekt pa teče na XP sistemu, zato mora biti projekt okvir .NET3.5, vendar je SMS DLL, ki ga ponuja Alibaba, mogoče uporabljati le v .net 4.0 in novejših, kar je zelo nerodno, na srečo je Alibaba dal primer jave za HTTP, zato sem poskušal napisati metodo klicanja Alibaba Cloud HTTP v C# glede na java kodo. Nazaj k bistvu, pojdi k kodi! (Objavil sem tudi na CSDN, garancija osebnosti ni piratska objava, hvala)  
javni razred SendShort
    {
        /// <summary>
        SMS vmesnik C# metoda klica
        /// </summary>
        <ime parametra="URL"></param>
        /// <returns></returns>
        javni statični niz GetHtmlFormUrl(string url)
        {
            string strRet = null;
            if (url == null || url. trim(). ToString() == "")
            {
                vračajoč strRet;
            }
            String targeturl = URL. trim(). ToString();
            poskusi
            {
                HttpWebRequest hr = (HttpWebRequest)WebRequest.Create(targeturl);
                hr. UserAgent = "Mozilla/4.0 (združljiv; MSIE 6.0; Windows NT 5.1)";
                hr. Metoda = "GET";
                hr. Timeout = 30 * 60 * 1000;
                WebResponse hs = uro. GetResponse();
                Tok sr = hs. GetResponseStream();
                StreamReader ser = novi StreamReader(sr, Encoding.Default);
                strRet = MessageHandle(ser. ReadToEnd());
            }
            ulov (Izjema ex)
            {
               strRet = "SMS poslan ni uspel!" +ex. Sporočilo;
            }
            vračajoč strRet;
        }
        /// <summary>
        Preverite, ali je mobilna številka legitimna
        /// </summary>
        <ime parametra="str_handset"></param>
        /// <returns></returns>
        javni statični 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 verifikacijska koda
        /// </summary>
        <ime parametra="mobilno"></param>
        <ime parametra="code"></param>
        /// <returns></returns>
        javni statični niz 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>(); Declare a dictionary
            1. Parametri sistema
            keyValues.Add("SignatureMethod", "HMAC-SHA1");
            keyValues.Add("SignatureNonce", Guid.NewGuid(). ToString());
            keyValues.Add("AccessKeyId", accessKeyId);
            keyValues.Add("SignatureVersion", "1.0");
            keyValues.Add("Časovni žig", nowDate);
            keyValues.Add("Format", "json"); ga je mogoče zamenjati z XML

            2. Parametri poslovnega API-ja
            keyValues.Add("Action", "SendSms");
            keyValues.Add("Version", "2017-05-25");
            keyValues.Add("RegionId", "cn-hangzhou");
            keyValues.Add("PhoneNumbers", mobilni);
            keyValues.Add("SignName", "Your Signature");
            keyValues.Add("TemplateParam", "{\"code\":\"" + code + "\"}");
            keyValues.Add("TemplateCode", "vaša številka predloge");
            keyValues.Add("OutId", "123");

            3. Odstranite podpisno ključno besedo
            if (keyValues.ContainsKey("Signature"))
            {
                keyValues.Reremove ("Signature");
            }

            4. Razvrščanje ključev s parametri
            Dictionary<string, string> ascDic = keyValues.OrderBy(o => o.Key). ToDictionary(o => o.Key, p => p.Value.ToString());
            5. Sestavi niz, ki ga je treba podpisati
            StringBuilder builder = novi StringBuilder();
            foreach (var element v ascDic)
            {
                če (predmet. Key == "SignName")
                {

                }
                else
                {
                    graditelj. Dodatek ("&"). Append(specialUrlEncode(item. Key)). Dodatek ("="). Append(specialUrlEncode(item. Vrednost));
                }
                če (predmet. Key == "RegionId")
                {
                    graditelj. Dodatek ("&"). Append(specialUrlEncode("SignName")). Dodatek ("="). Append(specialUrlEncode(keyValues["SignName"]));
                }
            }
            string sorteQueryString = graditelj. ToString(). Podniz(1);

            StringBuilder stringToSign = novi StringBuilder();
            stringToSign.Append("GET"). Dodatek ("&");
            stringToSign.Append(specialUrlEncode("/")). Dodatek ("&");
            stringToSign.Append(specialUrlEncode(sorteQueryString));

            string Sign = MySign(accessSecret + "&", stringToSign.ToString());
            6. Podpis naj bo prav tako kodiran s posebnim URL-jem na koncu
            string signture = specialUrlEncode(Sign);
            Na koncu natisnite URL legitimne GET zahteve
            string url = "http://dysmsapi.aliyuncs.com/?Signature=" + signture + builder;
            string result = GetHtmlFormUrl(url);
            vrni rezultat;
        }
        /// <summary>
        Kodiranje URL-jev
        /// </summary>
        <ime parametra="vrednost"></param>
        /// <returns></returns>
        public static string specialUrlEncode(string temp)
        {

            StringBuilder stringBuilder = novi StringBuilder();
            za (int i = 0; Jaz sem < začasni čas. Dolžina; i++)
            {
                struna t = temp[i]. ToString();
                string k = HttpUtility.UrlEncode(t, Encoding.UTF8);
                če (t == k)
                {
                    stringBuilder.Append(t);
                }
                else
                {
                    stringBuilder.Append(k.ToUpper());
                }
            }
            vrni stringBuilder.ToString(). Replace("+", "%20"). Replace("*", "%2A"). Replace("%7E", "~");
        }
        /// <summary>
        HMACSHA1 podpis
        /// </summary>
        <param name="accessSecret"></param>
        <ime parametra="stringToSign"></param>
        /// <returns></returns>
        javni statični niz MySign(string accessSecret, stringToSign)
        {
            poskusi
            {
                var hmacsha1 = new HMACSHA1(Encoding.UTF8.GetBytes(accessSecret));
                var dataBuffer = Encoding.UTF8.GetBytes(stringToSign);
                var hashBytes = hmacsha1. ComputeHash(dataBuffer);
                string stringbyte = BitConverter.ToString(hashBytes, 0). Replace("-", struna. Prazno). ToLower();
                bajt[] bajti = strToToHexByte(stringbyte);
                return Convert.ToBase64String(bajti);
            }
            ulov (Izjema ex)
            {

                Vrzi Ex;
            }
        }
        /// <summary>
        Niz v 16 bajtov
        /// </summary>
        <ime parametra="hexString"></param>
        /// <returns></returns>
        zasebni statični bajt[] strToToHexByte(string hexString)
        {
            hexString = hexString.Replace(" ", "");
            if ((hexString.Length % 2) != 0)
                hexString += " ";
            bajt[] returnBytes = novi bajt[hexString.Length / 2];
            za (int i = 0; i < returnBytes.Length; i++)
                returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
            return returnBytes;
        }
        /// <summary>
        Mehanizmi obdelave sporočil
        /// </summary>
        <ime parametra="str"></param>
        /// <returns></returns>
        zasebni statični niz MessageHandle(string str)
        {
            MessageModel message message = JsonConvert.DeserializeObject<MessageModel>(str);
            string result = "";
            Stikalo (sporočilo. Code)
            {
                primer "OK":
                    rezultat = "SMS poslan uspešno!";
                    premor;
                Primer "ISP. RAM_PERMISSION_DENY":
                    rezultat = "RAM dovoljenje zavrženo";
                    premor;
                Primer "ISV. OUT_OF_SERVICE":
                    rezultat = "Izpad poslovanja";
                    premor;
                Primer "ISV. PRODUCT_UN_SUBSCRIPT":
                    result = "Stranke Alibaba Cloud, ki še niso odprle oblačnih komunikacijskih produktov";
                    premor;
                Primer "ISV. PRODUCT_UNSUBSCRIBE":
                    rezultat = "Izdelek ni odprt";
                    premor;
                Primer "ISV. ACCOUNT_NOT_EXISTS":
                    rezultat = "Račun ne obstaja";
                    premor;
                Primer "ISV. ACCOUNT_ABNORMAL":
                    rezultat = "Izjema računa";
                    premor;
                Primer "isv.SMS_TEMPLATE_ILLEGAL":
                    result = "SMS predloga ni zakonita";
                    premor;
                Primer "isv.SMS_SIGNATURE_ILLEGAL":
                    result = "SMS podpis ni zakonit";
                    premor;
                Primer "ISV. INVALID_PARAMETERS":
                    rezultat = "izjema parametrov";
                    premor;
                Primer "ISV. MOBILE_NUMBER_ILLEGAL":
                    rezultat = "nezakonita mobilna telefonska številka";
                    premor;
                Primer "ISV. MOBILE_COUNT_OVER_LIMIT":
                    rezultat = "Število mobilnih številk presega mejo";
                    premor;
                Primer "ISV. TEMPLATE_MISSING_PARAMETERS":
                    rezultat = "manjkajoča spremenljivka predloge";
                    premor;
                Primer "ISV. BUSINESS_LIMIT_CONTROL":
                    rezultat = "Poslovni tok";
                    premor;
                Primer "ISV. INVALID_JSON_PARAM":
                    result = "JSON parameter ni legitimen, sprejemane so le vrednosti nizov";
                    premor;
                Primer "ISV. PARAM_LENGTH_LIMIT":
                    rezultat = "Parameter presega omejitev dolžine";
                    premor;
                Primer "ISV. PARAM_NOT_SUPPORT_URL":
                    result = "URL ni podprt";
                    premor;
                Primer "ISV. AMOUNT_NOT_ENOUGH":
                    rezultat = "Nezadostno stanje na računu";
                    premor;
                Primer "ISV. TEMPLATE_PARAMS_ILLEGAL":
                    result = "Predloge spremenljivk vsebujejo nelegalne ključne besede";
                    premor;
            }
            vrni rezultat;
        }
    }

Partitura

Število udeležencev2MB+2 prispevati+2 Propad razlog
Mala drhal + 1 + 1 Dajte palec gor
Admin + 1 + 1 Zelo močno!

Oglejte si vse ocene





Prejšnji:1000 stavb je ročno poslikanih in lepih
Naslednji:Nekdanji materiali japonske mornarice in vojske, PDF
Objavljeno na 2. 12. 2018 09:00:04 |
Objavljeno na 2. 12. 2018 10:19:01 |
Zahvaljujoč kodi, ki jo je zagotovil lastnik, pošlji SMS prek HTTP simulacijskega vmesnika za zahteve, ni treba klicati velikega dll-ja, daj ti palec gor
Objavljeno na 14. 12. 2018 16:03:21 |
Vsi so mojstri
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com