Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 14739|Yanıt: 3

[Arayüz] C# Alibaba SMS dll çağrısı yapmıyor, http arayüzü kullanılarak SMS göndermek nasıl yapılır

[Bağlantıyı kopyala]
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

Katılımcı sayısı2MB+2 Katkı+2 Çökmek sebep
Küçük + 1 + 1 Başparmak yukarı bak
Admin + 1 + 1 Çok güçlü!

Tüm puanları gör





Önceki:1000 bina el boyası ve güzel
Önümüzdeki:Eski Japon Donanması ve Ordusu Materyalleri, PDF
Yayınlandı 2.12.2018 09:00:04 |
Yayınlandı 2.12.2018 10:19:01 |
Sahibin sağladığı kod sayesinde, HTTP simülasyon isteği arayüzü üzerinden SMS gönderin, büyük bir dll çağırmanıza gerek yok, başparmak yukarı işaret veriyor
Yayınlandı 14.12.2018 16:03:21 |
Hepsi ustadır
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com