|
|
Publicerad på 2018-12-01 18:37:34
|
|
|

För ett tag sedan hade företaget ett projekt som behövde använda SMS-notiser, och sedan köpte jag ett Alibaba Cloud SMS för utveckling av SMS-gränssnitt. Men projektet körs på XP-systemet, så projektet måste vara ramverket för .NET3.5, men SMS-DLL:n som ges av Alibaba kan bara användas i .NET 4.0 och uppåt, vilket är väldigt pinsamt, lyckligtvis gav Alibaba ett exempel på Java för HTTP, så jag försökte skriva metoden att anropa Alibaba Cloud HTTP i C# enligt java-koden. Tillbaka till saken, gå till koden! (Jag har också publicerat i CSDN, personlighetsgarantin är inte ett piratinlägg, tack) offentlig klass SendShort { /// <summary> SMS-gränssnittets C#-anropsmetod /// </summary> <param name="url"></param> /// <returns></returns> publik statisk sträng GetHtmlFormUrl(sträng-url) { sträng strRet = null; om (url == null || url. Trim(). ToString() == "") { återvänd strRet; } strängtargeturl = URL. Trim(). ToString(); Försök { HttpWebRequest hr = (HttpWebRequest)WebRequest.Create(targeturl); HR. UserAgent = "Mozilla/4.0 (kompatibel; MSIE 6.0; Windows NT 5.1)"; HR. Metod = "GET"; HR. Timeout = 30 * 60 * 1000; WebResponse hs = timme. GetResponse(); Stream sr = hs. GetResponseStream(); StreamReader ser = ny StreamReader(sr, Encoding.Default); strRet = MessageHandle(ser. ReadToEnd()); } catch (Undantag t.ex.) { strRet = "SMS skickat misslyckades!" +ex. Meddelande; } återvänd strRet; } /// <summary> Kontrollera att mobilnumret är legitimt /// </summary> <param name="str_handset"></param> /// <returns></returns> offentlig statisk bool IsHandset (sträng str_handset) { return System.Text.RegularExpressions.Regex.IsMatch(str_handset, @"^1[3|4|5|7|8][0-9]\d{8}$"); } /// <summary> SMS-verifieringskod /// </summary> <param name="mobil"></param> <param name="code"></param> /// <returns></returns> publik statisk sträng SignDemo (sträng mobil, int-kod) { strängen accessKeyId = "Ditt accessKeyId"; sträng accessSecret = "din accessSecret"; sträng nowDate = DateTime.Now.ToUniversalTime(). ToString("yyyy-MM-dd'T'HH:mm:ss'Z'"); GTM-tid Dictionary<string, string> keyValues = ny Dictionary<string, string>(); Deklarera en ordbok 1. Systemparametrar 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 ersättas med XML
2. Affärs-API-parametrar keyValues.Add("Action", "SendSms"); keyValues.Add("Version", "2017-05-25"); keyValues.Add("RegionId", "cn-hangzhou"); keyValues.Add("PhoneNumbers", mobil); keyValues.Add("SignName", "Your Signature"); keyValues.Add("TemplateParam", "{\"code\":\"" + code + "\"}"); keyValues.Add("TemplateCode", "Your Template Number"); keyValues.Add("OutId", "123");
3. Ta bort signaturnyckelordet om (keyValues.ContainsKey("Signature")) { keyValues.Remove("Signatur"); }
4. Parameternyckelsortering Dictionary<string, string> ascDic = keyValues.OrderBy(o => o.Key). ToDictionary(o => o.Key, p => p.Value.ToString()); 5. Konstruera strängen som ska signeras StringBuilder builder = ny StringBuilder(); foreach (var-objekt i ascDic) { om (föremål. Nyckel == "SignName") {
} annars { byggare. Append("&"). Append(specialUrlEncode(objekt. Nyckel)). Append("="). Append(specialUrlEncode(objekt. Värde)); } om (föremål. Key == "RegionId") { byggare. Append("&"). Append(specialUrlEncode("SignName")). Append("="). Append(specialUrlEncode(keyValues["SignName"])); } } sträng sorteQueryString = builder. ToString(). Understräng(1);
StringBuilder stringToSign = ny StringBuilder(); stringToSign.Append("GET"). Append("&"); stringToSign.Append(specialUrlEncode("/")). Append("&"); stringToSign.Append(specialUrlEncode(sorteQueryString));
string Sign = MySign(accessSecret + "&", stringToSign.ToString()); 6. Signaturen ska också kodas med en speciell URL i slutet strängsigntur = specialUrlEncode(Sign); Skriv slutligen ut URL:en till den legitima GET-förfrågan sträng-URL = "http://dysmsapi.aliyuncs.com/?Signature=" + signture + builder; strängresultat = GetHtmlFormUrl(url); återvändande resultat; } /// <summary> URL-kodning /// </summary> <param name="value"></param> /// <returns></returns> publik statisk sträng specialUrlEncode(strängtemperatur) {
StringBuilder stringBuilder = ny StringBuilder(); för (int i = 0; Jag < temp. Längd; i++) { sträng t = temp[i]. ToString(); sträng k = HttpUtility.UrlEncode(t, Encoding.UTF8); om (t == k) { stringBuilder.Append(t); } annars { 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> publik statisk sträng MySign (strängaccessSecret, sträng stringToSign) { Försök { 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). Byt ut ("-", sträng. Tom). ToLower(); byte[] bytes = strToToHexByte(stringbyte); returnera Convert.ToBase64String(bytes); } catch (Undantag t.ex.) {
Kasta ex; } } /// <summary> Sträng till 16-bytes array /// </summary> <param name="hexString"></param> /// <returns></returns> privat statisk byte[] strToToHexByte(sträng hexString) { hexSträng = hexSträng.Ersätt(" ", ""); om ((hexString.Length % 2) != 0) hexSträng += " "; byte[] returnBytes = ny byte[hexString.Length / 2]; för (int i = 0; i < returnBytes.Length; i++) returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16); returnreturnBytes; } /// <summary> Meddelandebehandlingsmekanismer /// </summary> <param name="str"></param> /// <returns></returns> privat statisk sträng MessageHandle (sträng str) { MessageModel message = JsonConvert.DeserializeObject<MessageModel>(str); strängresultat = ""; Switch (meddelande. Kod) { fall "OK": resultat = "SMS skickat framgångsrikt!"; paus; Fall "ISP. RAM_PERMISSION_DENY": resultat = "RAM-behörighet FÖRNEKAS"; paus; Fall "ISV. OUT_OF_SERVICE": resultat = "Driftstopp"; paus; Fall "ISV. PRODUCT_UN_SUBSCRIPT": resultat = "Alibaba Cloud-kunder som inte har öppnat molnkommunikationsprodukter"; paus; Fall "ISV. PRODUCT_UNSUBSCRIBE": resultat = "Produkt ej öppnad"; paus; Fall "ISV. ACCOUNT_NOT_EXISTS": resultat = "Kontot existerar inte"; paus; Fall "ISV. ACCOUNT_ABNORMAL": resultat = "Kontoundantag"; paus; Fall "isv.SMS_TEMPLATE_ILLEGAL": resultat = "SMS-mall är inte laglig"; paus; Fall "isv.SMS_SIGNATURE_ILLEGAL": resultat = "SMS-signatur är inte laglig"; paus; Fall "ISV. INVALID_PARAMETERS": resultat = "parameterundantag"; paus; Fall "ISV. MOBILE_NUMBER_ILLEGAL": resultat = "olagligt mobilnummer"; paus; Fall "ISV. MOBILE_COUNT_OVER_LIMIT": resultat = "Antal mobilnummer överskrider gränsen"; paus; Fall "ISV. TEMPLATE_MISSING_PARAMETERS": resultat = "mall saknad variabel"; paus; Fall "ISV. BUSINESS_LIMIT_CONTROL": resultat = "Affärsaktuell"; paus; Fall "ISV. INVALID_JSON_PARAM": resultat = "JSON-parametern är inte legitim, endast strängvärden accepteras"; paus; Fall "ISV. PARAM_LENGTH_LIMIT": resultat = "Parameter överskrider längdgränsen"; paus; Fall "ISV. PARAM_NOT_SUPPORT_URL": resultat = "URL stöds ej"; paus; Fall "ISV. AMOUNT_NOT_ENOUGH": resultat = "Otillräckligt kontosaldo"; paus; Fall "ISV. TEMPLATE_PARAMS_ILLEGAL": resultat = "Mallvariabler innehåller olagliga nyckelord"; paus; } återvändande resultat; } }
|
Tjog
-
Se alla betyg
Föregående:1000 byggnader är handmålade och vackraNästa:Tidigare material från japanska flottan och armén, PDF
|