Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 14739|Απάντηση: 3

[Διεπαφή] Το C# δεν καλεί το Alibaba SMS dll, πώς να χρησιμοποιήσετε τη διεπαφή http για την αποστολή SMS

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 1/12/2018 6:37:34 μ.μ. | | |
  Πριν από λίγο καιρό, η εταιρεία είχε ένα έργο που έπρεπε να χρησιμοποιεί ειδοποιήσεις SMS και στη συνέχεια αγόρασα ένα Alibaba Cloud SMS για ανάπτυξη διεπαφής SMS. Αλλά το έργο εκτελείται στο σύστημα XP, επομένως το έργο πρέπει να είναι το πλαίσιο του .NET3.5, αλλά το SMS DLL που δίνεται από την Alibaba μπορεί να χρησιμοποιηθεί μόνο σε .net 4.0 και νεότερη έκδοση, κάτι που είναι πολύ ενοχλητικό, ευτυχώς η Alibaba έδωσε ένα παράδειγμα java για HTTP, οπότε προσπάθησα να γράψω τη μέθοδο κλήσης του Alibaba Cloud HTTP σε C# σύμφωνα με τον κώδικα java. Πίσω στο θέμα, πηγαίνετε στον κώδικα! (Έχω δημοσιεύσει και στο CSDN, η εγγύηση προσωπικότητας δεν είναι πειρατική ανάρτηση, ευχαριστώ)  
δημόσια τάξη SendShort
    {
        /// <summary>
        Διεπαφή SMS Μέθοδος κλήσης C#
        /// </summary>
        <όνομα παραμέτρου ="url"></param>
        /// <returns></returns>
        δημόσια στατική συμβολοσειρά GetHtmlFormUrl(string url)
        {
            συμβολοσειρά strRet = null;
            αν (url == null || url. Trim(). ToString() == "")
            {
                επιστροφή strRet;
            }
            συμβολοσειρά targeturl = διεύθυνση URL. Trim(). ToString();
            Δοκιμάστε
            {
                HttpWebRequest hr = (HttpWebRequest)WebRequest.Create(targeturl);
                hr. UserAgent = "Mozilla/4.0 (συμβατό; MSIE 6.0; Windows NT 5.1)";
                hr. Μέθοδος = "GET";
                hr. Χρονικό όριο = 30 * 60 * 1000;
                WebResponse hs = ώρα. GetResponse();
                Ρεύμα sr = hs. GetResponseStream();
                StreamReader ser = νέο StreamReader(sr, Encoding.Default);
                strRet = MessageHandle(ser. ReadToEnd());
            }
            αλιεύματα (Εξαίρεση π.χ.)
            {
               strRet = "Το SMS που στάλθηκε απέτυχε!" +π.χ. Μήνυμα;
            }
            επιστροφή strRet;
        }
        /// <summary>
        Βεβαιωθείτε ότι ο αριθμός κινητού τηλεφώνου είναι νόμιμος
        /// </summary>
        <όνομα παραμέτρου ="str_handset"></param>
        /// <returns></returns>
        δημόσιο στατικό bool IsHandset (string str_handset)
        {
            επιστροφή System.Text.RegularExpressions.Regex.IsMatch(str_handset, @"^1[3|4|5|7|8][0-9]\d{8}$");
        }
        /// <summary>
        Κωδικός επαλήθευσης SMS
        /// </summary>
        <όνομα παραμέτρου = "κινητό"></param>
        <όνομα παραμέτρου = "κωδικός"></param>
        /// <returns></returns>
        δημόσια στατική συμβολοσειρά SignDemo (συμβολοσειρά για κινητά, int κώδικας)
        {
            συμβολοσειρά accessKeyId = "Το accessKeyId σας";
            συμβολοσειρά accessSecret = "το accessSecret σας";
            συμβολοσειρά nowDate = DateTime.Now.ToUniversalTime(). ToString("εεεε-MM-ηη'T'HH:mm:ss'Z'"); Ώρα GTM
            Λεξικό<συμβολοσειρά, συμβολοσειρά> keyValues = νέο λεξικό<συμβολοσειρά, συμβολοσειρά>(); Δήλωση λεξικού
            1. Παράμετροι συστήματος
            keyValues.Add("SignatureMethod", "HMAC-SHA1");
            keyValues.Add("SignatureNonce", Guid.NewGuid(). ToString());
            keyValues.Add("AccessKeyId", accessKeyId);
            keyValues.Add("SignatureVersion", "1.0");
            keyValues.Add("Χρονική σήμανση", nowDate);
            keyValues.Add("Μορφή", "Json"); μπορεί να αντικατασταθεί με XML

            2. Παράμετροι API επιχείρησης
            keyValues.Add("Ενέργεια", "SendSms");
            keyValues.Add("Έκδοση", "25-05-2017");
            keyValues.Add("RegionId", "cn-hangzhou");
            keyValues.Add("PhoneNumbers", κινητό);
            keyValues.Add("SignName", "Η υπογραφή σας");
            keyValues.Add("TemplateParam", "{\"code\":\"" + code + "\"}");
            keyValues.Add("TemplateCode", "Ο αριθμός του προτύπου σας");
            keyValues.Add("OutId", "123");

            3. Καταργήστε τη λέξη-κλειδί υπογραφής
            if (keyValues.ContainsKey("Υπογραφή"))
            {
                keyValues.Remove("Υπογραφή");
            }

            4. Ταξινόμηση κλειδιού παραμέτρων
            Λεξικό<συμβολοσειρά, συμβολοσειρά> ascDic = keyValues.OrderBy(o => o.Key). ToDictionary(o => o.Key, p => p.Value.ToString());
            5. Κατασκευάστε τη συμβολοσειρά που θα υπογραφεί
            StringBuilder builder = νέο StringBuilder();
            foreach (στοιχείο var στο ascDic)
            {
                αν (στοιχείο. Κλειδί == "SignName")
                {

                }
                αλλιώς
                {
                    οικοδόμος. Προσάρτημα("&"). Append(specialUrlEncode(item. Key)). Append("="). Append(specialUrlEncode(item. Value));
                }
                αν (στοιχείο. Κλειδί == "RegionId")
                {
                    οικοδόμος. Προσάρτημα("&"). Append(specialUrlEncode("SignName")). Append("="). Append(specialUrlEncode(keyValues["SignName"]));
                }
            }
            συμβολοσειρά sorteQueryString = δημιουργός. ToString(). Υποσυμβολοσειρά(1);

            StringBuilder stringToSign = νέο StringBuilder();
            stringToSign.Append("GET"). Προσάρτημα("&");
            stringToSign.Append(specialUrlEncode("/")). Προσάρτημα("&");
            stringToSign.Append(specialUrlEncode(sorteQueryString));

            συμβολοσειρά Sign = MySign(accessSecret + "&", stringToSign.ToString());
            6. Η υπογραφή θα πρέπει επίσης να κωδικοποιηθεί με μια ειδική διεύθυνση URL στο τέλος
            συμβολοσειρά = specialUrlEncode(Sign);
            Τέλος, εκτυπώστε τη διεύθυνση URL του νόμιμου αιτήματος GET
            url συμβολοσειράς = "http://dysmsapi.aliyuncs.com/?Signature=" + signture + builder;
            αποτέλεσμα συμβολοσειράς = GetHtmlFormUrl(url);
            αποτέλεσμα επιστροφής?
        }
        /// <summary>
        Κωδικοποίηση URL
        /// </summary>
        <όνομα παραμέτρου = "τιμή"></param>
        /// <returns></returns>
        δημόσια στατική συμβολοσειρά specialUrlEncode(string temp)
        {

            StringBuilder stringBuilder = νέο StringBuilder();
            για (int i = 0; Το I < temp. Μήκος; i++)
            {
                συμβολοσειρά t = temp[i]. ToString();
                συμβολοσειρά k = HttpUtility.UrlEncode(t, Encoding.UTF8);
                αν (t == k)
                {
                    stringBuilder.Append(t);
                }
                αλλιώς
                {
                    stringBuilder.Append(k.ToUpper());
                }
            }
            επιστροφή stringBuilder.ToString(). Αντικατάσταση("+", "%20"). Αντικατάσταση("*", "%2A"). Αντικατάσταση("%7E", "~");
        }
        /// <summary>
        HMACSHA1 υπογραφή
        /// </summary>
        <όνομα παραμέτρου ="accessSecret"></param>
        <όνομα παραμέτρου ="stringToSign"></param>
        /// <returns></returns>
        δημόσια στατική συμβολοσειρά MySign(συμβολοσειρά accessSecret, συμβολοσειρά stringToSign)
        {
            Δοκιμάστε
            {
                var hmacsha1 = νέο HMACSHA1(Encoding.UTF8.GetBytes(accessSecret));
                var dataBuffer = Κωδικοποίηση.UTF8.GetBytes(stringToSign);
                var hashBytes = hmacsha1. ComputeHash(dataBuffer);
                stringbyte συμβολοσειράς = BitConverter.ToString(hashBytes, 0). Αντικαθιστώ("-", συμβολοσειρά. Άδειο). ToLower();
                byte[] bytes = strToToHexByte(stringbyte);
                επιστροφή Convert.ToBase64String(bytes);
            }
            αλιεύματα (Εξαίρεση π.χ.)
            {

                ρίξε πρώην?
            }
        }
        /// <summary>
        Συμβολοσειρά σε πίνακα 16 byte
        /// </summary>
        <όνομα παραμέτρου ="hexString"></param>
        /// <returns></returns>
        ιδιωτικό στατικό byte[] strToToHexByte(συμβολοσειρά hexString)
        {
            hexString = hexString.Replace(" ", "");
            if ((hexString.Length % 2) != 0)
                hexString += " ";
            byte[] returnBytes = νέο byte[hexString.Length / 2];
            για (int i = 0; i < returnBytes.Length; i++)
                returnBytes[i] = Μετατροπή.ToByte(hexString.Substring(i * 2, 2), 16);
            επιστροφή returnBytes;
        }
        /// <summary>
        Μηχανισμοί επεξεργασίας μηνυμάτων
        /// </summary>
        <όνομα παραμέτρου ="str"></param>
        /// <returns></returns>
        ιδιωτική στατική συμβολοσειρά MessageHandle(string str)
        {
            Μήνυμα MessageModel = JsonConvert.DeserializeObject<MessageModel>(str);
            αποτέλεσμα συμβολοσειράς = "";
            διακόπτης (μήνυμα. Κωδικός)
            {
                περίπτωση "OK":
                    αποτέλεσμα = "Το SMS στάλθηκε με επιτυχία!";
                    διάλειμμα;
                Υπόθεση "ISP. RAM_PERMISSION_DENY":
                    αποτέλεσμα = "ΑΡΝΗΣΗ άδειας RAM";
                    διάλειμμα;
                Υπόθεση "ISV. OUT_OF_SERVICE":
                    αποτέλεσμα = "Διακοπή λειτουργίας της επιχείρησης";
                    διάλειμμα;
                Υπόθεση "ISV. PRODUCT_UN_SUBSCRIPT":
                    αποτέλεσμα = "Πελάτες Alibaba Cloud που δεν έχουν ανοίξει προϊόντα επικοινωνίας cloud".
                    διάλειμμα;
                Υπόθεση "ISV. PRODUCT_UNSUBSCRIBE":
                    αποτέλεσμα = "Το προϊόν δεν έχει ανοιχτεί";
                    διάλειμμα;
                Υπόθεση "ISV. ACCOUNT_NOT_EXISTS":
                    αποτέλεσμα = "Ο λογαριασμός δεν υπάρχει";
                    διάλειμμα;
                Υπόθεση "ISV. ACCOUNT_ABNORMAL":
                    αποτέλεσμα = "Εξαίρεση λογαριασμού";
                    διάλειμμα;
                Περίπτωση "isv.SMS_TEMPLATE_ILLEGAL":
                    αποτέλεσμα = "Το πρότυπο SMS δεν είναι νόμιμο";
                    διάλειμμα;
                Υπόθεση "isv.SMS_SIGNATURE_ILLEGAL":
                    αποτέλεσμα = "Η υπογραφή SMS δεν είναι νόμιμη";
                    διάλειμμα;
                Υπόθεση "ISV. INVALID_PARAMETERS":
                    αποτέλεσμα = "εξαίρεση παραμέτρου";
                    διάλειμμα;
                Υπόθεση "ISV. MOBILE_NUMBER_ILLEGAL":
                    αποτέλεσμα = "παράνομος αριθμός κινητού τηλεφώνου"·
                    διάλειμμα;
                Υπόθεση "ISV. MOBILE_COUNT_OVER_LIMIT":
                    αποτέλεσμα = "Ο αριθμός των αριθμών κινητών τηλεφώνων υπερβαίνει το όριο";
                    διάλειμμα;
                Υπόθεση "ISV. TEMPLATE_MISSING_PARAMETERS":
                    αποτέλεσμα = "λείπει μεταβλητή από το πρότυπο";
                    διάλειμμα;
                Υπόθεση "ISV. BUSINESS_LIMIT_CONTROL":
                    αποτέλεσμα = "Επιχειρηματικό ρεύμα";
                    διάλειμμα;
                Υπόθεση "ISV. INVALID_JSON_PARAM":
                    αποτέλεσμα = "Η παράμετρος JSON δεν είναι νόμιμη, μόνο οι τιμές συμβολοσειράς γίνονται δεκτές";
                    διάλειμμα;
                Υπόθεση "ISV. PARAM_LENGTH_LIMIT":
                    αποτέλεσμα = "Η παράμετρος υπερβαίνει το όριο μήκους";
                    διάλειμμα;
                Υπόθεση "ISV. PARAM_NOT_SUPPORT_URL":
                    αποτέλεσμα = "Η διεύθυνση URL δεν υποστηρίζεται";
                    διάλειμμα;
                Υπόθεση "ISV. AMOUNT_NOT_ENOUGH":
                    αποτέλεσμα = "Ανεπαρκές υπόλοιπο λογαριασμού",
                    διάλειμμα;
                Υπόθεση "ISV. TEMPLATE_PARAMS_ILLEGAL":
                    result = "Οι μεταβλητές προτύπου περιέχουν παράνομες λέξεις-κλειδιά";
                    διάλειμμα;
            }
            αποτέλεσμα επιστροφής?
        }
    }

Παρτιτούρα

Αριθμός συμμετεχόντων2ΜΒ+2 συνεισφέρω+2 Κατάρρευση λόγος
Μικρά αποβράσματα + 1 + 1 Δώστε του ένα μπράβο
διαχειριστής + 1 + 1 Πολύ δυνατό!

Δείτε όλες τις αξιολογήσεις





Προηγούμενος:1000 κτίρια είναι ζωγραφισμένα στο χέρι και όμορφα
Επόμενος:Πρώην Ιαπωνικό Ναυτικό και Υλικά Στρατού, PDF
Δημοσιεύτηκε στις 2/12/2018 9:00:04 π.μ. |
Δημοσιεύτηκε στις 2/12/2018 10:19:01 π.μ. |
Χάρη στον κωδικό που παρέχεται από τον ιδιοκτήτη, στείλτε SMS μέσω της διεπαφής αιτήματος προσομοίωσης HTTP, δεν χρειάζεται να καλέσετε ένα μεγάλο dll, σας δίνει ένα μπράβο
Δημοσιεύτηκε στις 14/12/2018 4:03:21 μ.μ. |
Είναι όλοι κύριοι
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com