Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 14739|Antwort: 3

[Schnittstelle] C# ruft Alibaba SMS-DLL nicht auf, wie man die HTTP-Schnittstelle zum SMS-Senden verwendet

[Link kopieren]
Veröffentlicht am 01.12.2018 18:37:34 | | |
  Vor einiger Zeit hatte das Unternehmen ein Projekt, das SMS-Benachrichtigungen verwenden musste, und dann habe ich eine Alibaba Cloud SMS für die Entwicklung der SMS-Schnittstelle gekauft. Aber das Projekt läuft auf dem XP-System, also muss das Projekt das Framework von .NET3.5 sein, aber die von Alibaba bereitgestellte SMS-DLL kann nur in .NET 4.0 und höher verwendet werden, was sehr peinlich ist. Glücklicherweise hat Alibaba ein Beispiel für Java für HTTP gegeben, also habe ich versucht, die Methode zu schreiben, Alibaba Cloud HTTP in C# gemäß dem Java-Code zu rufen. Zurück zum Punkt: Geh zum Code! (Ich habe auch in CSDN veröffentlicht, Personality Guarantee ist kein Raubkopie, danke.)  
öffentliche Klasse SendShort
    {
        /// <summary>
        SMS-Schnittstelle C#-Aufrufmethode
        /// </summary>
        <param name="url"></param>
        /// <returns></returns>
        öffentliche statische Zeichenkette GetHtmlFormUrl(String-URL)
        {
            string strRet = null;
            wenn (URL == null || URL. Trim(). ToString() == "")
            {
                return strRet;
            }
            String-Targeturl = URL. Trim(). ToString();
            Versuch es
            {
                HttpWebRequest hr = (HttpWebRequest)WebRequest.Create(targeturl);
                HR. UserAgent = "Mozilla/4.0 (kompatibel; MSIE 6.0; Windows NT 5.1)";
                HR. Methode = "GET";
                HR. Auszeit = 30 * 60 * 1000;
                WebResponse hs = st. GetResponse();
                Stream sr = hs. GetResponseStream();
                StreamReader ser = neuer StreamReader(sr, Encoding.Default);
                strRet = MessageHandle(ser. ReadToEnd());
            }
            catch (Ausnahme z. B.)
            {
               strRet = "SMS gesendet fehlgeschlagen!" +ex. Nachricht;
            }
            return strRet;
        }
        /// <summary>
        Überprüfen Sie, ob die Handynummer legitim ist
        /// </summary>
        <param name="str_handset"></param>
        /// <returns></returns>
        öffentlicher statischer 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-Verifizierungscode
        /// </summary>
        <param name="mobile"></param>
        <param name="code"></param>
        /// <returns></returns>
        öffentlicher statischer String SignDemo (String mobile, int-Code)
        {
            String accessKeyId = "Your accessKeyId";
            string accessSecret = "dein accessSecret";
            String nowDate = DateTime.Now.ToUniversalTime(). ToString("yyyy-MM-dd'T'HH:mm:ss'Z'"); GTM-Zeit
            Dictionary<string, string> keyValues = neuer Dictionary<string, string>(); Deklarieren Sie ein Wörterbuch
            1. Systemparameter
            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"); kann durch XML ersetzt werden

            2. Geschäfts-API-Parameter
            keyValues.Add("Action", "SendSms");
            keyValues.Add("Version", "2017-05-25");
            keyValues.Add("RegionId", "cn-hangzhou");
            keyValues.Add ("PhoneNumbers", mobil);
            keyValues.Add("SignName", "Your Signature");
            keyValues.Add("TemplateParam", "{\"code\":\"" + code + "\"}");
            keyValues.Add("TemplateCode", "Your Template Number");
            keyValues.Add("OutId", "123");

            3. Entfernen Sie das Signatur-Schlüsselwort
            wenn (keyValues.ContainsKey("Signature"))
            {
                keyValues.Remove("Signature");
            }

            4. Parameterschlüsselsortierung
            Dictionary<string, string> ascDic = keyValues.OrderBy(o => o.Key). ToDictionary(o => o.Key, p => p.Value.ToString());
            5. Konstruiere die zu signierte Zeichenkette
            StringBuilder Builder = neuer StringBuilder();
            foreach (var-Element in ascDic)
            {
                wenn (Element. Schlüssel == "SignName")
                {

                }
                oder
                {
                    Bauherr. Anhang ("&"). Anhang(specialUrlEncode(item. Schlüssel)). Anhang("="). Anhang(specialUrlEncode(item. Value));
                }
                wenn (Element. Key == "RegionId")
                {
                    Bauherr. Anhang ("&"). Anhang(specialUrlEncode("SignName")). Anhang("="). Anhang(specialUrlEncode(keyValues["SignName"]));
                }
            }
            String sorteQueryString = Builder. ToString(). Teilstring(1);

            StringBuilder stringToSign = neuer StringBuilder();
            stringToSign.Append("GET"). Anhang ("&");
            stringToSign.Append(specialUrlEncode("/")). Anhang ("&");
            stringToSign.Append(specialUrlEncode(sorteQueryString));

            String Sign = MySign(accessSecret + "&", stringToSign.ToString());
            6. Die Signatur sollte außerdem mit einer speziellen URL am Ende codiert sein.
            String-Signture = specialUrlEncode(Sign);
            Zum Schluss drucken Sie die URL der legitimen GET-Anfrage aus
            String-URL = "http://dysmsapi.aliyuncs.com/?Signature=" + Signture + Builder;
            String result = GetHtmlFormUrl(url);
            Rückgabeergebnis;
        }
        /// <summary>
        URL-Codierung
        /// </summary>
        <param name="value"></param>
        /// <returns></returns>
        öffentliche statische Zeichenkette speziellUrlEncode(String-Temperatur)
        {

            StringBuilder stringBuilder = neuer StringBuilder();
            für (int i = 0; Ich < Temporär. Länge; i++)
            {
                Saite t = temp[i]. ToString();
                string k = HttpUtility.UrlEncode(t, Encoding.UTF8);
                wenn (t == k)
                {
                    stringBuilder.Append(t);
                }
                oder
                {
                    stringBuilder.Append(k.ToUpper());
                }
            }
            return stringBuilder.ToString(). Replace("+", "%20"). Replace("*", "%2A"). ersetzen("%7E", "~");
        }
        /// <summary>
        HMACSHA1 Signatur
        /// </summary>
        <param name="accessSecret"></param>
        <param name="stringToSign"></param>
        /// <returns></returns>
        öffentlicher statischer String MySign (String accessSecret, String stringToSign)
        {
            Versuch es
            {
                var hmacsha1 = new HMACSHA1(Encoding.UTF8.GetBytes(accessSecret));
                var dataBuffer = Encoding.UTF8.GetBytes(stringToSign);
                var hashBytes = hmacsha1. ComputeHash(dataBuffer);
                stringstringbyte = BitConverter.ToString(hashBytes, 0). Replace("-", Schnur. Leer). ToLower();
                byte[] Bytes = strToToHexByte(stringbyte);
                return Convert.ToBase64String(bytes);
            }
            catch (Ausnahme z. B.)
            {

                Throw Ex;
            }
        }
        /// <summary>
        String zu 16-Byte-Array
        /// </summary>
        <param name="hexString"></param>
        /// <returns></returns>
        private statische Byte[] strToToHexByte(String hexString)
        {
            hexString = hexString.Replace(" ", "");
            wenn ((hexString.Length % 2) != 0)
                hexString += " ";
            byte[] returnBytes = neues Byte[hexString.Length / 2];
            für (int i = 0; i < returnBytes.Length; i++)
                returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
            return returnBytes;
        }
        /// <summary>
        Nachrichtenverarbeitungsmechanismen
        /// </summary>
        <param name="str"></param>
        /// <returns></returns>
        private statische Zeichenkette MessageHandle (String str)
        {
            MessageModel message = JsonConvert.DeserializeObject<MessageModel>(str);
            String-Ergebnis = "";
            Switch (Nachricht. Code)
            {
                Fall "OK":
                    Ergebnis = "SMS erfolgreich gesendet!";
                    Unterbrechung;
                Fall "ISP. RAM_PERMISSION_DENY":
                    Ergebnis = "RAM-Berechtigung VERWEIGERT";
                    Unterbrechung;
                Fall "ISV. OUT_OF_SERVICE":
                    Ergebnis = "Betriebsausfall";
                    Unterbrechung;
                Fall "ISV. PRODUCT_UN_SUBSCRIPT":
                    Ergebnis = "Alibaba Cloud-Kunden, die keine Cloud-Kommunikationsprodukte geöffnet haben";
                    Unterbrechung;
                Fall "ISV. PRODUCT_UNSUBSCRIBE":
                    Ergebnis = "Produkt nicht geöffnet";
                    Unterbrechung;
                Fall "ISV. ACCOUNT_NOT_EXISTS":
                    Ergebnis = "Konto existiert nicht";
                    Unterbrechung;
                Fall "ISV. ACCOUNT_ABNORMAL":
                    Ergebnis = "Konto-Ausnahme";
                    Unterbrechung;
                Fall "isv.SMS_TEMPLATE_ILLEGAL":
                    result = "SMS-Vorlage ist nicht legal";
                    Unterbrechung;
                Fall "isv.SMS_SIGNATURE_ILLEGAL":
                    Ergebnis = "SMS-Signatur ist nicht legal";
                    Unterbrechung;
                Fall "ISV. INVALID_PARAMETERS":
                    Ergebnis = "Parameter-Ausnahme";
                    Unterbrechung;
                Fall "ISV. MOBILE_NUMBER_ILLEGAL":
                    Ergebnis = "illegale Mobiltelefonnummer";
                    Unterbrechung;
                Fall "ISV. MOBILE_COUNT_OVER_LIMIT":
                    Ergebnis = "Anzahl der Mobilfunknummern überschreitet die Grenze";
                    Unterbrechung;
                Fall "ISV. TEMPLATE_MISSING_PARAMETERS":
                    Ergebnis = "Vorlage fehlende Variable";
                    Unterbrechung;
                Fall "ISV. BUSINESS_LIMIT_CONTROL":
                    Ergebnis = "Geschäftsaktuell";
                    Unterbrechung;
                Fall "ISV. INVALID_JSON_PARAM":
                    Ergebnis = "JSON-Parameter ist nicht legitim, nur String-Werte werden akzeptiert";
                    Unterbrechung;
                Fall "ISV. PARAM_LENGTH_LIMIT":
                    Ergebnis = "Parameter überschreitet die Längengrenze";
                    Unterbrechung;
                Fall "ISV. PARAM_NOT_SUPPORT_URL":
                    result = "URL nicht unterstützt";
                    Unterbrechung;
                Fall "ISV. AMOUNT_NOT_ENOUGH":
                    Ergebnis = "Unzureichender Kontostand";
                    Unterbrechung;
                Fall "ISV. TEMPLATE_PARAMS_ILLEGAL":
                    result = "Template-Variablen enthalten illegale Schlüsselwörter";
                    Unterbrechung;
            }
            Rückgabeergebnis;
        }
    }

Punktzahl

Anzahl der Teilnehmer2MB+2 beitragen+2 Zusammenbruch Grund
Kleiner Abschaum + 1 + 1 Gib ihm einen Daumen hoch
Administrator + 1 + 1 Sehr mächtig!

Alle Bewertungen sehen





Vorhergehend:1000 Gebäude sind handbemalt und wunderschön
Nächster:Materialien der ehemaligen japanischen Marine und Armee, PDF
Veröffentlicht am 02.12.2018 09:00:04 |
Veröffentlicht am 02.12.2018 10:19:01 |
Dank des vom Besitzer bereitgestellten Codes senden Sie SMS über die HTTP-Simulationsanfragen-Schnittstelle, keine große DLL, Sie geben Ihnen einen Daumen hoch
Veröffentlicht am 14.12.2018 16:03:21 |
Sie sind alle Meister
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com