|
|
Yayınlandı 1.12.2018 18:37:34
|
|
|

Bir süre önce, şirketin SMS bildirimleri kullanması gereken bir projesi vardı ve ben de SMS arayüzü geliştirme için Alibaba Cloud SMS aldım. Ama proje XP sisteminde çalışıyor, bu yüzden proje .NET3.5'in çerçevesi olmalı, ancak Alibaba tarafından verilen SMS DLL'si sadece .net 4.0 ve üzerlerinde kullanılabiliyor, bu çok utanç verici, neyse ki Alibaba HTTP için bir java örneği verdi, bu yüzden java koduna göre C#'da Alibaba Cloud HTTP çağırma yöntemini yazmaya çalıştım. Konuya geri dönelim, koda geçin! (CSDN'de de yayın yaptım, kişilik garantisi korsan bir gönderi değil, teşekkürler) public class SendShort { /// <summary> SMS arayüzü C# çağrı yöntemi /// </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(); Denemek { HttpWebRequest hr = (HttpWebRequest)WebRequest.Create(targeturl); HR. UserAgent = "Mozilla/4.0 (uyumlu; MSIE 6.0; Windows NT 5.1)"; HR. Yöntem = "GET"; HR. Mola = 30 * 60 * 1000; WebResponse hs = saat. GetResponse(); Akış sr = hs. GetResponseStream(); StreamReader ser = yeni StreamReader(sr, Encoding.Default); strRet = MessageHandle(ser. ReadToEnd()); } catch (İstisna örneğin) { strRet = "SMS gönderildi, başarısız oldu!" +ex. İleti; } return strRet; } /// <summary> Cep telefonu numarasının gerçek olduğundan emin olun /// </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 doğrulama kodu /// </summary> <param name="mobil"></param> <param name="code"></param> /// <returns></returns> public static string SignDemo(string mobile, int code) { string accessKeyId = "Sizin accessKeyId'niz"; string accessSecret = "accessSecret'iniz"; string nowDate = DateTime.Now.ToUniversalTime(). ToString("yyyy-MM-dd'T'HH:mm:ss'Z'"); GTM zamanı Sözlük<string, string> keyValues = yeni Sözlük<string, string>(); Bir sözlük ilan edin 1. Sistem parametreleri keyValues.Add("SignatureMethod", "HMAC-SHA1"); keyValues.Add("SignatureNonce", Guid.NewGuid(). ToString()); keyValues.Add("AccessKeyId", accessKeyId); keyValues.Add("SignatureVersion", "1.0"); keyValues.Add("Zaman damgası", nowDate); keyValues.Add("Format", "Json"); XML ile değiştirilebilir
2. İş API parametreleri keyValues.Add("Eylem", "SendSms"); keyValues.Add("Sürüm", "2017-05-25"); keyValues.Add("RegionId", "cn-hangzhou"); keyValues.Add("TelefonNumaralar", mobil); keyValues.Add ("İşaretAdı ", "İmzanız"); keyValues.Add("TemplateParam", "{\"code\":\"" + code + "\"}"); keyValues.Add("TemplateCode", "Şablon Numaranız"); keyValues.Add("OutId", "123");
3. İmza anahtar kelimesini kaldırın if (keyValues.ContainsKey("Signature")) { keyValues.Remove("İmza"); }
4. Parametre anahtarı sıralaması Sözlük<string, string> ascDic = keyValues.OrderBy(o => o.Key). ToDictionary(o => o.Key, p => p.Value.ToString()); 5. İmzalanacak diziyi oluşturun StringBuilder builder = yeni StringBuilder(); foreach (ascDic'te var öğesi) { if (madde. Key == "SignName") {
} else { Yapımcı. Ek("&"). Append(specialUrlEncode(item. Anahtar)). Ek("="). Append(specialUrlEncode(item. Değer)); } if (madde. Key == "RegionId") { Yapımcı. Ek("&"). Append(specialUrlEncode("SignName")). Ek("="). Append(specialUrlEncode(keyValues["SignName"])); } } string sorteQueryString = builder. ToString(). Alt diz(1);
StringBuilder stringToSign = yeni StringBuilder(); stringToSign.Append("GET"). Ek("&"); stringToSign.Append(specialUrlEncode("/")). Ek("&"); stringToSign.Append(specialUrlEncode(sorteQueryString));
string Sign = MySign(accessSecret + "&", stringToSign.ToString()); 6. İmza ayrıca sonunda özel bir URL ile kodlanmalıdır string signture = specialUrlEncode(Sign); Son olarak, meşru GET talebinin URL'sini yazdırın dizi URL = "http://dysmsapi.aliyuncs.com/?Signature=" + signture + builder; dizi sonucu = GetHtmlFormUrl(url); geri dönüş sonucu; } /// <summary> URL kodlaması /// </summary> <param name="değer"></param> /// <returns></returns> public static string specialUrlEncode(string temp) {
StringBuilder stringBuilder = yeni StringBuilder(); için (int i = 0; Ben < sıcaklık. Uzunluk; i++) { Dizi t = Temp[i]. ToString(); string k = HttpUtility.UrlEncode(t, Encoding.UTF8); eğer (t == k) { stringBuilder.Append(t); } else { stringBuilder.Append(k.ToUpper()); } } return stringBuilder.ToString(). Replace("+", "%20"). Replace("*", "%2A"). Replace("%7E", "~"); } /// <summary> HMACSHA1 imzası /// </summary> <param name="accessSecret"></param> <param name="stringToSign"></param> /// <returns></returns> public static string MySign(string accessSecret, string stringToSign) { Denemek { var hmacsha1 = yeni HMACSHA1(Encoding.UTF8.GetBytes(accessSecret)); var dataBuffer = Encoding.UTF8.GetBytes(stringToSign); var hashBytes = hmacsha1. ComputeHash(dataBuffer); string stringbyte = BitConverter.ToString(hashBytes, 0). Replace("-", ip. Boş). ToLower(); byte[] bytes = strToHexByte(stringbyte); return Convert.ToBase64String(bytes); } catch (İstisna örneğin) {
Throw Ex; } } /// <summary> 16 baytlık diziye diziye /// </summary> <param name="hexString"></param> /// <returns></returns> private static byte[] strToHexByte(string hexString) { hexString = hexString.Replace(" ", ""); if ((hexString.Uzunluk %2) != 0) hexString += " "; byte[] returnBytes = yeni bayt[hexString.Length / 2]; için (int i = 0; i < returnBytes.Uzunluk; i++) returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16); return returnBytes; } /// <summary> Mesaj işleme mekanizmaları /// </summary> <param name="str"></param> /// <returns></returns> özel statik dizi MessageHandle(string str) { MessageModel mesajı = JsonConvert.DeserializeObject<MessageModel>(str); dizi sonucu = ""; Anahtar (mesaj. Code) { "Tamam" vakası: sonuç = "SMS gönderildi başarılı!"; mola; "ISP. RAM_PERMISSION_DENY": sonuç = "RAM İzni REDDEDİLİ"; mola; Case "ISV. OUT_OF_SERVICE": sonuç = "İş kesintisi"; mola; Case "ISV. PRODUCT_UN_SUBSCRIPT": sonuç = "Bulut iletişim ürünleri açmamış Alibaba Cloud müşterileri"; mola; Case "ISV. PRODUCT_UNSUBSCRIBE": result = "Ürün açılmadı"; mola; Case "ISV. ACCOUNT_NOT_EXISTS": sonuç = "Hesap var değildir"; mola; Case "ISV. ACCOUNT_ABNORMAL": sonuç = "Hesap İstisnası"; mola; Vaka "isv.SMS_TEMPLATE_ILLEGAL": sonuç = "SMS şablonu yasal değil"; mola; Durum "isv.SMS_SIGNATURE_ILLEGAL": sonuç = "SMS imzası yasal değildir"; mola; Case "ISV. INVALID_PARAMETERS": sonuç = "parametre istisnası"; mola; Case "ISV. MOBILE_NUMBER_ILLEGAL": sonuç = "yasa dışı cep telefonu numarası"; mola; Case "ISV. MOBILE_COUNT_OVER_LIMIT": sonuç = "Mobil numara sayısı sınırı aştı"; mola; Case "ISV. TEMPLATE_MISSING_PARAMETERS": sonuç = "şablon eksik değişken"; mola; Case "ISV. BUSINESS_LIMIT_CONTROL": sonuç = "İş Akımı"; mola; Case "ISV. INVALID_JSON_PARAM": sonuç = "JSON parametresi meşru değil, sadece dize değerleri kabul edilir"; mola; Case "ISV. PARAM_LENGTH_LIMIT": result = "Parametre uzunluk sınırını aşıyor"; mola; Case "ISV. PARAM_NOT_SUPPORT_URL": result = "URL desteklenmiyor"; mola; Case "ISV. AMOUNT_NOT_ENOUGH": sonuç = "Yetersiz hesap bakiyesi"; mola; Case "ISV. TEMPLATE_PARAMS_ILLEGAL": result = "Şablon değişkenleri yasa dışı anahtar kelimeler içerir"; mola; } geri dönüş sonucu; } }
|
Puan
-
Tüm puanları gör
Önceki:1000 bina el boyası ve güzelÖnümüzdeki:Eski Japon Donanması ve Ordusu Materyalleri, PDF
|