Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 14739|Jawab: 3

[Antarmuka] C# tidak memanggil DLL SMS Alibaba, cara menggunakan antarmuka http untuk mengirim SMS

[Salin tautan]
Diposting pada 01/12/2018 18.37.34 | | |
  Beberapa waktu lalu, perusahaan memiliki proyek yang perlu menggunakan notifikasi SMS, dan kemudian saya membeli Alibaba Cloud SMS untuk pengembangan antarmuka SMS. Namun project berjalan pada sistem XP, jadi project harus framework dari .NET3.5, namun DLL SMS yang diberikan oleh Alibaba hanya dapat digunakan di .net 4.0 ke atas, yang sangat memalukan, untungnya Alibaba memberikan contoh java untuk HTTP, jadi saya mencoba menulis metode memanggil HTTP Alibaba Cloud di C# sesuai dengan kode java. Kembali ke intinya, buka kodenya! (Saya juga telah diterbitkan di CSDN, jaminan kepribadian bukanlah posting bajakan, terima kasih)  
kelas umum SendShort
    {
        /// <summary>
        Antarmuka SMS Metode panggilan C#
        /// </summary>
        <param name="url"></param>
        /// <returns></returns>
        string statis publik GetHtmlFormUrl(url string)
        {
            string strRet = null;
            if (url == null || url. Pangkas(). ToString() == "")
            {
                kembali strRet;
            }
            string targeturl = url. Pangkas(). ToString();
            Coba
            {
                HttpWebRequest hr = (HttpWebRequest)WebRequest.Create(targeturl);
                Jam. UserAgent = "Mozilla/4.0 (kompatibel; MSIE 6.0; Windows NT 5.1)";
                Jam. Metode = "DAPATKAN";
                Jam. Batas waktu = 30 * 60 * 1000;
                WebResponse hs = jam. GetResponse();
                Aliran sr = hs. GetResponseStream();
                StreamReader ser = StreamReader baru (sr, Encoding.Default);
                strRet = MessageHandle(ser. BacaToEnd());
            }
            tangkap (Pengecualian mis)
            {
               strRet = "SMS terkirim gagal!" +ex. Pesan;
            }
            kembali strRet;
        }
        /// <summary>
        Verifikasi bahwa nomor ponsel tersebut sah
        /// </summary>
        <param name="str_handset"></param>
        /// <returns></returns>
        bool statis publik IsHandset(string str_handset)
        {
            mengembalikan System.Text.RegularExpressions.Regex.IsMatch(str_handset, @"^1[3|4|5|7|8][0-9]\d{8}$");
        }
        /// <summary>
        Kode verifikasi SMS
        /// </summary>
        <param name="seluler"></param>
        <param name="kode"></param>
        /// <returns></returns>
        string statis publik SignDemo (string seluler, kode int)
        {
            string accessKeyId = "AccessKeyId Anda ";
            string accessSecret = "accessSecret Anda";
            string nowDate = DateTime.Now.ToUniversalTime(). ToString("yyyy-MM-dd'T'HH:mm:ss'Z'"); Waktu GTM
            Dictionary<string, string> keyValues = Dictionary<string, string>(); Mendeklarasikan kamus
            1. Parameter sistem
            keyValues.Add("SignatureMethod", "HMAC-SHA1");
            keyValues.Add("SignatureNonce", Guid.NewGuid(). ToString());
            keyValues.Add("AccessKeyId", accessKeyId);
            keyValues.Add("SignatureVersion", "1.0");
            keyValues.Add("Stempel waktu", nowDate);
            keyValues.Add("Format", "Json"); dapat diganti dengan XML

            2. Parameter API Bisnis
            keyValues.Add("Action", "SendSms");
            keyValues.Add("Versi", "25-05-2017");
            keyValues.Add("RegionId", "cn-hangzhou");
            keyValues.Add("PhoneNumbers", seluler);
            keyValues.Add("SignName", "Tanda Tangan Anda");
            keyValues.Add("TemplateParam", "{\"code\":\"" + code + "\"}");
            keyValues.Add("TemplateCode", "Nomor Template Anda");
            keyValues.Add("OutId", "123");

            3. Hapus kata kunci tanda tangan
            if (keyValues.ContainsKey("Signature"))
            {
                keyValues.Remove("Tanda Tangan");
            }

            4. Penyortiran kunci parameter
            Dictionary<string, string> ascDic = keyValues.OrderBy(o => o.Key). ToDictionary(o => o.Key, p => p.Value.ToString());
            5. Bangun string yang akan ditandatangani
            StringBuilder builder = StringBuilder baru();
            foreach (item var di ascDic)
            {
                jika (item. Kunci == "Nama Tanda")
                {

                }
                yang lain
                {
                    pembangun. Lampiran("&"). Tambahkan(khususUrlEncode(item. Kunci)). Lampirkan("="). Tambahkan(khususUrlEncode(item. Nilai));
                }
                jika (item. Kunci == "RegionId")
                {
                    pembangun. Lampiran("&"). Tambahkan(khususUrlEncode("SignName")). Lampirkan("="). Append(specialUrlEncode(keyValues["SignName"]));
                }
            }
            string sorteQueryString = pembuat. ToString(). Substring(1);

            StringBuilder stringToSign = StringBuilder(); baru
            stringToSign.Append("GET"). Lampirkan ("&");
            stringToSign.Append(specialUrlEncode("/")). Lampirkan ("&");
            stringToSign.Append(specialUrlEncode(sorteQueryString));

            string Sign = MySign(accessSecret + "&", stringToSign.ToString());
            6. Tanda tangan juga harus dikodekan dengan URL khusus di bagian akhir
            string signture = specialUrlEncode(Sign);
            Terakhir, cetak URL permintaan GET yang sah
            string url = "http://dysmsapi.aliyuncs.com/?Signature=" + signture + builder;
            hasil string = GetHtmlFormUrl(url);
            mengembalikan hasil;
        }
        /// <summary>
        Pengkodean URL
        /// </summary>
        <param name="value"></param>
        /// <returns></returns>
        string statis publik specialUrlEncode(string temp)
        {

            StringBuilder stringBuilder = StringBuilder(); baru
            untuk (int i = 0; Saya < suhu. Panjang; i++)
            {
                string t = temp[i]. ToString();
                string k = HttpUtility.UrlEncode(t, Encoding.UTF8);
                jika (t == k)
                {
                    stringBuilder.Append(t);
                }
                yang lain
                {
                    stringBuilder.Append(k.ToUpper());
                }
            }
            mengembalikan stringBuilder.ToString(). Ganti("+", "%20"). Ganti("*", "%2A"). Ganti("%7E", "~");
        }
        /// <summary>
        HMACSHA1 tanda tangan
        /// </summary>
        <param name="accessSecret"></param>
        <param name="stringToSign"></param>
        /// <returns></returns>
        string statis publik MySign(string accessSecret, string stringToSign)
        {
            Coba
            {
                var hmacsha1 = new HMACSHA1(Encoding.UTF8.GetBytes(accessSecret));
                var dataBuffer = Pengkodean.UTF8.GetBytes(stringToSign);
                var hashBytes = hmacsha1. ComputeHash(dataBuffer);
                string stringbyte = BitConverter.ToString(hashBytes, 0). Ganti("-", string. Kosong). Keturunkan();
                byte[] byte = strToToHexByte(stringbyte);
                mengembalikan Convert.ToBase64String(byte);
            }
            tangkap (Pengecualian mis)
            {

                melempar mantan;
            }
        }
        /// <summary>
        String ke array 16 byte
        /// </summary>
        <param name="hexString"></param>
        /// <returns></returns>
        byte statis pribadi[] strToToHexByte(string hexString)
        {
            hexString = hexString.Replace(" ", "");
            if ((hexString.Length % 2) != 0)
                hexString += " ";
            byte[] returnBytes = byte baru[hexString.Length / 2];
            untuk (int i = 0; i < returnBytes.Length; i++)
                returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
            mengembalikan Byte;
        }
        /// <summary>
        Mekanisme pemrosesan pesan
        /// </summary>
        <param name="str"></param>
        /// <returns></returns>
        string statis pribadi MessageHandle(string str)
        {
            Pesan MessageModel = JsonConvert.DeserializeObject<MessageModel>(str);
            hasil string = "";
            beralih (pesan. Kode)
            {
                kasus "OK":
                    result = "SMS berhasil terkirim!";
                    istirahat;
                Kasus "ISP. RAM_PERMISSION_DENY":
                    result = "PENOLAKAN Izin RAM";
                    istirahat;
                Kasus "ISV. OUT_OF_SERVICE":
                    result = "Waktu henti bisnis";
                    istirahat;
                Kasus "ISV. PRODUCT_UN_SUBSCRIPT":
                    result = "Pelanggan Alibaba Cloud yang belum membuka produk komunikasi cloud";
                    istirahat;
                Kasus "ISV. PRODUCT_UNSUBSCRIBE":
                    result = "Produk tidak dibuka";
                    istirahat;
                Kasus "ISV. ACCOUNT_NOT_EXISTS":
                    result = "Akun tidak ada";
                    istirahat;
                Kasus "ISV. ACCOUNT_ABNORMAL":
                    result = "Pengecualian Akun";
                    istirahat;
                kasus "isv.SMS_TEMPLATE_ILLEGAL":
                    result = "Templat SMS tidak legal";
                    istirahat;
                kasus "isv.SMS_SIGNATURE_ILLEGAL":
                    result = "Tanda tangan SMS tidak legal";
                    istirahat;
                Kasus "ISV. INVALID_PARAMETERS":
                    result = "pengecualian parameter";
                    istirahat;
                Kasus "ISV. MOBILE_NUMBER_ILLEGAL":
                    result = "nomor ponsel ilegal";
                    istirahat;
                Kasus "ISV. MOBILE_COUNT_OVER_LIMIT":
                    result = "Jumlah nomor ponsel melebihi batas";
                    istirahat;
                Kasus "ISV. TEMPLATE_MISSING_PARAMETERS":
                    result = "variabel templat yang hilang";
                    istirahat;
                Kasus "ISV. BUSINESS_LIMIT_CONTROL":
                    result = "Bisnis Saat Ini";
                    istirahat;
                Kasus "ISV. INVALID_JSON_PARAM":
                    result = "Parameter JSON tidak sah, hanya nilai string yang diterima";
                    istirahat;
                Kasus "ISV. PARAM_LENGTH_LIMIT":
                    result = "Parameter melebihi batas panjang";
                    istirahat;
                Kasus "ISV. PARAM_NOT_SUPPORT_URL":
                    result = "URL tidak didukung";
                    istirahat;
                Kasus "ISV. AMOUNT_NOT_ENOUGH":
                    result = "Saldo akun tidak mencukupi";
                    istirahat;
                Kasus "ISV. TEMPLATE_PARAMS_ILLEGAL":
                    result = "Variabel templat berisi kata kunci ilegal";
                    istirahat;
            }
            mengembalikan hasil;
        }
    }

Skor

Jumlah peserta2MB+2 sumbang+2 Roboh alasan
Sampah kecil + 1 + 1 Jempolkan
Admin + 1 + 1 Sangat kuat!

Lihat semua penilaian





Mantan:1000 bangunan dilukis dengan tangan dan indah
Depan:Mantan Materi Angkatan Laut dan Angkatan Darat Jepang, PDF
Diposting pada 02/12/2018 09.00.04 |
Diposting pada 02/12/2018 10.19.01 |
Berkat kode yang disediakan oleh pemiliknya, kirim SMS melalui antarmuka permintaan simulasi HTTP, tidak perlu memanggil dll besar, mengacungkan jempol
Diposting pada 14/12/2018 16.03.21 |
Mereka semua adalah master
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com