|
|
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
-
Se alle vurderinger
Foregående:1000 bygninger er håndmalte og vakreNeste:Tidligere japansk marine- og hærmateriale, PDF
|