Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 14739|Svar: 3

[Gränssnitt] C# anropar inte Alibaba SMS dll, hur man använder http-gränssnittet för att skicka SMS

[Kopiera länk]
Publicerad på 2018-12-01 18:37:34 | | |
  För ett tag sedan hade företaget ett projekt som behövde använda SMS-notiser, och sedan köpte jag ett Alibaba Cloud SMS för utveckling av SMS-gränssnitt. Men projektet körs på XP-systemet, så projektet måste vara ramverket för .NET3.5, men SMS-DLL:n som ges av Alibaba kan bara användas i .NET 4.0 och uppåt, vilket är väldigt pinsamt, lyckligtvis gav Alibaba ett exempel på Java för HTTP, så jag försökte skriva metoden att anropa Alibaba Cloud HTTP i C# enligt java-koden. Tillbaka till saken, gå till koden! (Jag har också publicerat i CSDN, personlighetsgarantin är inte ett piratinlägg, tack)  
offentlig klass SendShort
    {
        /// <summary>
        SMS-gränssnittets C#-anropsmetod
        /// </summary>
        <param name="url"></param>
        /// <returns></returns>
        publik statisk sträng GetHtmlFormUrl(sträng-url)
        {
            sträng strRet = null;
            om (url == null || url. Trim(). ToString() == "")
            {
                återvänd strRet;
            }
            strängtargeturl = URL. Trim(). ToString();
            Försök
            {
                HttpWebRequest hr = (HttpWebRequest)WebRequest.Create(targeturl);
                HR. UserAgent = "Mozilla/4.0 (kompatibel; MSIE 6.0; Windows NT 5.1)";
                HR. Metod = "GET";
                HR. Timeout = 30 * 60 * 1000;
                WebResponse hs = timme. GetResponse();
                Stream sr = hs. GetResponseStream();
                StreamReader ser = ny StreamReader(sr, Encoding.Default);
                strRet = MessageHandle(ser. ReadToEnd());
            }
            catch (Undantag t.ex.)
            {
               strRet = "SMS skickat misslyckades!" +ex. Meddelande;
            }
            återvänd strRet;
        }
        /// <summary>
        Kontrollera att mobilnumret är legitimt
        /// </summary>
        <param name="str_handset"></param>
        /// <returns></returns>
        offentlig statisk bool IsHandset (sträng str_handset)
        {
            return System.Text.RegularExpressions.Regex.IsMatch(str_handset, @"^1[3|4|5|7|8][0-9]\d{8}$");
        }
        /// <summary>
        SMS-verifieringskod
        /// </summary>
        <param name="mobil"></param>
        <param name="code"></param>
        /// <returns></returns>
        publik statisk sträng SignDemo (sträng mobil, int-kod)
        {
            strängen accessKeyId = "Ditt accessKeyId";
            sträng accessSecret = "din accessSecret";
            sträng nowDate = DateTime.Now.ToUniversalTime(). ToString("yyyy-MM-dd'T'HH:mm:ss'Z'"); GTM-tid
            Dictionary<string, string> keyValues = ny Dictionary<string, string>(); Deklarera en ordbok
            1. Systemparametrar
            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"); kan ersättas med XML

            2. Affärs-API-parametrar
            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", "Your Template Number");
            keyValues.Add("OutId", "123");

            3. Ta bort signaturnyckelordet
            om (keyValues.ContainsKey("Signature"))
            {
                keyValues.Remove("Signatur");
            }

            4. Parameternyckelsortering
            Dictionary<string, string> ascDic = keyValues.OrderBy(o => o.Key). ToDictionary(o => o.Key, p => p.Value.ToString());
            5. Konstruera strängen som ska signeras
            StringBuilder builder = ny StringBuilder();
            foreach (var-objekt i ascDic)
            {
                om (föremål. Nyckel == "SignName")
                {

                }
                annars
                {
                    byggare. Append("&"). Append(specialUrlEncode(objekt. Nyckel)). Append("="). Append(specialUrlEncode(objekt. Värde));
                }
                om (föremål. Key == "RegionId")
                {
                    byggare. Append("&"). Append(specialUrlEncode("SignName")). Append("="). Append(specialUrlEncode(keyValues["SignName"]));
                }
            }
            sträng sorteQueryString = builder. ToString(). Understräng(1);

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

            string Sign = MySign(accessSecret + "&", stringToSign.ToString());
            6. Signaturen ska också kodas med en speciell URL i slutet
            strängsigntur = specialUrlEncode(Sign);
            Skriv slutligen ut URL:en till den legitima GET-förfrågan
            sträng-URL = "http://dysmsapi.aliyuncs.com/?Signature=" + signture + builder;
            strängresultat = GetHtmlFormUrl(url);
            återvändande resultat;
        }
        /// <summary>
        URL-kodning
        /// </summary>
        <param name="value"></param>
        /// <returns></returns>
        publik statisk sträng specialUrlEncode(strängtemperatur)
        {

            StringBuilder stringBuilder = ny StringBuilder();
            för (int i = 0; Jag < temp. Längd; i++)
            {
                sträng t = temp[i]. ToString();
                sträng k = HttpUtility.UrlEncode(t, Encoding.UTF8);
                om (t == k)
                {
                    stringBuilder.Append(t);
                }
                annars
                {
                    stringBuilder.Append(k.ToUpper());
                }
            }
            return stringBuilder.ToString(). Replace("+", "%20"). Replace("*", "%2A"). Replace("%7E", "~");
        }
        /// <summary>
        HMACSHA1 signatur
        /// </summary>
        <param name="accessSecret"></param>
        <param name="stringToSign"></param>
        /// <returns></returns>
        publik statisk sträng MySign (strängaccessSecret, sträng stringToSign)
        {
            Försök
            {
                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). Byt ut ("-", sträng. Tom). ToLower();
                byte[] bytes = strToToHexByte(stringbyte);
                returnera Convert.ToBase64String(bytes);
            }
            catch (Undantag t.ex.)
            {

                Kasta ex;
            }
        }
        /// <summary>
        Sträng till 16-bytes array
        /// </summary>
        <param name="hexString"></param>
        /// <returns></returns>
        privat statisk byte[] strToToHexByte(sträng hexString)
        {
            hexSträng = hexSträng.Ersätt(" ", "");
            om ((hexString.Length % 2) != 0)
                hexSträng += " ";
            byte[] returnBytes = ny byte[hexString.Length / 2];
            för (int i = 0; i < returnBytes.Length; i++)
                returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
            returnreturnBytes;
        }
        /// <summary>
        Meddelandebehandlingsmekanismer
        /// </summary>
        <param name="str"></param>
        /// <returns></returns>
        privat statisk sträng MessageHandle (sträng str)
        {
            MessageModel message = JsonConvert.DeserializeObject<MessageModel>(str);
            strängresultat = "";
            Switch (meddelande. Kod)
            {
                fall "OK":
                    resultat = "SMS skickat framgångsrikt!";
                    paus;
                Fall "ISP. RAM_PERMISSION_DENY":
                    resultat = "RAM-behörighet FÖRNEKAS";
                    paus;
                Fall "ISV. OUT_OF_SERVICE":
                    resultat = "Driftstopp";
                    paus;
                Fall "ISV. PRODUCT_UN_SUBSCRIPT":
                    resultat = "Alibaba Cloud-kunder som inte har öppnat molnkommunikationsprodukter";
                    paus;
                Fall "ISV. PRODUCT_UNSUBSCRIBE":
                    resultat = "Produkt ej öppnad";
                    paus;
                Fall "ISV. ACCOUNT_NOT_EXISTS":
                    resultat = "Kontot existerar inte";
                    paus;
                Fall "ISV. ACCOUNT_ABNORMAL":
                    resultat = "Kontoundantag";
                    paus;
                Fall "isv.SMS_TEMPLATE_ILLEGAL":
                    resultat = "SMS-mall är inte laglig";
                    paus;
                Fall "isv.SMS_SIGNATURE_ILLEGAL":
                    resultat = "SMS-signatur är inte laglig";
                    paus;
                Fall "ISV. INVALID_PARAMETERS":
                    resultat = "parameterundantag";
                    paus;
                Fall "ISV. MOBILE_NUMBER_ILLEGAL":
                    resultat = "olagligt mobilnummer";
                    paus;
                Fall "ISV. MOBILE_COUNT_OVER_LIMIT":
                    resultat = "Antal mobilnummer överskrider gränsen";
                    paus;
                Fall "ISV. TEMPLATE_MISSING_PARAMETERS":
                    resultat = "mall saknad variabel";
                    paus;
                Fall "ISV. BUSINESS_LIMIT_CONTROL":
                    resultat = "Affärsaktuell";
                    paus;
                Fall "ISV. INVALID_JSON_PARAM":
                    resultat = "JSON-parametern är inte legitim, endast strängvärden accepteras";
                    paus;
                Fall "ISV. PARAM_LENGTH_LIMIT":
                    resultat = "Parameter överskrider längdgränsen";
                    paus;
                Fall "ISV. PARAM_NOT_SUPPORT_URL":
                    resultat = "URL stöds ej";
                    paus;
                Fall "ISV. AMOUNT_NOT_ENOUGH":
                    resultat = "Otillräckligt kontosaldo";
                    paus;
                Fall "ISV. TEMPLATE_PARAMS_ILLEGAL":
                    resultat = "Mallvariabler innehåller olagliga nyckelord";
                    paus;
            }
            återvändande resultat;
        }
    }

Tjog

Antal deltagare2MB+2 bidra+2 Kollaps förnuft
Lilla avskum + 1 + 1 Ge tummen upp
Admin + 1 + 1 Mycket kraftfullt!

Se alla betyg





Föregående:1000 byggnader är handmålade och vackra
Nästa:Tidigare material från japanska flottan och armén, PDF
Publicerad på 2018-12-02 09:00:04 |
Publicerad på 2018-12-02 10:19:01 |
Tack vare koden som ägaren tillhandahåller, skicka SMS via HTTP-simuleringsgränssnittet, ingen anledning att kalla en stor dll, jag får tummen upp
Publicerad på 2018-12-14 16:03:21 |
De är alla mästare
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com