Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 14739|Resposta: 3

[Interface] C# não chama a dll SMS do Alibaba, como usar interface http para enviar SMS

[Copiar link]
Publicado em 01/12/2018 18:37:34 | | |
  Há algum tempo, a empresa teve um projeto que precisava usar notificações por SMS, e então comprei um SMS na nuvem Alibaba para desenvolvimento de interfaces SMS. Mas o projeto está rodando no sistema XP, então o projeto deve ser a estrutura do .NET3.5, mas o DLL SMS fornecido pelo Alibaba só pode ser usado em .net 4.0 e superiores, o que é muito constrangedor, felizmente o Alibaba deu um exemplo de Java para HTTP, então tentei escrever o método para chamar o Alibaba Cloud HTTP em C# de acordo com o código java. Voltando ao ponto, vá ao código! (Também publiquei no CSDN, garantia de personalidade não é um post pirata, obrigado)  
Classe pública SendShort
    {
        /// <summary>
        Método de chamada C# da interface SMS
        /// </summary>
        <param name="url"></param>
        /// <returns></returns>
        string estática pública GetHtmlFormUrl(string url)
        {
            stringstrings strRet = nulo;
            if (url == null || url. Trim(). ToString() == "")
            {
                retorne strRet;
            }
            string targeturl = url. Trim(). ToString();
            tente
            {
                HttpWebRequest hr = (HttpWebRequest)WebRequest.Create(targeturl);
                HR. UserAgent = "Mozilla/4.0 (compatível; MSIE 6.0; Windows NT 5.1)";
                HR. Método = "GET";
                HR. Tempo de descanso = 30 * 60 * 1000;
                WebResponse hs = hr. GetResponse();
                Stream sr = hs. GetResponseStream();
                StreamReader ser = new StreamReader(sr, Encoding.Default);
                strRet = MessageHandle(ser. ReadToEnd());
            }
            captura (exceção ex)
            {
               strRet = "SMS enviado falhou!" +ex. Mensagem;
            }
            retorne strRet;
        }
        /// <summary>
        Verifique se o número de celular é 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 verificação por SMS
        /// </summary>
        <param name="mobile"></param>
        <param name="code"></param>
        /// <returns></returns>
        string estática pública SignDemo(string mobile, int code)
        {
            stringstringAccessKeyId = "Seu acessKeyId ";
            stringstring: accessSecret = "seu acessoSecreto";
            string nowData = Tempo.Agora.ParaTempoUniversal(). ToString("yyy-MM-dd'T'HH:mm:ss'Z'"); Horário GTM
            Dicionário<string, string> keyValues = novo Dicionário<string, string>(); Declare um dicionário
            1. Parâmetros do sistema
            keyValues.Add("SignatureMethod", "HMAC-SHA1");
            keyValues.Add("SignatureNonce", Guid.NewGuid(). ToString());
            keyValues.Add("AccessKeyId", accessKeyId);
            keyValues.Add("SignatureVersion", "1.0");
            keyValues.Add("Timestamp", agoraData);
            keyValues.Add("Format", "Json"); pode ser substituído por XML

            2. Parâmetros da API empresarial
            keyValues.Add("Ação", "EnviarSms");
            keyValues.Add("Version", "2017-05-25");
            keyValues.Add("RegionId", "cn-hangzhou");
            keyValues.Add("PhoneNumbers", celular);
            keyValues.Add("NomeDeSinal", "Sua Assinatura");
            keyValues.Add("TemplateParam", "{\"code\":\"" + code + "\"}");
            keyValues.Add("TemplateCode", "Seu Número do Modelo");
            keyValues.Add("OutId", "123");

            3. Remover a palavra-chave de assinatura
            if (keyValues.ContainsKey("Assinatura"))
            {
                keyValues.Remove("Assinatura");
            }

            4. Ordenação de chaves de parâmetros
            Dicionário<string, string> ascDic = keyValue.OrderBy(o => o.Key). ToDictionary(o => o.Key, p => p.Value.ToString());
            5. Construa a cadeia a ser com sinal
            Construtor de Strings = novo Construtor de Cadeias();
            foreach (item var em ascDic)
            {
                se (item. Chave == "NomeDeAssinamento")
                {

                }
                senão
                {
                    construtor. Apender("&"). Append(specialUrlEncode(item. Chave)). Append("="). Append(specialUrlEncode(item. Valor));
                }
                se (item. Chave == "RegionId")
                {
                    construtor. Apender("&"). Append(specialUrlEncode("SignName")). Append("="). Append(specialUrlEncode(keyValues["SignName"]));
                }
            }
            string sorteQueryString = construtor. ToString(). Substring(1);

            StringBuilder stringToSign = novo StringBuilder();
            stringToSign.Append("GET"). Apêndice("&");
            stringToSign.Append(specialUrlEncode("/")). Apêndice("&");
            stringToSign.Append(specialUrlEncode(sorteQueryString));

            string Sign = MySign(accessSecret + "&", stringToSign.ToString());
            6. A assinatura também deve ser codificada com uma URL especial no final
            string signture = specialUrlEncode(Sign);
            Por fim, imprima a URL da solicitação legítima do GET
            string url = "http://dysmsapi.aliyuncs.com/?Signature=" + sinestria + construtor;
            string result = GetHtmlFormUrl(url);
            resultado do retorno;
        }
        /// <summary>
        Codificação de URL
        /// </summary>
        <param name="value"></param>
        /// <returns></returns>
        string estática pública specialUrlEncode(string temp)
        {

            StringBuilder stringBuilder = novo StringBuilder();
            para (int i = 0; Eu < temperatura. Comprimento; i++)
            {
                string t = temp[i]. ToString();
                string k = HttpUtility.UrlEncode(t, Encoding.UTF8);
                if (t == k)
                {
                    stringBuilder.Append(t);
                }
                senão
                {
                    stringBuilder.Append(k.ToUpper());
                }
            }
            return stringBuilder.ToString(). Substituir("+", "%20"). Replace("*", "%2A"). Replace("%7E", "~");
        }
        /// <summary>
        HMACSHA1 assinatura
        /// </summary>
        <nome do param="acessoSecreto"></param>
        <param name="stringToSign"></param>
        /// <returns></returns>
        string estática pública MySign (stringstringAccessSecret, stringstringToSign)
        {
            tente
            {
                var hmacsha1 = new HMACSHA1(Encoding.UTF8.GetBytes(accessSecret));
                var dataBuffer = Encoding.UTF8.GetBytes(stringToSign);
                var hashBytes = hmacsha1. ComputeHash(dataBuffer);
                stringbyte = BitConverter.ParaString(hashBytes, 0). Substituir("-", corda. Vazio). ToLower();
                byte[] bytes = strToHexByte(stringbyte);
                return Convert.ToBase64String(bytes);
            }
            captura (exceção ex)
            {

                jogar ex;
            }
        }
        /// <summary>
        String para array de 16 bytes
        /// </summary>
        <param name="hexString"></param>
        /// <returns></returns>
        byte estático privado[] strToToHexByte(string hexadecimal)
        {
            hexString = hexString.Replace(" ", "");
            se ((hexString.Comprimento % 2) != 0)
                hexString += " ";
            byte[] returnBytes = novo byte[hexString.Length / 2];
            para (int i = 0; i < returnBytes.Length; i++)
                returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
            return returnBytes;
        }
        /// <summary>
        Mecanismos de processamento de mensagens
        /// </summary>
        <param name="str"></param>
        /// <returns></returns>
        string estática privada MessageHandle(string str)
        {
            MessageModel mensagem = JsonConvert.DeserializeObject<MessageModel>(str);
            resultado da string = "";
            Switch (mensagem. Código)
            {
                caso "OK":
                    resultado = "SMS enviado bem-sucedido!";
                    intervalo;
                Caso "ISP. RAM_PERMISSION_DENY":
                    resultado = "PERMISSÃO RAM NEGAR";
                    intervalo;
                Caso "ISV. OUT_OF_SERVICE":
                    resultado = "Tempo de inatividade do negócio";
                    intervalo;
                Caso "ISV. PRODUCT_UN_SUBSCRIPT":
                    resultado = "Clientes da Alibaba Cloud que não abriram produtos de comunicação em nuvem";
                    intervalo;
                Caso "ISV. PRODUCT_UNSUBSCRIBE":
                    resultado = "Produto não aberto";
                    intervalo;
                Caso "ISV. ACCOUNT_NOT_EXISTS":
                    resultado = "Conta não existe";
                    intervalo;
                Caso "ISV. ACCOUNT_ABNORMAL":
                    resultado = "Exceção da Conta";
                    intervalo;
                Caso "isv.SMS_TEMPLATE_ILLEGAL":
                    resultado = "O modelo SMS não é legal";
                    intervalo;
                Caso "isv.SMS_SIGNATURE_ILLEGAL":
                    resultado = "Assinatura SMS não é legal";
                    intervalo;
                Caso "ISV. INVALID_PARAMETERS":
                    resultado = "exceção de parâmetro";
                    intervalo;
                Caso "ISV. MOBILE_NUMBER_ILLEGAL":
                    resultado = "número de celular ilegal";
                    intervalo;
                Caso "ISV. MOBILE_COUNT_OVER_LIMIT":
                    resultado = "Número de números móveis ultrapassa o limite";
                    intervalo;
                Caso "ISV. TEMPLATE_MISSING_PARAMETERS":
                    resultado = "variável faltando no template";
                    intervalo;
                Caso "ISV. BUSINESS_LIMIT_CONTROL":
                    resultado = "Business Current";
                    intervalo;
                Caso "ISV. INVALID_JSON_PARAM":
                    resultado = "O parâmetro JSON não é legítimo, apenas valores de string são aceitos";
                    intervalo;
                Caso "ISV. PARAM_LENGTH_LIMIT":
                    resultado = "Parâmetro excede o limite de comprimento";
                    intervalo;
                Caso "ISV. PARAM_NOT_SUPPORT_URL":
                    resultado = "URL não suportada";
                    intervalo;
                Caso "ISV. AMOUNT_NOT_ENOUGH":
                    resultado = "Saldo insuficiente da conta";
                    intervalo;
                Caso "ISV. TEMPLATE_PARAMS_ILLEGAL":
                    resultado = "Variáveis modelo contêm palavras-chave ilegais";
                    intervalo;
            }
            resultado do retorno;
        }
    }

Pontuação

Número de participantes2MB+2 contribuir+2 Colapso razão
Pequeno + 1 + 1 Dê um joinha
admin + 1 + 1 Muito poderoso!

Veja todas as classificações





Anterior:1000 edifícios são pintados à mão e lindos
Próximo:Materiais da Marinha e do Exército Japoneses, PDF
Publicado em 02/12/2018 09:00:04 |
Publicado em 02/12/2018 10:19:01 |
Graças ao código fornecido pelo proprietário, envie SMS pela interface de simulação HTTP de solicitação, sem necessidade de chamar uma DLL grande, te dou um sinal positivo
Publicado em 14/12/2018 16:03:21 |
Todos são mestres
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com