Nemrég a cégnek volt egy projektje, aminek SMS-értesítéseket kellett használnia, majd vettem egy Alibaba Cloud SMS-t SMS interfész fejlesztéséhez. De a projekt XP rendszeren fut, így a projektnek a .NET3.5 keretrendszerének kell lennie, de az Alibaba által adott SMS DLL csak a .net 4.0 és fölöttebb verzióban használható, ami nagyon kínos, szerencsére az Alibaba adott egy példát a HTTP-re Java-ra, ezért megpróbáltam megírni az Alibaba Cloud HTTP hívásának módszerét C#-ban a java kód szerint. Vissza a lényeghez, menj a kódhoz! (Én is írtam CSDN-ben is, a személyiség garanciája nem kalóz poszt, köszönöm) nyilvános osztály SendShort { /// <summary> SMS interfész C# hívás módszer /// </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(); próbáld ki { HttpWebRequest hr = (HttpWebRequest)WebRequest.Create(targeturl); HR. UserAgent = "Mozilla/4.0 (kompatibilis; MSIE 6.0; Windows NT 5.1)"; HR. Method = "GET"; HR. Időkorlát = 30 * 60 * 1000; WebResponse hs = óra. GetResponse(); Stream sr = hs. GetResponseStream(); StreamReader ser = új StreamReader(sr, Encoding.Default); strRet = MessageHandle(ser. ReadToEnd()); } catch (kivétel ex) { strRet = "SMS küldése meghibásodott!" +ex. Üzenet; } return strRet; } /// <summary> Ellenőrizd, hogy a mobilszám hiteles-e /// </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 ellenőrző kód /// </summary> <param name="mobil"></param> <param name="kód"></param> /// <returns></returns> public static string SignDemo(string mobile, int code) { string accessKeyId = "Az Ön accessKeyId"; string accessSecret = "your accessSecret"; string nowDate = DateTime.Now.ToUniversalTime(). ToString("yyyy-MM-dd'T'HH:mm:ss'Z'"); GTM idő Dictionary<string, string> keyValues = új Dictionary<string, string>(); Szótár bejelentése 1. Rendszerparaméterek 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"); XML-lel helyettesíthető
2. Üzleti API paraméterek keyValues.Add("Akció", "SendSms"); keyValues.Add("Verzió", "2017-05-25"); keyValues.Add("RegionId", "cn-hangzhou"); keyValues.Add("Telefonszámok", mobil); keyValues.Add("SignName", "Aláírásod"); keyValues.Add("TemplateParam", "{\"code\":\"" + code + "\"}"); keyValues.Add("TemplateCode", "A sablonszámod"); keyValues.Add("OutId", "123");
3. Távolítsd el az aláírási kulcsszót if (keyValues.ContainsKey("Signature")) { keyValues.Remove("Aláírás"); }
4. Paraméterkulcs rendezés Dictionary<string, string> ascDic = keyValues.OrderBy(o => o.Key). ToDictionary(o => o.Key, p => p.Value.ToString()); 5. Építsd meg az aláírandó láncszálat StringBuilder builder = új StringBuilder(); foreach (var item in ascDic) { if (tétel. Kulcs == "SignName") {
} más { Építő. Append("&"). Append(specialUrlEncode(item. Kulcs)). Csatolás("="). Append(specialUrlEncode(item. Érték)); } if (tétel. Kulcs == "RegionId") { Építő. Append("&"). Append(specialUrlEncode("SignName")). Csatolás("="). Append(specialUrlEncode(keyValues["SignName"])); } } string sorteQueryString = builder. ToString(). Mellékszál(1);
StringBuilder stringToSign = új StringBuilder(); stringToSign.Append("GET"). Melléklet("&"); stringToSign.Append(specialUrlEncode("/")). Melléklet("&"); stringToSign.Append(specialUrlEncode(sorteQueryString));
string Sign = MySign(accessSecret + "&", stringToSign.ToString()); 6. Az aláírást egy speciális URL-lel kell kódolni a végén string signture = specialUrlEncode(Sign); Végül nyomtatd ki a jogos GET kérés URL-jét string URL = "http://dysmsapi.aliyuncs.com/?Signature=" + signture + builder; string result = GetHtmlFormUrl(url); visszaadási eredmény; } /// <summary> URL kódolás /// </summary> <param name="érték"></param> /// <returns></returns> public static string specialUrlEncode(string temp) {
StringBuilder stringBuilder = új StringBuilder(); for (int i = 0; Én < ideiglenes típus. Hossz; i++) { String t = temp[i]. ToString(); string k = HttpUtility.UrlEncode(t, Encoding.UTF8); ha (t == k) { stringBuilder.Append(t); } más { stringBuilder.Append(k.ToUpper()); } } return stringBuilder.ToString(). Replace("+", "%20"). Replace("*", "%2A"). Replace("%7E", "~"); } /// <summary> HMACSHA1 aláírás /// </summary> <param name="accessSecret"></param> <param name="stringToSign"></param> /// <returns></returns> public static string MySign(string accessSecret, string stringToSign) { próbáld ki { var hmacsha1 = new HMACSHA1(Encoding.UTF8.GetBytes(accessSecret)); var dataBuffer = Encoding.UTF8.GetBytes(stringToSign); var hashBytes = hmacsha1. ComputeHash(dataBuffer); stringbyte = BitConverter.ToString(hashBytes, 0). Helyettesít("-", zsinór. Üres). ToLower(); byte[] bytes = strToHexByte(stringbyte); return Convert.ToBase64String(bájt); } catch (kivétel ex) {
Throw Ex; } } /// <summary> String 16 bájtos tömbbe /// </summary> <param name="hexString"></param> /// <returns></returns> private static byte[] strToHexByte(string hexString) { hexString = hexString.Replace(" ", ""); if ((hexString.Length % 2) != 0) hexString += " "; byte[] returnBytes = új 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> Üzenetfeldolgozó mechanizmusok /// </summary> <param name="str"></param> /// <returns></returns> privát statikus string MessageHandle (string str) { MessageModel message = JsonConvert.DeserializeObject<MessageModel>(str); string eredmény = ""; Kapcsoló (üzenet. Kód) { eset "OK": result = "SMS sikeres elküldve!"; szünet; eset "ISP. RAM_PERMISSION_DENY": result = "RAM engedély megtagadása"; szünet; Case "ISV. OUT_OF_SERVICE": result = "Üzleti állásidő"; szünet; Case "ISV. PRODUCT_UN_SUBSCRIPT": result = "Alibaba Cloud ügyfelek, akik nem nyitottak felhőalapú kommunikációs termékeket"; szünet; Case "ISV. PRODUCT_UNSUBSCRIBE": result = "Termék nem nyílt meg"; szünet; Case "ISV. ACCOUNT_NOT_EXISTS": result = "Fiók nem létezik"; szünet; Case "ISV. ACCOUNT_ABNORMAL": result = "Fiók kivétel"; szünet; "isv.SMS_TEMPLATE_ILLEGAL" eset: result = "SMS sablon nem legális"; szünet; "isv.SMS_SIGNATURE_ILLEGAL" eset: result = "SMS aláírás nem legális"; szünet; Case "ISV. INVALID_PARAMETERS": result = "paraméter kivétel"; szünet; Case "ISV. MOBILE_NUMBER_ILLEGAL": result = "illegális mobiltelefonszám"; szünet; Case "ISV. MOBILE_COUNT_OVER_LIMIT": result = "A mobilszámok száma meghaladja a limitet"; szünet; Case "ISV. TEMPLATE_MISSING_PARAMETERS": result = "sablon hiányzó változó"; szünet; Case "ISV. BUSINESS_LIMIT_CONTROL": result = "Business Current"; szünet; Case "ISV. INVALID_JSON_PARAM": result = "JSON paraméter nem legitim, csak a string értékeket fogadják el"; szünet; Case "ISV. PARAM_LENGTH_LIMIT": result = "Paraméter túllépi a hosszhatárt"; szünet; Case "ISV. PARAM_NOT_SUPPORT_URL": result = "URL nem támogatott"; szünet; Case "ISV. AMOUNT_NOT_ENOUGH": result = "Elégtelen számlaegyenleg"; szünet; Case "ISV. TEMPLATE_PARAMS_ILLEGAL": result = "Sablonváltozók illegális kulcsszavakat tartalmaznak"; szünet; } visszaadási eredmény; } }
|