Prieš kurį laiką įmonė turėjo projektą, kuriame reikėjo naudoti SMS pranešimus, o tada nusipirkau "Alibaba Cloud SMS" SMS sąsajos kūrimui. Bet projektas veikia XP sistemoje, todėl projektas turi būti .NET3.5 sistema, tačiau "Alibaba" pateiktas SMS DLL gali būti naudojamas tik .net 4.0 ir naujesnėse versijose, o tai yra labai gėdinga, laimei, "Alibaba" pateikė "Java" pavyzdį HTTP, todėl bandžiau parašyti "Alibaba Cloud HTTP" iškvietimo būdą C# pagal "Java" kodą. Grįžkite prie esmės, eikite į kodą! (Aš taip pat paskelbė CSDN, asmenybės garantija nėra piratinis paštu, ačiū) viešoji klasė SendShort { /// <summary> SMS sąsaja C# skambučio metodas /// </summary> <param name="url"></param> /// <returns></returns> viešoji statinė eilutė GetHtmlFormUrl(eilutės URL) { string strRet = null; if (url == null || url. Trim(). ToString() == "") { grąžinti strRet; } eilutės targeturl = url. Trim(). ToString(); Pabandykite { HttpWebRequest hr = (HttpWebRequest)WebRequest.Create(targeturl); val. UserAgent = "Mozilla/4.0 (suderinamas; MSIE 6.0; Windows NT 5.1)"; val. Metodas = "GET"; val. Skirtasis laikas = 30 * 60 * 1000; WebResponse hs = val. GetResponse(); Srautas sr = hs. GetResponseStream(); StreamReader ser = naujas StreamReader(sr, Encoding.Default); strRet = MessageHandle(ser. ReadToEnd()); } laimikis (išimtis ex) { strRet = "SMS išsiųsta nepavyko!" +pvz. Žinutė; } grąžinti strRet; } /// <summary> Patikrinkite, ar mobiliojo telefono numeris yra teisėtas /// </summary> <param name="str_handset"></param> /// <returns></returns> viešas statinis bool IsHandset(eilutė str_handset) { return System.Text.RegularExpressions.Regex.IsMatch(str_handset, @"^1[3|4|5|7|8][0-9]\d{8}$"); } /// <summary> SMS patvirtinimo kodas /// </summary> <param name="mobile"></param> <param name="code"></param> /// <returns></returns> viešoji statinė eilutė SignDemo (eilutė mobilusis, int kodas) { string accessKeyId = "Jūsų accessKeyId "; string accessSecret = "jūsų accessSecret"; eilutė nowDate = DateTime.Now.ToUniversalTime(). ToString("yyyy-MM-dd'T'HH:mm:ss'Z'"); GTM laikas Žodynas<eilutė, eilutė> keyValues = naujas Žodynas<eilutė, eilutė>(); Žodyno paskelbimas 1. Sistemos parametrai keyValues.Add("SignatureMethod", "HMAC-SHA1"); keyValues.Add("SignatureNonce", Guid.NewGuid(). ToString()); keyValues.Add("AccessKeyId", accessKeyId); keyValues.Add("SignatureVersion", "1.0"); keyValues.Add("Laiko žyma", nowDate); keyValues.Add("Formatas", "Json"); gali būti pakeistas XML
2. Verslo API parametrai keyValues.Add("Veiksmas", "SendSms"); keyValues.Add("Versija", "2017-05-25"); keyValues.Add("RegionId", "cn-hangzhou"); keyValues.Add("Telefono numeriai", mobilusis); keyValues.Add("SignName", "Jūsų parašas"); keyValues.Add("TemplateParam", "{\"code\":\"" + kodas + "\"}"); keyValues.Add("Šablono kodas", "Jūsų šablono numeris"); keyValues.Add("OutId", "123");
3. Pašalinkite parašo raktažodį if (keyValues.ContainsKey("Parašas")) { keyValues.Remove("Parašas"); }
4. Parametrų raktų rūšiavimas Žodynas<eilutė, eilutė> ascDic = keyValues.OrderBy(o => o.Key). ToDictionary(o => o.Key, p => p.Value.ToString()); 5. Sukonstruokite eilutę, kurią norite pasirašyti StringBuilder kūrėjas = naujas StringBuilder(); foreach (var elementas ascDic) { jei (elementas. Key == "SignName") {
} kitaip { statybininkas. Pridėti ("&"). Append(specialUrlEncode(item. Raktas)). Pridėti ("="). Append(specialUrlEncode(item. Vertė)); } jei (elementas. Raktas == "RegionId") { statybininkas. Pridėti ("&"). Append(specialUrlEncode("SignName")). Pridėti ("="). Append(specialUrlEncode(keyValues["SignName"])); } } eilutė sorteQueryString = builder. ToString(). Papildoma eilutė (1);
StringBuilder stringToSign = naujas StringBuilder(); stringToSign.Append("GET"). Pridėti ("&"); stringToSign.Append(specialUrlEncode("/")). Pridėti ("&"); stringToSign.Append(specialUrlEncode(sorteQueryString));
eilutės ženklas = MySign(accessSecret + "&", stringToSign.ToString()); 6. Parašas taip pat turėtų būti užkoduotas specialiu URL pabaigoje eilutės signture = specialUrlEncode(Sign); Galiausiai atsispausdinkite teisėtos GET užklausos URL eilutės url = "http://dysmsapi.aliyuncs.com/?Signature=" + signture + builder; eilutės rezultatas = GetHtmlFormUrl(url); grąžinti rezultatą; } /// <summary> URL kodavimas /// </summary> <param name="value"></param> /// <returns></returns> viešoji statinė eilutė specialUrlEncode(eilutės temp) {
StringBuilder stringBuilder = naujas StringBuilder(); for (int i = 0; I < temp. Ilgis; i++) { eilutė t = temp[i]. ToString(); eilutė k = HttpUtility.UrlEncode(t, Encoding.UTF8); if (t == k) { stringBuilder.Append(t); } kitaip { stringBuilder.Append(k.ToUpper()); } } return stringBuilder.ToString(). Pakeisti("+", "%20"). Pakeisti("*", "%2A"). Pakeisti("%7E", "~"); } /// <summary> HMACSHA1 parašas /// </summary> <param name="accessSecret"></param> <param name="stringToSign"></param> /// <returns></returns> viešoji statinė eilutė MySign(string accessSecret, string stringToSign) { Pabandykite { var hmacsha1 = naujas HMACSHA1(Encoding.UTF8.GetBytes(accessSecret)); var dataBuffer = Encoding.UTF8.GetBytes(stringToSign); var hashBytes = hmacsha1. ComputeHash(dataBuffer); eilutė stringbyte = BitConverter.ToString(hashBytes, 0). Pakeisti ("-", eilutę. Tuščia). ToLower(); baitas[] baitai = strToToHexByte(stringbyte); grąžinti Convert.ToBase64String(baitai); } laimikis (išimtis ex) {
mesti ex; } } /// <summary> Eilutė į 16 baitų masyvą /// </summary> <param name="hexString"></param> /// <returns></returns> privatus statinis baitas[] strToToHexByte(eilutė hexString) { hexString = hexString.Replace(" ", ""); if ((hexString.Length % 2) != 0) hexString += " "; baitas[] returnBytes = naujas baitas[hexString.Length / 2]; for (int i = 0; i < returnBytes.Length; i++) returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16); grąžinti returnBytes; } /// <summary> Pranešimų apdorojimo mechanizmai /// </summary> <param name="str"></param> /// <returns></returns> privati statinė eilutė MessageHandle(eilutės str) { MessageModel pranešimas = JsonConvert.DeserializeObject<MessageModel>(str); eilutės rezultatas = ""; jungiklis (pranešimas. Kodas) { atvejis "Gerai": rezultatas = "SMS išsiųsta sėkmingai!"; pertrauka; atvejis "IPT. RAM_PERMISSION_DENY": rezultatas = "RAM leidimas DENY"; pertrauka; Byla "ISV. OUT_OF_SERVICE": rezultatas = "Verslo prastova"; pertrauka; Byla "ISV. PRODUCT_UN_SUBSCRIPT": rezultatas = "Alibaba Cloud klientai, kurie neatidarė debesijos ryšio produktų"; pertrauka; Byla "ISV. PRODUCT_UNSUBSCRIBE": rezultatas = "Produktas neatidarytas"; pertrauka; Byla "ISV. ACCOUNT_NOT_EXISTS": result = "Sąskaitos nėra"; pertrauka; Byla "ISV. ACCOUNT_ABNORMAL": result = "Paskyros išimtis"; pertrauka; atvejis "isv.SMS_TEMPLATE_ILLEGAL": rezultatas = "SMS šablonas nėra legalus"; pertrauka; atvejis "isv.SMS_SIGNATURE_ILLEGAL": rezultatas = "SMS parašas nėra teisėtas"; pertrauka; Byla "ISV. INVALID_PARAMETERS": rezultatas = "parametro išimtis"; pertrauka; Byla "ISV. MOBILE_NUMBER_ILLEGAL": rezultatas = "neteisėtas mobiliojo telefono numeris"; pertrauka; Byla "ISV. MOBILE_COUNT_OVER_LIMIT": result = "Mobiliojo ryšio numerių skaičius viršija limitą"; pertrauka; Byla "ISV. TEMPLATE_MISSING_PARAMETERS": rezultatas = "trūksta šablono kintamojo"; pertrauka; Byla "ISV. BUSINESS_LIMIT_CONTROL": rezultatas = "Dabartinis verslas"; pertrauka; Byla "ISV. INVALID_JSON_PARAM": result = "JSON parametras nėra teisėtas, priimamos tik eilutės reikšmės"; pertrauka; Byla "ISV. PARAM_LENGTH_LIMIT": result = "Parametras viršija ilgio ribą"; pertrauka; Byla "ISV. PARAM_NOT_SUPPORT_URL": result = "URL nepalaikomas"; pertrauka; Byla "ISV. AMOUNT_NOT_ENOUGH": rezultatas = "Nepakankamas sąskaitos likutis"; pertrauka; Byla "ISV. TEMPLATE_PARAMS_ILLEGAL": result = "Šablono kintamuosiuose yra neleistinų raktažodžių"; pertrauka; } grąžinti rezultatą; } }
|