Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 14739|Respuesta: 3

[Interfaz] C# no llama a la dll SMS de Alibaba, cómo usar la interfaz http para enviar SMS

[Copiar enlace]
Publicado en 1/12/2018 18:37:34 | | |
  Hace algún tiempo, la empresa tuvo un proyecto que necesitaba usar notificaciones SMS, y luego compré un SMS en la nube de Alibaba para el desarrollo de interfaces SMS. Pero el proyecto está funcionando en el sistema XP, así que debe ser el framework de .NET3.5, pero la DLL SMS que da Alibaba solo puede usarse en .net 4.0 y superiores, lo cual es muy embarazoso, afortunadamente Alibaba dio un ejemplo de Java para HTTP, así que intenté escribir el método para llamar a Alibaba Cloud HTTP en C# según el código java. Volviendo al tema, ¡ve al código! (También he publicado en CSDN, la garantía de personalidad no es una publicación pirata, gracias)  
clase pública SendShort
    {
        /// <summary>
        Método de llamada C# de interfaz SMS
        /// </summary>
        <param name="url"></param>
        /// <returns></returns>
        cadena estática pública GetHtmlFormUrl(string url)
        {
            string stret = nulo;
            if (url == null || url. Trim(). ToString() == "")
            {
                regresar strRet;
            }
            string targeturl = url. Trim(). ToString();
            Prueba
            {
                HttpWebRequest hr = (HttpWebRequest)WebRequest.Create(targeturl);
                HR. UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";
                HR. Método = "GET";
                HR. Tiempo muerto = 30 * 60 * 1000;
                WebResponse hs = hr. GetResponse();
                Stream sr = hs. GetResponseStream();
                StreamReader ser = new StreamReader(sr, Encoding.Default);
                strRet = MessageHandle(ser. ReadToEnd());
            }
            catch (excepción ex)
            {
               strRet = "¡SMS enviado fallido!" +ex. Mensaje;
            }
            regresar strRet;
        }
        /// <summary>
        Verifica que el número de móvil sea legítimo
        /// </summary>
        <param name="str_handset"></param>
        /// <returns></returns>
        bool estático público IsHandset(string str_handset)
        {
            return System.Text.RegularExpressions.Regex.IsMatch(str_handset, @"^1[3|4|5|7|8][0-9]\d{8}$");
        }
        /// <summary>
        Código de verificación SMS
        /// </summary>
        <param name="móvil"></param>
        <param name="code"></param>
        /// <returns></returns>
        cadena pública estática SignDemo(cadena móvil, código int)
        {
            cadena accessKeyId = "Tu accesoKeyId ";
            cadena accessSecret = "tu accesoSecreto";
            cadena ahoraFecha = FechaTiempo.Ahora.ParaTiempoUniversal(). ToString("yyyy-MM-dd'T'HH:mm:ss'Z'"); Hora GTM
            Diccionario<cadena, cadena> claveValores = nuevo Diccionario<cadena, cadena>(); Declarar un diccionario
            1. Parámetros del 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"); puede ser reemplazado por XML

            2. Parámetros de la API empresarial
            keyValues.Add("Acción", "EnviarMensajes");
            keyValues.Add("Version", "2017-05-25");
            keyValues.Add("RegionId", "cn-hangzhou");
            keyValues.Add("TeléfonoNúmeros", móvil);
            keyValues.Add("SignName", "Tu Firma");
            keyValues.Add("TemplateParam", "{\"code\":\"" + code + "\"}");
            keyValues.Add("TemplateCode", "Tu Número de Plantilla");
            keyValues.Add("OutId", "123");

            3. Eliminar la palabra clave signature
            si (keyValues.ContainsKey("Signature"))
            {
                keyValues.Remove("Signature");
            }

            4. Ordenación de claves de parámetros
            Diccionario<cadena, cadena> ascDic = keyValues.OrderBy(o => o.Key). ToDictionary(o => o.Key, p => p.Value.ToString());
            5. Construir la cadena a ser signada
            Constructor de cadenas = nuevo Constructor de cadenas();
            foreach (ítem var en ascDic)
            {
                si (ítem. Clave == "NombreDeSigno")
                {

                }
                si no,
                {
                    Constructor. Apend("&"). Append(specialUrlEncode(item. Clave)). Append("="). Append(specialUrlEncode(item. Valor));
                }
                si (ítem. Key == "RegionId")
                {
                    Constructor. Apend("&"). Append(specialUrlEncode("SignName")). Append("="). Append(specialUrlEncode(keyValues["SignName"]));
                }
            }
            cadena sorteQueryString = constructor. ToString(). Subcuerda(1);

            StringBuilder stringToSign = nuevo StringBuilder();
            stringToSign.Append("GET"). Apend("&");
            stringToSign.Append(specialUrlEncode("/")). Apend("&");
            stringToSign.Append(specialUrlEncode(sorteQueryString));

            string Sign = MiSigno(accesoSecreto + "&", cadenaDeSigno.ToString());
            6. La firma también debe estar codificada con una URL especial al final
            signture de cadena = specialUrlEncode(Sign);
            Por último, imprime la URL de la solicitud legítima de GET
            URL de cadena = "http://dysmsapi.aliyuncs.com/?Signature=" + señal + constructor;
            resultado de cadena = GetHtmlFormUrl(url);
            resultado de retorno;
        }
        /// <summary>
        Codificación de URL
        /// </summary>
        <param name="value"></param>
        /// <returns></returns>
        cadena estática pública specialUrlEncode(string temp)
        {

            StringBuilder stringBuilder = nuevo StringBuilder();
            para (int i = 0; Yo < temperatura. Longitud; i++)
            {
                cadena t = temp[i]. ToString();
                cadena k = HttpUtility.UrlEncode(t, Encoding.UTF8);
                if (t == k)
                {
                    stringBuilder.Append(t);
                }
                si no,
                {
                    stringBuilder.Append(k.ToUpper());
                }
            }
            return stringBuilder.ToString(). Replace("+", "%20"). Replace("*", "%2A"). Replace("%7E", "~");
        }
        /// <summary>
        HMACSHA1 firma
        /// </summary>
        <param name="accessSecret"></param>
        <param name="stringToSign"></param>
        /// <returns></returns>
        cadena estática pública MySign (cadena accessSecret, cadena stringToSign)
        {
            Prueba
            {
                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). Reemplazar("-", cuerda. Vacío). ToLower();
                byte[] bytes = strToToHexByte(stringbyte);
                return Convert.ToBase64String(bytes);
            }
            catch (excepción ex)
            {

                lanzar ex;
            }
        }
        /// <summary>
        Cadena a matriz de 16 bytes
        /// </summary>
        <param name="hexString"></param>
        /// <returns></returns>
        byte estático privado[] strToHexByte(string hexString)
        {
            hexString = hexString.Replace(" ", "");
            si ((hexString.Length % 2) != 0)
                hexString += " ";
            byte[] returnBytes = new byte[hexString.Length / 2];
            para (int i = 0; i < returnBytes.Length; i++)
                returnBytes[i] = Convertir.ToByte(hexString.Substring(i * 2, 2), 16);
            return returnBytes;
        }
        /// <summary>
        Mecanismos de procesamiento de mensajes
        /// </summary>
        <param name="str"></param>
        /// <returns></returns>
        cadena estática privada MessageHandle(string str)
        {
            MessageModel message = JsonConvert.DeserializeObject<MessageModel>(str);
            resultado de la cadena = "";
            Interruptor (mensaje. Código)
            {
                caso "OK":
                    resultat = "¡SMS enviado con éxito!";
                    pausa;
                Caso "ISP. RAM_PERMISSION_DENY":
                    resultado = "RAM Permission DENY";
                    pausa;
                Caso "ISV. OUT_OF_SERVICE":
                    resultado = "Tiempo de inactividad empresarial";
                    pausa;
                Caso "ISV. PRODUCT_UN_SUBSCRIPT":
                    resultado = "Clientes de Alibaba Cloud que no han abierto productos de comunicación en la nube";
                    pausa;
                Caso "ISV. PRODUCT_UNSUBSCRIBE":
                    resultado = "Producto no abierto";
                    pausa;
                Caso "ISV. ACCOUNT_NOT_EXISTS":
                    resultado = "Account does not exist";
                    pausa;
                Caso "ISV. ACCOUNT_ABNORMAL":
                    resultado = "Excepción de cuenta";
                    pausa;
                Caso "isv.SMS_TEMPLATE_ILLEGAL":
                    resultado = "La plantilla SMS no es legal";
                    pausa;
                Caso "isv.SMS_SIGNATURE_ILLEGAL":
                    resultado = "La firma SMS no es legal";
                    pausa;
                Caso "ISV. INVALID_PARAMETERS":
                    resultado = "excepción de parámetro";
                    pausa;
                Caso "ISV. MOBILE_NUMBER_ILLEGAL":
                    resultado = "número de teléfono móvil ilegal";
                    pausa;
                Caso "ISV. MOBILE_COUNT_OVER_LIMIT":
                    resultado = "El número de números móviles supera el límite";
                    pausa;
                Caso "ISV. TEMPLATE_MISSING_PARAMETERS":
                    resultado = "plantilla que falta variable";
                    pausa;
                Caso "ISV. BUSINESS_LIMIT_CONTROL":
                    resultado = "Business Current";
                    pausa;
                Caso "ISV. INVALID_JSON_PARAM":
                    resultat = "el parámetro JSON no es legítimo, solo se aceptan los valores de cadena";
                    pausa;
                Caso "ISV. PARAM_LENGTH_LIMIT":
                    resultado = "El parámetro excede el límite de longitud";
                    pausa;
                Caso "ISV. PARAM_NOT_SUPPORT_URL":
                    resultado = "URL no soportada";
                    pausa;
                Caso "ISV. AMOUNT_NOT_ENOUGH":
                    resultado = "Saldo insuficiente de la cuenta";
                    pausa;
                Caso "ISV. TEMPLATE_PARAMS_ILLEGAL":
                    result = "Las variables plantilla contienen palabras clave ilegales";
                    pausa;
            }
            resultado de retorno;
        }
    }

Puntuación

Número de participantes2MB+2 contribuir+2 Colapso razón
Pequeña basura + 1 + 1 Dale un pulgar arriba
Admin + 1 + 1 ¡Muy poderoso!

Ver todas las valoraciones





Anterior:1000 edificios están pintados a mano y son hermosos
Próximo:Materiales de la antigua Marina y Ejército japonés, PDF
Publicado en 2/12/2018 9:00:04 |
Publicado en 2/12/2018 10:19:01 |
Gracias al código proporcionado por el propietario, envía SMS a través de la interfaz de simulación HTTP de solicitud, no hace falta llamar a una dll grande, te dará un pulgar arriba
Publicado en 14/12/2018 16:03:21 |
Todos son maestros
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com