Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 14739|Svare: 3

[Grensesnitt] C# kaller ikke Alibaba SMS dll, hvordan bruke http-grensesnittet for å sende SMS

[Kopier lenke]
Publisert på 01.12.2018 18:37:34 | | |
  For en tid tilbake hadde selskapet et prosjekt som trengte å bruke SMS-varsler, og så kjøpte jeg en Alibaba Cloud SMS for utvikling av SMS-grensesnitt. Men prosjektet kjører på XP-systemet, så prosjektet må være rammeverket til .NET3.5, men SMS-DLL-en fra Alibaba kan bare brukes i .NET 4.0 og nyere, noe som er veldig pinlig, heldigvis ga Alibaba et eksempel på Java for HTTP, så jeg prøvde å skrive metoden for å kalle Alibaba Cloud HTTP i C# i henhold til Java-koden. Tilbake til poenget, gå til koden! (Jeg har også publisert i CSDN, Personality Guarantee er ikke et piratinnlegg, takk)  
offentlig klasse SendShort
    {
        /// <summary>
        SMS-grensesnitt C#-anropsmetode
        /// </summary>
        <param name="url"></param>
        /// <returns></returns>
        offentlig statisk streng GetHtmlFormUrl(streng-url)
        {
            streng strRet = null;
            hvis (URL == null || URL. Trim(). ToString() == "")
            {
                returner strRet;
            }
            String Targeturl = URL. Trim(). ToString();
            Prøv
            {
                HttpWebRequest hr = (HttpWebRequest)WebRequest.Create(targeturl);
                HR. UserAgent = "Mozilla/4.0 (kompatibel; MSIE 6.0; Windows NT 5.1)";
                HR. Metode = "GET";
                HR. Timeout = 30 * 60 * 1000;
                WebResponse hs = time. GetResponse();
                Stream sr = hs. GetResponseStream();
                StreamReader ser = ny StreamReader(sr, Encoding.Default);
                strRet = MessageHandle(ser. ReadToEnd());
            }
            catch (Unntak f.eks.)
            {
               strRet = "SMS sendt mislyktes!" +ex. Melding;
            }
            returner strRet;
        }
        /// <summary>
        Sjekk at mobilnummeret er legitimt
        /// </summary>
        <param name="str_handset"></param>
        /// <returns></returns>
        offentlig statisk bool IsHandset (streng str_handset)
        {
            return System.Text.RegularExpressions.Regex.IsMatch(str_handset, @"^1[3|4|5|7|8][0-9]\d{8}$");
        }
        /// <summary>
        SMS-verifiseringskode
        /// </summary>
        <param name="mobil"></param>
        <param name="kode"></param>
        /// <returns></returns>
        offentlig statisk streng SignDemo (streng mobil, int-kode)
        {
            strengen accessKeyId = "Din accessKeyId ";
            string accessSecret = "din accessSecret";
            streng nowDate = DateTime.Now.ToUniversalTime(). ToString("yyyy-MM-dd'T'HH:mm:ss'Z'"); GTM-tid
            Dictionary<string, string> keyValues = ny Dictionary<string, string>(); Erklær en ordbok
            1. Systemparametere
            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 erstattes med XML

            2. Forretnings-API-parametere
            keyValues.Add("Handling", "SendSms");
            keyValues.Add("Versjon", "2017-05-25");
            keyValues.Add("RegionId", "cn-hangzhou");
            keyValues.Add("PhoneNumbers", mobil);
            keyValues.Add("SignName", "Your Signature");
            keyValues.Add("TemplateParam", "{\"kode\":\"" + kode + "\"}");
            keyValues.Add("TemplateCode", "Your Template Number");
            keyValues.Add("OutId", "123");

            3. Fjern signaturnøkkelordet
            hvis (keyValues.ContainsKey("Signature"))
            {
                keyValues.Remove("Signatur");
            }

            4. Parameternøkkelsortering
            Dictionary<string, string> ascDic = keyValues.OrderBy(o => o.Key). ToDictionary(o => o.Key, p => p.Value.ToString());
            5. Konstruer strengen som skal signeres
            StringBuilder builder = ny StringBuilder();
            foreach (var-element i ascDic)
            {
                hvis (element. Nøkkel == "SignName")
                {

                }
                ellers
                {
                    Byggmester. Append("&"). Append(specialUrlEncode(item. Nøkkel)). Append("="). Append(specialUrlEncode(item. Verdi));
                }
                hvis (element. Key == "RegionId")
                {
                    Byggmester. Append("&"). Append(specialUrlEncode("SignName")). Append("="). Append(specialUrlEncode(keyValues["SignName"]));
                }
            }
            string sorteQueryString = builder. ToString(). Understreng(1);

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

            streng Sign = MySign(accessSecret + "&", stringToSign.ToString());
            6. Signaturen bør også kodes med en spesiell URL på slutten
            strengsignering = specialUrlEncode(Sign);
            Til slutt, skriv ut URL-en til den legitime GET-forespørselen
            streng-URL = "http://dysmsapi.aliyuncs.com/?Signature=" + signture + builder;
            strengresultat = GetHtmlFormUrl(url);
            returresultat;
        }
        /// <summary>
        URL-koding
        /// </summary>
        <param name="value"></param>
        /// <returns></returns>
        offentlig statisk streng spesialUrlEncode(streng temp)
        {

            StringBuilder stringBuilder = ny StringBuilder();
            for (int i = 0; Jeg < midlertidig. Lengde; i++)
            {
                streng t = temp[i]. ToString();
                streng k = HttpUtility.UrlEncode(t, Encoding.UTF8);
                hvis (t == k)
                {
                    stringBuilder.Append(t);
                }
                ellers
                {
                    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>
        offentlig statisk streng MySign(streng accessSecret, streng stringToSign)
        {
            Prøv
            {
                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("-", streng. Tom). ToLower();
                byte[] bytes = strToToHexByte(stringbyte);
                return Convert.ToBase64String(bytes);
            }
            catch (Unntak f.eks.)
            {

                kast eks;
            }
        }
        /// <summary>
        Streng til 16-byte array
        /// </summary>
        <param name="hexString"></param>
        /// <returns></returns>
        privat statisk byte[] strToToHexByte(streng hexString)
        {
            hexString = hexString.Replace(" ", "");
            hvis ((hexString.Length % 2) != 0)
                hexString += " ";
            byte[] returnBytes = ny byte[hexString.Length / 2];
            for (int i = 0; i < returnBytes.Length; i++)
                returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
            return returnBytes;
        }
        /// <summary>
        Meldingsbehandlingsmekanismer
        /// </summary>
        <param name="str"></param>
        /// <returns></returns>
        privat statisk streng MessageHandle (streng str)
        {
            MessageModel message = JsonConvert.DeserializeObject<MessageModel>(str);
            strengresultat = "";
            Switch (melding. Kode)
            {
                tilfelle "OK":
                    resultat = "SMS sendt vellykket!";
                    pause;
                Case "ISP. RAM_PERMISSION_DENY":
                    resultat = "RAM-tillatelse NEKTER";
                    pause;
                Sak "ISV. OUT_OF_SERVICE":
                    resultat = "Forretningsnedetid";
                    pause;
                Sak "ISV. PRODUCT_UN_SUBSCRIPT":
                    resultat = "Alibaba Cloud-kunder som ikke har åpnet skybaserte kommunikasjonsprodukter";
                    pause;
                Sak "ISV. PRODUCT_UNSUBSCRIBE":
                    resultat = "Produkt ikke åpnet";
                    pause;
                Sak "ISV. ACCOUNT_NOT_EXISTS":
                    resultat = "Konto eksisterer ikke";
                    pause;
                Sak "ISV. ACCOUNT_ABNORMAL":
                    resultat = "Kontounntak";
                    pause;
                Tilfelle "isv.SMS_TEMPLATE_ILLEGAL":
                    resultat = "SMS-mal er ikke lovlig";
                    pause;
                tilfelle "isv.SMS_SIGNATURE_ILLEGAL":
                    resultat = "SMS-signatur er ikke lovlig";
                    pause;
                Sak "ISV. INVALID_PARAMETERS":
                    resultat = "parameterunntak";
                    pause;
                Sak "ISV. MOBILE_NUMBER_ILLEGAL":
                    resultat = "ulovlig mobiltelefonnummer";
                    pause;
                Sak "ISV. MOBILE_COUNT_OVER_LIMIT":
                    resultat = "Antall mobilnumre overstiger grensen";
                    pause;
                Sak "ISV. TEMPLATE_MISSING_PARAMETERS":
                    resultat = "mal mangler variabel";
                    pause;
                Sak "ISV. BUSINESS_LIMIT_CONTROL":
                    resultat = "Forretningsstrøm";
                    pause;
                Sak "ISV. INVALID_JSON_PARAM":
                    resultat = "JSON-parameteren er ikke legitim, kun strengverdier aksepteres";
                    pause;
                Sak "ISV. PARAM_LENGTH_LIMIT":
                    resultat = "Parameter overstiger lengdegrensen";
                    pause;
                Sak "ISV. PARAM_NOT_SUPPORT_URL":
                    resultat = "URL ikke støttet";
                    pause;
                Sak "ISV. AMOUNT_NOT_ENOUGH":
                    resultat = "Utilstrekkelig kontosaldo";
                    pause;
                Sak "ISV. TEMPLATE_PARAMS_ILLEGAL":
                    resultat = "Malvariabler inneholder ulovlige nøkkelord";
                    pause;
            }
            returresultat;
        }
    }

Score

Antall deltakere2MB+2 bidra+2 Sammenbrudd grunn
Lille skurk + 1 + 1 Gi det tommel opp
Admin + 1 + 1 Veldig kraftig!

Se alle vurderinger





Foregående:1000 bygninger er håndmalte og vakre
Neste:Tidligere japansk marine- og hærmateriale, PDF
Publisert på 02.12.2018 09:00:04 |
Publisert på 02.12.2018 10:19:01 |
Takket være koden fra eieren, send SMS via HTTP-simuleringsgrensesnittet, det er ikke nødvendig å kalle en stor dll, gir deg tommel opp
Publisert på 14.12.2018 16:03:21 |
De er alle mestre
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com