Mõni aeg tagasi oli ettevõttel projekt, mis pidi kasutama SMS-teavitusi, ja siis ostsin Alibaba Cloud SMS-i SMS-i SMS-liidese arendamiseks. Aga projekt töötab XP süsteemis, seega peab projekt olema .NET3.5 raamistik, kuid Alibaba antud SMS DLL-i saab kasutada ainult .net 4.0 ja uuemates versioonides, mis on väga piinlik, õnneks andis Alibaba HTTP jaoks näite Java kasutamisest, nii et proovisin kirjutada meetodi, kuidas kutsuda Alibaba Cloud HTTP C#-s Java koodi järgi. Tagasi asja juurde, mine koodi juurde! (Olen avaldanud ka CSDN-is, isiksuse garantii ei ole piraatpostitus, aitäh) avalik klass SendShort { /// <summary> SMS-liidese C# kõnemeetod /// </summary> <param name="URL"></param> /// <returns></returns> public static string GetHtmlFormUrl(string url) { string strRet = null; if (url == null || url. Trim(). ToString() == "") { return strRet; } string targeturl = URL. Trim(). ToString(); proovi { HttpWebRequest hr = (HttpWebRequest)WebRequest.Create(targeturl); HR. UserAgent = "Mozilla/4.0 (ühilduv; MSIE 6.0; Windows NT 5.1)"; HR. Meetod = "GET"; HR. Timeout = 30 * 60 * 1000; WebResponse hs = tund. GetResponse(); Voog sr = hs. GetResponseStream(); StreamReader ser = uus StreamReader(sr, Encoding.Default); strRet = MessageHandle(ser. ReadToEnd()); } catch (Exception ex) { strRet = "SMS saadetud ebaõnnestus!" +ex. Sõnum; } return strRet; } /// <summary> Kontrolli, et mobiilinumber on ehtne /// </summary> <param name="str_handset"></param> /// <returns></returns> public static bool IsHandset (string str_handset) { return System.Text.RegularExpressions.Regex.IsMatch(str_handset, @"^1[3|4|5|7|8][0-9]\d{8}$"); } /// <summary> SMS-i verifitseerimiskood /// </summary> <param name="mobiil"></param> <param name="kood"></param> /// <returns></returns> avalik staatiline string SignDemo(string mobile, int code) { string accessKeyId = "Sinu accessKeyId"; string accessSecret = "sinu accessSecret"; string nowDate = DateTime.Now.ToUniversalTime(). ToString("yyyy-MM-dd'T'HH:mm:ss'Z'"); GTM aeg Sõnastik<string, string> keyValues = uus sõnastik<string, string>(); Deklareeri sõnastik 1. Süsteemi parameetrid 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"); saab asendada XML-iga
2. Äri API parameetrid keyValues.Add("Tegevus", "SendSms"); keyValues.Add ("Versioon", "2017-05-25"); keyValues.Add("RegionId", "cn-hangzhou"); keyValues.Add("Telefoninumbrid", mobiil); keyValues.Add("SignName", "Sinu allkiri"); keyValues.Add("TemplateParam", "{\"code\":\"" + code + "\"}"); keyValues.Add("TemplateCode", "Teie mallinumber"); keyValues.Add("OutId", "123");
3. Eemalda signatuurmärksõna if (keyValues.ContainsKey("Signature")) { keyValues.Remove("Signatuur"); }
4. Parameetrite võtmete sorteerimine Sõnastik<string, string> ascDic = keyValues.OrderBy(o => o.Key). ToDictionary(o => o.Key, p => p.Value.ToString()); 5. Koosta signeeritav string StringBuilder builder = uus StringBuilder(); foreach (var ese ascDic-is) { kui (ese. Key == "SignName") {
} else { Ehitaja. Lisa ("&"). Append(specialUrlEncode(item. Võti)). Lisa ("="). Append(specialUrlEncode(item. Väärtus)); } kui (ese. Key == "RegionId") { Ehitaja. Lisa ("&"). Append(specialUrlEncode("SignName")). Lisa ("="). Append(specialUrlEncode(keyValues["SignName"])); } } string sorteQueryString = builder. ToString(). Alamstring(1);
StringBuilder stringToSign = uus StringBuilder(); stringToSign.Append("GET"). Append("&"); stringToSign.Append(specialUrlEncode("/")). Append("&"); stringToSign.Append(specialUrlEncode(sorteQueryString));
string Sign = MySign(accessSecret + "&", stringToSign.ToString()); 6. Allkiri tuleks samuti kodeerida spetsiaalse URL-iga lõpus string signture = specialUrlEncode(Sign); Lõpuks prindi välja legitiimse GET-päringu URL string URL = "http://dysmsapi.aliyuncs.com/?Signature=" + signture + builder; string result = GetHtmlFormUrl(url); tagastustulemus; } /// <summary> URL-kodeerimine /// </summary> <param name="väärtus"></param> /// <returns></returns> public static string specialUrlEncode(string temp) {
StringBuilder stringBuilder = uus StringBuilder(); for (int i = 0; Ma < ajutine. Pikkus; i++) { jada t = temperatuur[i]. ToString(); string k = HttpUtility.UrlEncode(t, Encoding.UTF8); kui (t == k) { stringBuilder.Append(t); } else { stringBuilder.Append(k.ToUpper()); } } return stringBuilder.ToString(). Replace("+", "%20"). Replace("*", "%2A"). Replace("%7E", "~"); } /// <summary> HMACSHA1 allkiri /// </summary> <param name="accessSecret"></param> <param name="stringToSign"></param> /// <returns></returns> public static string MySign(string accessSecret, string stringToSign) { proovi { 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("-", string. Tühi). ToLower(); byte[] baitid = strToHexByte(stringbyte); return Convert.ToBase64String(baidid); } catch (Exception ex) {
viska ex; } } /// <summary> String 16-baidisele massiivile /// </summary> <param name="hexString"></param> /// <returns></returns> privaatne staatiline bait[] strToHexByte(string hexString) { hexString = hexString.Replace(" ", ""); if ((hexString.Pikkus % 2) != 0) hexString += " "; byte[] returnBytes = uus bait[hexString.Pikkus / 2]; for (int i = 0; i < returnBytes.Length; i++) returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16); return returnBytes; } /// <summary> Sõnumite töötlemise mehhanismid /// </summary> <param name="str"></param> /// <returns></returns> privaatne staatiline string MessageHandle(string str) { MessageModel message = JsonConvert.DeserializeObject<MessageModel>(str); string result = ""; Switch (sõnum. Kood) { juhtum "OK": tulemus = "SMS saadeti edukalt!"; paus; Juhtum "ISP. RAM_PERMISSION_DENY": tulemus = "RAM-i loa keelamine"; paus; juhtum "ISV. OUT_OF_SERVICE": tulemus = "Ettevõtte seisaku"; paus; juhtum "ISV. PRODUCT_UN_SUBSCRIPT": tulemus = "Alibaba pilve kliendid, kes pole pilvekommunikatsiooni tooteid avanud"; paus; juhtum "ISV. PRODUCT_UNSUBSCRIBE": tulemus = "Toode ei avatud"; paus; juhtum "ISV. ACCOUNT_NOT_EXISTS": tulemus = "Konto ei eksisteeri"; paus; juhtum "ISV. ACCOUNT_ABNORMAL": tulemus = "Konto erand"; paus; juhtum "isv.SMS_TEMPLATE_ILLEGAL": tulemus = "SMS-mall ei ole seaduslik"; paus; juhtum "isv.SMS_SIGNATURE_ILLEGAL": tulemus = "SMS-allkiri ei ole seaduslik"; paus; juhtum "ISV. INVALID_PARAMETERS": tulemus = "parameetri erand"; paus; juhtum "ISV. MOBILE_NUMBER_ILLEGAL": tulemus = "ebaseaduslik mobiiltelefoninumber"; paus; juhtum "ISV. MOBILE_COUNT_OVER_LIMIT": tulemus = "Mobiilinumbrite arv ületab limiid"; paus; juhtum "ISV. TEMPLATE_MISSING_PARAMETERS": tulemus = "malli puuduv muutuja"; paus; juhtum "ISV. BUSINESS_LIMIT_CONTROL": tulemus = "Ärivool"; paus; juhtum "ISV. INVALID_JSON_PARAM": tulemus = "JSON parameeter ei ole legitiimne, aktsepteeritakse ainult stringiväärtusi"; paus; juhtum "ISV. PARAM_LENGTH_LIMIT": tulemus = "Parameeter ületab pikkuse piiri"; paus; juhtum "ISV. PARAM_NOT_SUPPORT_URL": tulemus = "URL ei toetata"; paus; juhtum "ISV. AMOUNT_NOT_ENOUGH": tulemus = "Konto jääk ebapiisav"; paus; juhtum "ISV. TEMPLATE_PARAMS_ILLEGAL": result = "Mallimuutujad sisaldavad ebaseaduslikke märksõnu"; paus; } tagastustulemus; } }
|