Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 14739|Risposta: 3

[Interfaccia] C# non chiama la dll SMS di Alibaba, come usare l'interfaccia http per inviare SMS

[Copiato link]
Pubblicato su 01/12/2018 18:37:34 | | |
  Tempo fa, l'azienda aveva un progetto che richiedeva l'uso delle notifiche SMS, e poi ho acquistato un SMS su Alibaba Cloud per lo sviluppo di un'interfaccia SMS. Ma il progetto gira sul sistema XP, quindi deve essere il framework di .NET3.5, ma la DLL SMS fornita da Alibaba può essere usata solo in .net 4.0 e superiori, il che è molto imbarazzante; fortunatamente Alibaba ha fornito un esempio di Java per HTTP, così ho provato a scrivere il metodo per chiamare Alibaba Cloud HTTP in C# secondo il codice Java. Tornando al punto, vai al codice! (Ho anche pubblicato su CSDN, la garanzia di personalità non è un post piratato, grazie)  
Classe pubblica SendShort
    {
        /// <summary>
        Metodo di chiamata C# dell'interfaccia SMS,
        /// </summary>
        <param name="url"></param>
        /// <returns></returns>
        stringa statica pubblica GetHtmlFormUrl(string url)
        {
            stringa strRet = nullo;
            if (url == null || url. Trim(). ToString() == "")
            {
                ritorno strRet;
            }
            stringa targeturl = URL. Trim(). ToString();
            prova
            {
                HttpWebRequest hr = (HttpWebRequest)WebRequest.Create(targeturl);
                HR. UserAgent = "Mozilla/4.0 (compatibile; MSIE 6.0; Windows NT 5.1)";
                HR. Metodo = "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 (eccezione ex)
            {
               strRet = "SMS inviato fallito!" +es. Messaggio;
            }
            ritorno strRet;
        }
        /// <summary>
        Verifica che il numero di cellulare sia legittimo
        /// </summary>
        <param name="str_handset"></param>
        /// <returns></returns>
        bool statico pubblico IsHandset(string str_handset)
        {
            return System.Text.RegularExpressions.Regex.IsMatch(str_handset, @"^1[3|4|5|7|8][0-9]\d{8}$");
        }
        /// <summary>
        Codice di verifica SMS
        /// </summary>
        <param name="mobile"></param>
        <param name="code"></param>
        /// <returns></returns>
        stringa statica pubblica SignDemo(stringa mobile, codice int)
        {
            stringa accessKeyId = "Il tuo accessKeyId ";
            stringa accessSecret = "il tuo accessSecret";
            stringa oraData = Ora.Ora.ATempoUniversale(). ToString("yyy-MM-dd'T'HH:mm:ss'Z'"); Orario GTM
            Dizionario<stringa, stringa> chiaveValori = nuovo Dizionario<stringa, stringa>(); Dichiara un dizionario
            1. Parametri di sistema
            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"); può essere sostituito con XML

            2. Parametri dell'API aziendale
            keyValues.Add("Action", "SendSms");
            keyValues.Add("Version", "2017-05-25");
            keyValues.Add("RegionId", "cn-hangzhou");
            keyValues.Add("PhoneNumbers", mobile);
            keyValues.Add("NomeSegno", "La tua Firma");
            keyValues.Add("TemplateParam", "{\"code\":\"" + code + "\"}");
            keyValues.Add("TemplateCode", "Il tuo numero template");
            keyValues.Add("OutId", "123");

            3. Rimuovere la parola chiave signature
            if (keyValues.ContainsKey("Signature"))
            {
                chiaveValori.Remove("Firma");
            }

            4. Ordinamento delle chiavi dei parametri
            Dizionario<stringa, stringa> ascDic = keyValues.OrderBy(o => o.Key). ToDictionary(o => o.Key, p => p.Value.ToString());
            5. Costruire la stringa da segnatura
            StringBuilder builder = nuovo StringBuilder();
            foreach (oggetto var in ascDic)
            {
                se (item. Chiave == "SignName")
                {

                }
                altrimenti
                {
                    muratore. Appendere("&"). Append(specialUrlEncode(item. Importante)). Appendere("="). Append(specialUrlEncode(item. Valore));
                }
                se (item. Chiave == "RegionId")
                {
                    muratore. Appendere("&"). Append(specialUrlEncode("SignName")). Appendere("="). Append(specialUrlEncode(keyValues["SignName"]));
                }
            }
            stringeQueryString = builder. ToString(). Sottostringa(1);

            StringBuilder stringToSign = nuovo StringBuilder();
            stringToSign.Appende("GET"). Appendere("&");
            stringToSign.Append(specialUrlEncode("/")). Appendere("&");
            stringToSign.Append(specialUrlEncode(sorteQueryString));

            stringa Sign = MySign(accessSecret + "&", stringToSign.ToString());
            6. La firma dovrebbe anche essere codificata con un URL speciale alla fine
            stringa signture = specialUrlEncode(Sign);
            Infine, stampa l'URL della richiesta GET legittima
            URL stringa = "http://dysmsapi.aliyuncs.com/?Signature=" + segnale + costruttore;
            string result = GetHtmlFormUrl(url);
            risultato di ritorno;
        }
        /// <summary>
        Codifica URL
        /// </summary>
        <param name="value"></param>
        /// <returns></returns>
        stringa statica pubblica specialUrlEncode(string temp)
        {

            StringBuilder stringBuilder = nuovo StringBuilder();
            per (int i = 0; Ho < temperatura. Lunghezza; i++)
            {
                stringa t = temp[i]. ToString();
                stringa k = HttpUtility.UrlEncode(t, Encoding.UTF8);
                if (t == k)
                {
                    stringBuilder.Append(t);
                }
                altrimenti
                {
                    stringBuilder.Append(k.ToUpper());
                }
            }
            return stringBuilder.ToString(). Sostituisci("+", "%20"). Sostituire("*", "%2A"). Sostituire("%7E", "~");
        }
        /// <summary>
        HMACSHA1 firma
        /// </summary>
        <param name="accessSecret"></param>
        <param name="stringToSign"></param>
        /// <returns></returns>
        stringa statica pubblica MySign (stringa accessSecret, stringaSignoStringa)
        {
            prova
            {
                var hmacsha1 = new HMACSHA1(Encoding.UTF8.GetBytes(accessSecret));
                var dataBuffer = Encoding.UTF8.GetBytes(stringToSign);
                var hashBytes = hmacsha1. ComputeHash(dataBuffer);
                stringbyte = BitConverter.ToString(hashBytes, 0). Sostituisci("-", corda. Vuoto). ToLower();
                byte[] byte = strToToHexByte(stringbyte);
                return Convert.ToBase64String(bytes);
            }
            catch (eccezione ex)
            {

                buttare l'ex;
            }
        }
        /// <summary>
        Stringa a array da 16 byte
        /// </summary>
        <param name="hexString"></param>
        /// <returns></returns>
        byte statico privato[] strToToHexByte(stringstringa hexString)
        {
            hexString = hexString.Replace(" ", "");
            se ((hexString.Length % 2) != 0)
                hexString += " ";
            byte[] returnBytes = nuovo byte[hexString.Length / 2];
            per (int i = 0; i < returnBytes.Length; i++)
                returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
            return returnBytes;
        }
        /// <summary>
        Meccanismi di elaborazione dei messaggi
        /// </summary>
        <param name="str"></param>
        /// <returns></returns>
        stringa statica privata MessageHandle(stringa str)
        {
            MessageModel message = JsonConvert.DeserializeObject<MessageModel>(str);
            risultato della stringa = "";
            Switch (messaggio. Codice)
            {
                caso "OK":
                    risultato = "SMS inviato con successo!";
                    pausa;
                Caso "ISP. RAM_PERMISSION_DENY":
                    risultato = "RAM Permesso NEGA";
                    pausa;
                Caso "ISV. OUT_OF_SERVICE":
                    risultato = "Tempo di inattività aziendale";
                    pausa;
                Caso "ISV. PRODUCT_UN_SUBSCRIPT":
                    risultato = "Clienti Alibaba Cloud che non hanno aperto prodotti di comunicazione cloud";
                    pausa;
                Caso "ISV. PRODUCT_UNSUBSCRIBE":
                    risultato = "Prodotto non aperto";
                    pausa;
                Caso "ISV. ACCOUNT_NOT_EXISTS":
                    risultato = "Account non esiste";
                    pausa;
                Caso "ISV. ACCOUNT_ABNORMAL":
                    risultato = "Eccezione Conto";
                    pausa;
                Caso "isv.SMS_TEMPLATE_ILLEGAL":
                    risultato = "Il template SMS non è legale";
                    pausa;
                Caso "isv.SMS_SIGNATURE_ILLEGAL":
                    risultato = "La firma SMS non è legale";
                    pausa;
                Caso "ISV. INVALID_PARAMETERS":
                    risultato = "eccezione parametro";
                    pausa;
                Caso "ISV. MOBILE_NUMBER_ILLEGAL":
                    risultato = "numero di cellulare illegale";
                    pausa;
                Caso "ISV. MOBILE_COUNT_OVER_LIMIT":
                    risultato = "Il numero di numeri di cellulare supera il limite";
                    pausa;
                Caso "ISV. TEMPLATE_MISSING_PARAMETERS":
                    risultato = "variabile mancante del template";
                    pausa;
                Caso "ISV. BUSINESS_LIMIT_CONTROL":
                    risultato = "Business Current";
                    pausa;
                Caso "ISV. INVALID_JSON_PARAM":
                    risultato = "Il parametro JSON non è legittimo, sono accettati solo i valori delle stringhe";
                    pausa;
                Caso "ISV. PARAM_LENGTH_LIMIT":
                    risultato = "Il parametro supera il limite di lunghezza";
                    pausa;
                Caso "ISV. PARAM_NOT_SUPPORT_URL":
                    risultato = "URL non supportato";
                    pausa;
                Caso "ISV. AMOUNT_NOT_ENOUGH":
                    risultato = "Saldo del conto insufficiente";
                    pausa;
                Caso "ISV. TEMPLATE_PARAMS_ILLEGAL":
                    result = "Le variabili template contengono parole chiave illegali";
                    pausa;
            }
            risultato di ritorno;
        }
    }

Punteggio

Numero di partecipanti2MB+2 contribuire+2 Collasso ragione
Piccola feccia + 1 + 1 Dagli il pollice in su
Admin + 1 + 1 Molto potente!

Vedi tutte le valutazioni





Precedente:1000 edifici sono dipinti a mano e bellissimi
Prossimo:Materiali dell'ex Marina e dell'Esercito Giapponese, PDF
Pubblicato su 02/12/2018 09:00:04 |
Pubblicato su 02/12/2018 10:19:01 |
Grazie al codice fornito dal proprietario, invia un SMS tramite l'interfaccia di richiesta di simulazione HTTP, non serve chiamare una dll grande, ti dà il pollice in su
Pubblicato su 14/12/2018 16:03:21 |
Sono tutti maestri
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com