Pirms kāda laika uzņēmumam bija projekts, kurā bija jāizmanto SMS paziņojumi, un tad es nopirku Alibaba Cloud SMS SMS saskarnes izstrādei. Bet projekts darbojas XP sistēmā, tāpēc projektam jābūt .NET3.5 ietvaram, bet Alibaba sniegto SMS DLL var izmantot tikai .net 4.0 un jaunākās versijās, kas ir ļoti apkaunojoši, par laimi Alibaba sniedza HTTP java piemēru, tāpēc es mēģināju uzrakstīt Alibaba Cloud HTTP izsaukšanas metodi C# saskaņā ar java kodu. Atgriezieties pie punkta, dodieties uz kodu! (Esmu publicējis arī CSDN, personības garantija nav pirātiska ziņa, paldies) publiskā klase SendShort { /// <summary> SMS interfeiss C# zvana metode /// </summary> <param name="url"></param> /// <returns></returns> publiskā statiskā virkne GetHtmlFormUrl(virknes URL) { virkne strRet = nulle; if (url == null || url. Apgriezt(). ToString() == "") { atgriezt strRet; } virkne targeturl = url. Apgriezt(). ToString(); izmēģināt { HttpWebRequest hr = (HttpWebRequest)WebRequest.Create(targeturl); hr. UserAgent = "Mozilla/4.0 (saderīgs; MSIE 6.0; Windows NT 5.1)"; hr. Metode = "GET"; hr. Taimauts = 30 * 60 * 1000; WebResponse hs = hr. Saņemt atbildi (); Straume sr = hs. GetResponseStream(); StreamReader ser = jauns StreamReader(sr, Encoding.Default); strRet = MessageHandle(ser. ReadToEnd()); } nozveja (izņēmums, piemēram) { strRet = "SMS nosūtīts neizdevās!" +piem. Ziņojums; } atgriezt strRet; } /// <summary> Pārbaudiet, vai mobilā tālruņa numurs ir likumīgs /// </summary> <param name="str_handset"></param> /// <returns></returns> publiskais statiskais bool IsHandset(virkne str_handset) { return System.Text.RegularExpressions.Regex.IsMatch(str_handset, @"^1[3|4|5|7|8][0-9]\d{8}$"); } /// <summary> SMS verifikācijas kods /// </summary> <param name="mobile"></param> <param name="code"></param> /// <returns></returns> publiskā statiskā virkne SignDemo(virkne mobilā, int kods) { string accessKeyId = "Jūsu accessKeyId "; string accessSecret = "jūsu accessSecret"; virkne nowDate = DateTime.Now.ToUniversalTime(). ToString("gggg-MM-dd'T'HH:mm:ss'Z'"); GTM laiks Vārdnīca<virkne, virkne> keyValues = jauna vārdnīca<virkne, virkne>(); Vārdnīcas deklarēšana 1. Sistēmas parametri keyValues.Add("SignatureMethod", "HMAC-SHA1"); keyValues.Add("SignatureNonce", Guid.NewGuid(). ToString()); keyValues.Add("AccessKeyId", accessKeyId); keyValues.Add("SignatureVersion", "1.0"); keyValues.Add("Laika zīmogs", nowDate); keyValues.Add("Formāts", "Json"); var aizstāt ar XML
2. Biznesa API parametri keyValues.Add("Darbība", "SendSms"); keyValues.Add("Versija", "2017-05-25"); keyValues.Add("RegionId", "cn-hangzhou"); keyValues.Add("Tālruņa numuri", mobilais); keyValues.Add("SignName", "Jūsu paraksts"); keyValues.Add("TemplateParam", "{\"code\":\"" + kods + "\"}"); keyValues.Add("Veidnes kods", "Jūsu veidnes numurs"); keyValues.Add("OutId", "123");
3. Noņemiet paraksta atslēgvārdu if (keyValues.ContainsKey("Paraksts")) { keyValues.Remove("Paraksts"); }
4. Parametru atslēgu kārtošana Vārdkas<virkne, virkne> ascDic = keyValues.OrderBy(o => o.Key). ToDictionary(o => o.Key, p => p.Value.ToString()); 5. Izveidojiet parakstāmo virkni StringBuilder veidotājs = jauns StringBuilder(); foreach (var vienums ascDic) { Ja (vienums. Atslēga == "SignName") {
} citādi { celtnieks. Pievienot ("&"). Append(specialUrlEncode(item. Atslēga)). Pievienot ("="). Append(specialUrlEncode(item. Vērtība)); } Ja (vienums. Atslēga == "RegionId") { celtnieks. Pievienot ("&"). Append(specialUrlEncode("SignName")). Pievienot ("="). Append(specialUrlEncode(keyValues["SignName"])); } } virkne sorteQueryString = veidotājs. ToString(). Apakšvirkne (1);
StringBuilder stringToSign = jauns StringBuilder(); stringToSign.Append("GET"). Pievienot ("&"); stringToSign.Append(specialUrlEncode("/")). Pievienot ("&"); stringToSign.Append(specialUrlEncode(sorteQueryString));
virkne Sign = MySign(accessSecret + "&", stringToSign.ToString()); 6. Parakstam jābūt kodētam arī ar īpašu URL beigās virknes signture = specialUrlEncode(Sign); Visbeidzot, izdrukājiet likumīgā GET pieprasījuma URL virknes url = "http://dysmsapi.aliyuncs.com/?Signature=" + signture + veidotājs; virknes rezultāts = GetHtmlFormUrl(url); atgriezt rezultātu; } /// <summary> URL kodējums /// </summary> <param name="value"></param> /// <returns></returns> publiskā statiskā virkne specialUrlEncode(virknes temp) {
StringBuilder stringBuilder = jauns StringBuilder(); for (int i = 0; Es < temp. Garums; i++) { virkne t = temp[i]. ToString(); virkne k = HttpUtility.UrlEncode(t, kodējums.UTF8); ja (t == k) { stringBuilder.Append(t); } citādi { stringBuilder.Append(k.ToUpper()); } } atgriezt stringBuilder.ToString(). Aizstāt("+", "%20"). Aizstāt("*", "%2A"). Aizstāt("%7E", "~"); } /// <summary> HMACSHA1 paraksts /// </summary> <param name="accessSecret"></param> <param name="stringToSign"></param> /// <returns></returns> publiskā statiskā virkne MySign(string accessSecret, stringToSign) { izmēģināt { var hmacsha1 = jauns HMACSHA1(Encoding.UTF8.GetBytes(accessSecret)); var dataBuffer = Kodējums.UTF8.GetBytes(stringToSign); var hashBytes = hmacsha1. ComputeHash(dataBuffer); virkne stringbyte = BitConverter.ToString(hashBytes, 0). Aizstāt("-", virkne. Tukšs). ToLower(); baits[] baiti = strToToHexByte(stringbyte); atgriezt Convert.ToBase64String(baiti); } nozveja (izņēmums, piemēram) {
mest bijušo; } } /// <summary> Virkne līdz 16 baitu masīvam /// </summary> <param name="hexString"></param> /// <returns></returns> privāts statisks baits[] strToToHexByte(virkne hexString) { hexString = hexString.Replace(" ", ""); if ((hexString.Length % 2) != 0) hexString += " "; baits[] returnBytes = jauns baits[hexString.Length / 2]; for (int i = 0; i < returnBytes.Length; i++) returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16); atgriezt returnBytes; } /// <summary> Ziņojumu apstrādes mehānismi /// </summary> <param name="str"></param> /// <returns></returns> privāta statiska virkne MessageHandle(virknes str) { MessageModel ziņojums = JsonConvert.DeserializeObject<MessageModel>(str); virknes rezultāts = ""; slēdzis (ziņojums. Kods) { gadījums "OK": rezultāts = "SMS nosūtīts veiksmīgi!"; pārtraukums; Lieta "ISP. RAM_PERMISSION_DENY": rezultāts = "RAM atļauja DENY"; pārtraukums; Lieta "ISV. OUT_OF_SERVICE": rezultāts = "Biznesa dīkstāve"; pārtraukums; Lieta "ISV. PRODUCT_UN_SUBSCRIPT": rezultāts = "Alibaba Cloud klienti, kuri nav atvēruši mākoņsakaru produktus"; pārtraukums; Lieta "ISV. PRODUCT_UNSUBSCRIBE": rezultāts = "Prece nav atvērta"; pārtraukums; Lieta "ISV. ACCOUNT_NOT_EXISTS": rezultāts = "Konts nepastāv"; pārtraukums; Lieta "ISV. ACCOUNT_ABNORMAL": rezultāts = "Konta izņēmums"; pārtraukums; gadījums "isv.SMS_TEMPLATE_ILLEGAL": rezultāts = "SMS veidne nav likumīga"; pārtraukums; gadījums "isv.SMS_SIGNATURE_ILLEGAL": rezultāts = "SMS paraksts nav likumīgs"; pārtraukums; Lieta "ISV. INVALID_PARAMETERS": rezultāts = "parametru izņēmums"; pārtraukums; Lieta "ISV. MOBILE_NUMBER_ILLEGAL": rezultāts = "nelegāls mobilā tālruņa numurs"; pārtraukums; Lieta "ISV. MOBILE_COUNT_OVER_LIMIT": rezultāts = "Mobilo tālruņu numuru skaits pārsniedz ierobežojumu"; pārtraukums; Lieta "ISV. TEMPLATE_MISSING_PARAMETERS": rezultāts = "veidnes trūkstošais mainīgais"; pārtraukums; Lieta "ISV. BUSINESS_LIMIT_CONTROL": rezultāts = "Biznesa pašreizējais"; pārtraukums; Lieta "ISV. INVALID_JSON_PARAM": rezultāts = "JSON parametrs nav likumīgs, tiek pieņemtas tikai virknes vērtības"; pārtraukums; Lieta "ISV. PARAM_LENGTH_LIMIT": rezultāts = "Parametrs pārsniedz garuma ierobežojumu"; pārtraukums; Lieta "ISV. PARAM_NOT_SUPPORT_URL": result = "URL netiek atbalstīts"; pārtraukums; Lieta "ISV. AMOUNT_NOT_ENOUGH": rezultāts = "Nepietiekams konta atlikums"; pārtraukums; Lieta "ISV. TEMPLATE_PARAMS_ILLEGAL": result = "Veidnes mainīgie satur nelikumīgus atslēgvārdus"; pārtraukums; } atgriezt rezultātu; } }
|