Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 14739|Répondre: 3

[Interface] C# n’appelle pas la DLL SMS Alibaba, comment utiliser l’interface http pour envoyer des SMS

[Copié le lien]
Publié sur 01/12/2018 18:37:34 | | |
  Il y a quelque temps, l’entreprise avait un projet nécessitant l’utilisation des notifications SMS, puis j’ai acheté un SMS Alibaba Cloud pour le développement d’interfaces SMS. Mais le projet tourne sur le système XP, donc il doit être le cadre de .NET3.5, mais la DLL SMS fournie par Alibaba ne peut être utilisée qu’en .net 4.0 et supérieur, ce qui est très embarrassant ; heureusement, Alibaba a donné un exemple de Java pour HTTP, alors j’ai essayé d’écrire la méthode d’appel d’Alibaba Cloud HTTP en C# selon le code Java. Revenons au sujet, allez au code ! (J’ai aussi publié dans CSDN, la garantie de personnalité n’est pas un post piraté, merci)  
classe publique SendShort
    {
        /// <summary>
        Méthode d’appel C# de l’interface SMS
        /// </summary>
        <param name="url"></param>
        /// <returns></returns>
        chaîne statique publique GetHtmlFormUrl(url de chaîne)
        {
            string stret = nul ;
            if (url == null || url. Trim(). ToString() == «  »)
            {
                retour de la Retraite ;
            }
            Cibleurl de chaîne = URL. Trim(). ToString() ;
            essaie
            {
                HttpWebRequest hr = (HttpWebRequest)WebRequest.Create(targeturl) ;
                HR. UserAgent = « Mozilla/4.0 (compatible ; MSIE 6.0 ; Windows NT 5.1) » ;
                HR. Méthode = « GET » ;
                HR. Temps mort = 30 * 60 * 1000 ;
                WebResponse hs = hr. GetResponse() ;
                Stream sr = hs. GetResponseStream() ;
                StreamReader ser = new StreamReader(sr, Encoding.Default) ;
                strRet = MessageHandle(ser. ReadToEnd()) ;
            }
            catch (Exception ex)
            {
               strRet = « SMS envoyé échoué ! » +ex. Message;
            }
            retour de la Retraite ;
        }
        /// <summary>
        Vérifiez que le numéro de portable est légitime
        /// </summary>
        <param name="str_handset"></param>
        /// <returns></returns>
        bool statique public IsHandset(string str_handset)
        {
            return System.Text.RegularExpressions.Regex.IsMatch(str_handset, @"^1[3|4|5|7|8][0-9]\d{8}$ ») ;
        }
        /// <summary>
        Code de vérification SMS
        /// </summary>
        <param name="mobile"></param>
        <param name="code"></param>
        /// <returns></returns>
        chaîne statique publique SignDemo(chaîne mobile, code int)
        {
            chaîne accessKeyId = « Your accessKeyId » ;
            chaîne accessSecret = « votre accessSecret » ;
            chaîne maintenantDoutDeuxTemps = DateTime.Now.ToUniversalTime(). ToString(« yyyy-mm-dd’T’HH :mm :ss’Z' ») ; Heure GTM
            Dictionnaire<chaîne, chaîne> keyValues = nouveau dictionnaire<chaîne, chaîne>() ; Déclarer un dictionnaire
            1. Paramètres du système
            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 ») ; peut être remplacé par XML

            2. Paramètres de l’API métier
            keyValues.Add(« Action « , « SendSms ») ;
            keyValues.Add(« Version », « 2017-05-25 ») ;
            keyValues.Add(« RegionId », « cn-hangzhou ») ;
            keyValues.Add(« PhoneNumbers », mobile) ;
            keyValues.Add(« NomDeSigne », « Votre Signature ») ;
            keyValues.Add(« TemplateParam », « {\"code\ » :\" » + code + « \"} ») ;
            keyValues.Add(« TemplateCode », « Votre numéro de modèle ») ;
            keyValues.Add(« OutId », « 123 ») ;

            3. Supprimer le mot-clé signature
            if (keyValues.ContainsKey(« Signature »))
            {
                valeurs-clés.Supper(« Signature ») ;
            }

            4. Tri des clés de paramètres
            Dictionnaire<chaîne, chaîne> ascDic = valeurs-clé.OrderBy(o => o.Key). ToDictionary(o => o.Key, p => p.Value.ToString()) ;
            5. Construire la chaîne à signer
            Constructeur de StringBuilder = nouveau Constructeur de String() ;
            foreach (objet var dans ascDic)
            {
                if (item. Clé == « SignName »)
                {

                }
                sinon
                {
                    constructeur. Appender(« & »). Append(specialUrlEncode(item. Clé)). Appendice(« = »). Append(specialUrlEncode(item. Value) ;
                }
                if (item. Clé == « RegionId)
                {
                    constructeur. Appender(« & »). Append(specialUrlEncode(« SignName »)). Appendice(« = »). Append(specialUrlEncode(keyValues["SignName"])) ;
                }
            }
            chaîne sorteQueryString = constructeur. ToString(). Sous-chaîne(1) ;

            StringBuilder stringToSign = nouveau StringBuilder() ;
            stringToSign.Append(« GET « ). Appender(« & ») ;
            stringToSign.Append(specialUrlEncode(« / »)). Appender(« & ») ;
            stringToSign.Append(specialUrlEncode(sorteQueryString)) ;

            string Sign = MonSign(accessSecret + « & », stringToSign.ToString()) ;
            6. La signature doit également être encodée avec une URL spéciale à la fin
            chaîne signture = specialUrlEncode(Sign) ;
            Enfin, imprimez l’URL de la demande GET légitime
            URL de chaîne = « http://dysmsapi.aliyuncs.com/?Signature= » + signture + constructeur ;
            résultat de chaîne = GetHtmlFormUrl(url) ;
            résultat de retour ;
        }
        /// <summary>
        Codage d’URL
        /// </summary>
        <param name="value"></param>
        /// <returns></returns>
        chaîne statique publique specialUrlEncode(string temp)
        {

            StringBuilder chaenConstructeur = nouveau StringBuilder() ;
            pour (int i = 0 ; J’ai < la température. Longueur ; i++)
            {
                chaîne t = temp[i]. ToString() ;
                chaîne k = HttpUtility.UrlEncode(t, Encoding.UTF8) ;
                if (t == k)
                {
                    stringBuilder.Append(t) ;
                }
                sinon
                {
                    stringBuilder.Append(k.ToUpper()) ;
                }
            }
            return stringBuilder.ToString(). Remplacer(« + », « %20 »). Remplacer (« * », « %2A »). Replace(« %7E », « ~ ») ;
        }
        /// <summary>
        HMACSHA1 signature
        /// </summary>
        <param name="accessSecret"></param>
        <param name="stringToSign"></param>
        /// <returns></returns>
        chaîne statique publique MySign (chaîne accessSecret, chaîne stringToSign)
        {
            essaie
            {
                var hmacsha1 = new HMACSHA1(Encoding.UTF8.GetBytes(accessSecret)) ;
                var dataBuffer = Encoding.UTF8.GetBytes(stringToSign) ;
                var hashBytes = hmacsha1. ComputeHash(dataBuffer) ;
                stringbyte = BitConverter.ToString(hashBytes, 0). Remplace(« -« , corde. Vide). Abaisser() ;
                octet[] octets = strToToHexByte(stringbyte) ;
                return Convert.ToBase64String(bytes) ;
            }
            catch (Exception ex)
            {

                jeter son ex ;
            }
        }
        /// <summary>
        Chaîne vers tableau de 16 octets
        /// </summary>
        <param name="hexString"></param>
        /// <returns></returns>
        octet statique privé[] strToToHexByte(chaîne hexagonale)
        {
            hexString = hexString.Replace( » « , «  ») ;
            si ((hexString.Length % 2) != 0)
                hexString += " « ;
            octet[] returnBytes = nouvel octet[hexString.Length / 2] ;
            pour (int i = 0 ; i < returnBytes.Length ; i++)
                returnBytes[i] = Convert.ToByte(hexString.Sous-chaîne(i * 2, 2), 16) ;
            return returnBytes ;
        }
        /// <summary>
        Mécanismes de traitement des messages
        /// </summary>
        <param name="str"></param>
        /// <returns></returns>
        chaîne statique privée MessageHandle(string str)
        {
            MessageModel message = JsonConvert.DeserializeObject<MessageModel>(str) ;
            résultat de la chaîne = «  » ;
            Switch (message. Code)
            {
                Cas « OK » :
                    résultat = « SMS envoyé avec succès ! » ;
                    pause ;
                Cas « ISP. RAM_PERMISSION_DENY » :
                    résultat = « REFUS de RAM » ;
                    pause ;
                Cas « ISV. OUT_OF_SERVICE » :
                    résultat = « Temps d’arrêt de l’activité » ;
                    pause ;
                Cas « ISV. PRODUCT_UN_SUBSCRIPT » :
                    résultat = « Clients Alibaba Cloud qui n’ont pas ouvert de produits de communication cloud » ;
                    pause ;
                Cas « ISV. PRODUCT_UNSUBSCRIBE » :
                    résultat = « Produit non ouvert » ;
                    pause ;
                Cas « ISV. ACCOUNT_NOT_EXISTS » :
                    résultat = « Le compte n’existe pas » ;
                    pause ;
                Cas « ISV. ACCOUNT_ABNORMAL » :
                    résultat = « Exception de compte » ;
                    pause ;
                Cas « isv.SMS_TEMPLATE_ILLEGAL » :
                    résultat = « Le modèle SMS n’est pas légal » ;
                    pause ;
                Cas « isv.SMS_SIGNATURE_ILLEGAL » :
                    résultat = « La signature SMS n’est pas légale » ;
                    pause ;
                Cas « ISV. INVALID_PARAMETERS » :
                    résultat = « exception de paramètre » ;
                    pause ;
                Cas « ISV. MOBILE_NUMBER_ILLEGAL » :
                    résultat = « numéro de téléphone mobile illégal » ;
                    pause ;
                Cas « ISV. MOBILE_COUNT_OVER_LIMIT » :
                    résultat = « Le nombre de numéros mobiles dépasse la limite » ;
                    pause ;
                Cas « ISV. TEMPLATE_MISSING_PARAMETERS » :
                    résultat = « variable manquante » modèle ;
                    pause ;
                Cas « ISV. BUSINESS_LIMIT_CONTROL » :
                    résultat = « Business Current » ;
                    pause ;
                Cas « ISV. INVALID_JSON_PARAM » :
                    résultat = « le paramètre JSON n’est pas légitime, seules les valeurs de chaîne sont acceptées » ;
                    pause ;
                Cas « ISV. PARAM_LENGTH_LIMIT » :
                    résultat = « Le paramètre dépasse la limite de longueur » ;
                    pause ;
                Cas « ISV. PARAM_NOT_SUPPORT_URL » :
                    résultat = « URL non prise en charge » ;
                    pause ;
                Cas « ISV. AMOUNT_NOT_ENOUGH » :
                    résultat = « Solde de compte insuffisant » ;
                    pause ;
                Cas « ISV. TEMPLATE_PARAMS_ILLEGAL » :
                    résultat = « Les variables modèles contiennent des mots-clés illégaux » ;
                    pause ;
            }
            résultat de retour ;
        }
    }

Score

Nombre de participants2MO+2 contribuer+2 Effondrement raison
Petite ordure + 1 + 1 Donne-lui un pouce en l’air
Admin + 1 + 1 Très puissant !

Voir toutes les notes





Précédent:1000 bâtiments sont peints à la main et magnifiques
Prochain:Anciens matériaux de la Marine et de l’Armée japonaises, PDF
Publié sur 02/12/2018 09:00:04 |
Publié sur 02/12/2018 10:19:01 |
Grâce au code fourni par le propriétaire, envoyez un SMS via l’interface de requête de simulation HTTP, pas besoin d’appeler une grosse DLL, vous donnerez un pouce levé
Publié sur 14/12/2018 16:03:21 |
Ils sont tous maîtres
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com