Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 14739|Răspunde: 3

[Interfață] C# nu apelează Alibaba SMS DLL, cum să folosești interfața http pentru a trimite SMS

[Copiază linkul]
Postat pe 01.12.2018 18:37:34 | | |
  Acum ceva timp, compania a avut un proiect care necesita să folosească notificări SMS, iar apoi am cumpărat un SMS Alibaba Cloud pentru dezvoltarea interfeței SMS. Dar proiectul rulează pe sistemul XP, deci trebuie să fie cadrul .NET3.5, însă DLL-ul SMS oferit de Alibaba poate fi folosit doar în .net 4.0 și versiuni, ceea ce este foarte jenant, din fericire Alibaba a dat un exemplu de Java pentru HTTP, așa că am încercat să scriu metoda de a chema Alibaba Cloud HTTP în C# conform codului java. Revenind la subiect, mergi la cod! (Am publicat și în CSDN, garanția personalității nu este o postare piratată, mulțumesc)  
clasa publică SendShort
    {
        /// <summary>
        Interfață SMS metodă de apel C#
        /// </summary>
        <param name="url"></param>
        /// <returns></returns>
        șirul static public GetHtmlFormUrl(string url)
        {
            stringstring-ul = nul;
            if (url == null || url. Trim(). ToString() == "")
            {
                returnează strRet;
            }
            string targeturl = url. Trim(). ToString();
            încearcă
            {
                HttpWebRequest hr = (HttpWebRequest)WebRequest.Create(targeturl);
                hr. UserAgent = "Mozilla/4.0 (compatibil; MSIE 6.0; Windows NT 5.1)";
                hr. Method = "GET";
                hr. Timeout = 30 * 60 * 1000;
                WebResponse hs = hr. GetResponse();
                Stream sr = hs. GetResponseStream();
                StreamReader ser = new StreamReader(sr, Encoding.Default);
                strRet = MessageHandle(ser. ReadToEnd());
            }
            catch (excepție ex)
            {
               strRet = "SMS trimis a eșuat!" +ex. Mesaj;
            }
            returnează strRet;
        }
        /// <summary>
        Verifică dacă numărul de telefon mobil este legitim
        /// </summary>
        <param name="str_handset"></param>
        /// <returns></returns>
        bool static public IsHandset(string str_handset)
        {
            return System.Text.RegularExpressions.Regex.IsMatch(str_handset, @"^1[3|4|5|7|8][0-9]\d{8}$");
        }
        /// <summary>
        Cod de verificare SMS
        /// </summary>
        <param name="mobile"></param>
        <param name="code"></param>
        /// <returns></returns>
        șirul static public SignDemo(string mobile, cod int)
        {
            stringAccessKeyId = "AccessKeyId-ul tău ";
            stringstringAccessSecret = "accessSecretul tău";
            string nowDate = DateTime.Now.PentruUniversalTime(). ToString("yyy-MM-dd'T'HH:mm:ss'Z'"); Ora GTM
            Dictionary<string, string> keyValues = Dictionary<string, string>(); Declară un dicționar
            1. Parametri ai sistemului
            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"); poate fi înlocuit cu XML

            2. Parametrii API-ului de afaceri
            keyValues.Add("Action", "SendSms");
            keyValues.Add("Version", "2017-05-25");
            keyValues.Add("RegionId", "cn-hangzhou");
            keyValues.Add("PhoneNumbers", mobil);
            keyValues.Add("NumeSemn", "Semnătura ta");
            keyValues.Add("TemplateParam", "{\"code\":\"" + code + "\"}");
            keyValues.Add("TemplateCode", "Numărul tău de șablon");
            keyValues.Add("OutId", "123");

            3. Eliminarea cuvântului cheie semnătură
            if (keyValues.ContainsKey("Signature"))
            {
                cheieValori. Elimină("Semnătură");
            }

            4. Sortarea cheilor parametrice
            Dictionary<string, string> ascDic = keyValues.OrderBy(o => o.Key). ToDictionary(o => o.Key, p => p.Value.ToString());
            5. Construiește șirul semnat
            StringBuilder constructor = noul StringBuilder();
            foreach (element var în ascDic)
            {
                dacă (itemul. Cheie == "NumeSemnal")
                {

                }
                altfel
                {
                    Constructor. Anexă("&"). Append(specialUrlEncode(item. Cheie)). Append("="). Append(specialUrlEncode(item. Value));
                }
                dacă (itemul. Key == "RegionId")
                {
                    Constructor. Anexă("&"). Append(specialUrlEncode("SignName")). Append("="). Append(specialUrlEncode(keyValues["SignName"]));
                }
            }
            șir sorteQueryString = constructor. ToString(). Substring(1);

            StringBuilder stringToSign = noul StringBuilder();
            stringToSign.Append("GET"). Anexă("&");
            stringToSign.Append(specialUrlEncode("/")). Anexă("&");
            stringToSign.Append(specialUrlEncode(sorteQueryString));

            string Sign = MySign(accessSecret + "&", stringToSign.ToString());
            6. Semnătura ar trebui să fie codificată și cu un URL special la final
            semn de șir = specialUrlEncode(Sign);
            În final, printează URL-ul cererii legitime GET
            URL de șir = "http://dysmsapi.aliyuncs.com/?Signature=" + semnalizare + constructor;
            string result = GetHtmlFormUrl(url);
            rezultatul returnării;
        }
        /// <summary>
        Codarea URL
        /// </summary>
        <param name="value"></param>
        /// <returns></returns>
        șirul static public, specialUrlEncode(string temp)
        {

            StringBuilder stringBuilder = noul StringBuilder();
            pentru (int i = 0; Am < temperatură. Lungime; i++)
            {
                string t = temp[i]. ToString();
                string k = HttpUtility.UrlEncode(t, Encoding.UTF8);
                if (t == k)
                {
                    stringBuilder.Append(t);
                }
                altfel
                {
                    stringBuilder.Adaugă(k.ToUpper());
                }
            }
            return stringBuilder.ToString(). Replace("+", "%20"). Replace("*", "%2A"). Replace("%7E", "~");
        }
        /// <summary>
        HMACSHA1 semnătură
        /// </summary>
        <param name="accessSecret"></param>
        <param name="stringToSign"></param>
        /// <returns></returns>
        string static public MySign (string accessSecret, string stringToSign)
        {
            încearcă
            {
                var hmacsha1 = new HMACSHA1(Encoding.UTF8.GetBytes(accessSecret));
                var dataBuffer = Encoding.UTF8.GetBytes(stringToSign);
                var hashBytes = hmacsha1. ComputeHash(dataBuffer);
                string byte = BitConverter.ToString(hashBytes, 0). Înlocuire("-", coardă. Gol). ToLower();
                octet[] octeți = strToToHexByte(stringbyte);
                return Convert.ToBase64String(bytes);
            }
            catch (excepție ex)
            {

                aruncă ex;
            }
        }
        /// <summary>
        De la șir la un tablou de 16 octeți
        /// </summary>
        <param name="hexString"></param>
        /// <returns></returns>
        byte static privat[] strToHexByte(string hexString)
        {
            hexString = hexString.Replace(" ", "");
            dacă ((hexString.Length % 2) != 0)
                hexString += " ";
            octet[] returnBytes = new byte[hexString.Length / 2];
            pentru (int i = 0; i < returnBytes.Length; i++)
                returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
            return returnBytes;
        }
        /// <summary>
        Mecanisme de procesare a mesajelor
        /// </summary>
        <param name="str"></param>
        /// <returns></returns>
        șirul static privat MessageHandle(string str)
        {
            MessageModel mesaj = JsonConvert.DeserializeObject<MessageModel>(str);
            Rezultatul șirului = "";
            Switch (mesaj. Cod)
            {
                cazul "OK":
                    rezultat = "SMS trimis cu succes!";
                    pauză;
                Cazul "ISP. RAM_PERMISSION_DENY":
                    result = "RAM Permission DENY";
                    pauză;
                Cazul "ISV. OUT_OF_SERVICE":
                    rezultat = "Timp de nefuncționare al afacerii";
                    pauză;
                Cazul "ISV. PRODUCT_UN_SUBSCRIPT":
                    rezultat = "Clienți Alibaba Cloud care nu au deschis produse de comunicații cloud";
                    pauză;
                Cazul "ISV. PRODUCT_UNSUBSCRIBE":
                    rezultat = "Produs nedeschis";
                    pauză;
                Cazul "ISV. ACCOUNT_NOT_EXISTS":
                    rezultat = "Contul nu există";
                    pauză;
                Cazul "ISV. ACCOUNT_ABNORMAL":
                    rezultat = "Excepție de cont";
                    pauză;
                Cazul "isv.SMS_TEMPLATE_ILLEGAL":
                    rezultat = "Șablonul SMS nu este legal";
                    pauză;
                Cazul "isv.SMS_SIGNATURE_ILLEGAL":
                    rezultat = "Semnătura SMS nu este legală";
                    pauză;
                Cazul "ISV. INVALID_PARAMETERS":
                    Rezultat = "excepție de parametru";
                    pauză;
                Cazul "ISV. MOBILE_NUMBER_ILLEGAL":
                    Rezultat = "număr de telefon mobil ilegal";
                    pauză;
                Cazul "ISV. MOBILE_COUNT_OVER_LIMIT":
                    rezultat = "Numărul de numere mobile depășește limita";
                    pauză;
                Cazul "ISV. TEMPLATE_MISSING_PARAMETERS":
                    rezultat = "variabilă lipsă de șablon";
                    pauză;
                Cazul "ISV. BUSINESS_LIMIT_CONTROL":
                    rezultat = "Business Current";
                    pauză;
                Cazul "ISV. INVALID_JSON_PARAM":
                    result = "parametrul JSON nu este legitim, sunt acceptate doar valorile șirurilor";
                    pauză;
                Cazul "ISV. PARAM_LENGTH_LIMIT":
                    rezultat = "Parametrul depășește limita de lungime";
                    pauză;
                Cazul "ISV. PARAM_NOT_SUPPORT_URL":
                    result = "URL nesuportat";
                    pauză;
                Cazul "ISV. AMOUNT_NOT_ENOUGH":
                    rezultat = "Sold insuficient al contului";
                    pauză;
                Cazul "ISV. TEMPLATE_PARAMS_ILLEGAL":
                    result = "Variabilele șablon conțin cuvinte-cheie ilegale";
                    pauză;
            }
            rezultatul returnării;
        }
    }

Scor

Numărul participanților2MB+2 Contribui+2 Colaps rațiune
Mică mizerie + 1 + 1 Dă-i un semn de aprobare
Admin + 1 + 1 Foarte puternic!

Vezi toate ratingurile





Precedent:1000 de clădiri sunt pictate manual și frumoase
Următor:Materiale foste ale Marinei și Armatei Japoneze, PDF
Postat pe 02.12.2018 09:00:04 |
Postat pe 02.12.2018 10:19:01 |
Datorită codului furnizat de proprietar, trimite SMS prin interfața de cerere de simulare HTTP, nu e nevoie să apelezi la un DLL mare, îți dau un semn de aprobare
Postat pe 14.12.2018 16:03:21 |
Toți sunt maeștri
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com