栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > asp

阿里大鱼简单发送短信功能.net core版

asp 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

阿里大鱼简单发送短信功能.net core版

阿里大鱼还未提供 .net core 版SDK,但提供了相关API,下面是.net core版实现,只是简单发送短信功能: 

using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Security.Cryptography;
using System.Text;
using Newtonsoft.Json;

namespace ConsoleApp1
{
  public class SmsHelper
  {
    public static string Post(string url, string data, Encoding encoding)
    {
      try
      {
 HttpWebRequest req = WebRequest.CreateHttp(new Uri(url));
 req.ContentType = "application/x-www-form-urlencoded;charset=utf-8";
 req.Method = "POST";
 req.Accept = "text/xml,text/javascript";
 req.ContinueTimeout = 60000;

 byte[] postData = encoding.GetBytes(data);
 Stream reqStream = req.GetRequestStreamAsync().Result;
 reqStream.Write(postData, 0, postData.Length);
 reqStream.Dispose();

 var rsp = (HttpWebResponse)req.GetResponseAsync().Result;
 var result = GetResponseAsString(rsp, encoding);
 return result;
      }
      catch (Exception ex)
      {
 throw;
      }
    }

    public static T Post(string url, string data, Encoding encoding)
    {
      try
      {
 var result = Post(url, data, encoding);
 return JsonConvert.DeserializeObject(result);
      }
      catch (Exception ex)
      {
 return default(T);
      }
    }

    public static string BuildQuery(IDictionary parameters)
    {
      if (parameters == null || parameters.Count == 0)
      {
 return null;
      }

      StringBuilder query = new StringBuilder();
      bool hasParam = false;

      foreach (KeyValuePair kv in parameters)
      {
 string name = kv.Key;
 string value = kv.Value;
 // 忽略参数名或参数值为空的参数
 if (!string.IsNullOrEmpty(name) && !string.IsNullOrEmpty(value))
 {
   if (hasParam)
   {
     query.Append("&");
   }

   query.Append(name);
   query.Append("=");
   query.Append(WebUtility.UrlEncode(value));
   hasParam = true;
 }
      }

      return query.ToString();
    }

    public static string GetResponseAsString(HttpWebResponse rsp, Encoding encoding)
    {
      Stream stream = null;
      StreamReader reader = null;

      try
      {
 // 以字符流的方式读取HTTP响应
 stream = rsp.GetResponseStream();
 reader = new StreamReader(stream, encoding);
 return reader.ReadToEnd();
      }
      finally
      {
 // 释放资源
 if (reader != null) reader.Dispose();
 if (stream != null) stream.Dispose();
 if (rsp != null) rsp.Dispose();
      }
    }

    public static string GetAlidayuSign(IDictionary parameters, string secret, string signMethod)
    {
      //把字典按Key的字母顺序排序
      IDictionary sortedParams = new SortedDictionary(parameters, StringComparer.Ordinal);

      //把所有参数名和参数值串在一起
      StringBuilder query = new StringBuilder();
      if (Constants.SIGN_METHOD_MD5.Equals(signMethod))
      {
 query.Append(secret);
      }
      foreach (KeyValuePair kv in sortedParams)
      {
 if (!string.IsNullOrEmpty(kv.Key) && !string.IsNullOrEmpty(kv.Value))
 {
   query.Append(kv.Key).Append(kv.Value);
 }
      }

      //使用MD5/HMAC加密
      if (Constants.SIGN_METHOD_HMAC.Equals(signMethod))
      {
 return Hmac(query.ToString(), secret);
      }
      else
      {
 query.Append(secret);
 return Md5(query.ToString());
      }
    }

    public static string Hmac(string value, string key)
    {
      byte[] bytes;
      using (var hmac = new HMACMD5(Encoding.UTF8.GetBytes(key)))
      {
 bytes = hmac.ComputeHash(Encoding.UTF8.GetBytes(value));
      }
      StringBuilder result = new StringBuilder();
      foreach (byte t in bytes)
      {
 result.Append(t.ToString("X2"));

      }
      return result.ToString();
    }

    public static string Md5(string value)
    {
      byte[] bytes;
      using (var md5 = MD5.Create())
      {
 bytes = md5.ComputeHash(Encoding.UTF8.GetBytes(value));
      }
      var result = new StringBuilder();
      foreach (byte t in bytes)
      {
 result.Append(t.ToString("X2"));
      }
      return result.ToString();
    }

    public static SmsResultAli SendSms(string url, string appKey, string appSecret, DateTime timestamp, Dictionary parsms)
    {
      var txtParams = new SortedDictionary();
      txtParams.Add(Constants.METHOD, "alibaba.aliqin.fc.sms.num.send");
      txtParams.Add(Constants.VERSION, "2.0");
      txtParams.Add(Constants.SIGN_METHOD, Constants.SIGN_METHOD_HMAC);
      txtParams.Add(Constants.APP_KEY, appKey);
      txtParams.Add(Constants.FORMAT, "json");
      txtParams.Add(Constants.TIMESTAMP, timestamp.ToString(Constants.DATE_TIME_FORMAT));
      txtParams.Add(Constants.SMS_TYPE, "normal");
      foreach (var item in parsms)
      {
 txtParams.Add(item.Key,item.Value);
      }

      txtParams.Add(Constants.SIGN, GetAlidayuSign(txtParams, appSecret, Constants.SIGN_METHOD_HMAC));
      var result = Post(url, BuildQuery(txtParams), Encoding.UTF8);

      return result;
    }

  }

  public class SmsResultAli
  {
    public SmsResponseALi Alibaba_Aliqin_Fc_Sms_Num_Send_Response { get; set; }
  }

  public class SmsResponseALi
  {
    public string Request_Id { get; set; }
    public SmsResponseResultAli Result { get; set; }
  }

  public class SmsResponseResultAli
  {
    public string Err_Code { get; set; }

    public string Model { get; set; }

    public bool Success { get; set; }
  }
}

发送短信时:          

var parms = new Dictionary();
  parms.Add(Constants.EXTEND, "123456");
  parms.Add(Constants.REC_NUM, "138********");
  parms.Add(Constants.SMS_FREE_SIGN_NAME, "阿里大鱼");
  parms.Add(Constants.SMS_PARAM, "{"code":"1234","product":"阿里大鱼"}");
  parms.Add(Constants.SMS_TEMPLATE_CODE, "SMS_10000000");

var req = SmsHelper.SendSms("http://gw.api.taobao.com/router/rest", "appKey", "appSecret", DateTime.Now, parms);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/56146.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号