C#WebApI发送短信

官方文档:http://smsow.zhenzikj.com/doc/java_sdk_doc.html
新建一个C#类用来存放榛子科技的SDK

using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Text;
using System.Web;
using System.Security.Cryptography.X509Certificates;
using System.Net.Security;

namespace ZhenziSms
{
    public class ZhenziSmsClient
    {
        private static readonly string DEFAULT_CHARSET = "UTF-8";
        private static readonly int CONNECTION_TIMEOUT = 20 * 1000;
        private static readonly int READ_TIMEOUT = 20 * 1000;
        private String apiUrl = "";
        private string appId;
        private string appSecret;

        public ZhenziSmsClient(string apiUrl, string appId, string appSecret)
        {
            this.apiUrl = apiUrl;
            this.appId = appId;
            this.appSecret = appSecret;
        }
        public String Send(Dictionary<string, Object> parameters)
        {
            parameters.Add("appId", appId);
            parameters.Add("appSecret", appSecret);
            var result = DoPost(apiUrl + "/sms/v2/send.do", parameters, DEFAULT_CHARSET, CONNECTION_TIMEOUT,
                    READ_TIMEOUT);
            return result;
        }

        public String Balance()
        {
            var parameters = new Dictionary<string, Object>();
            parameters.Add("appId", appId);
            parameters.Add("appSecret", appSecret);

            var result = DoPost(apiUrl + "/account/balance.do",
                parameters,
                DEFAULT_CHARSET,
                CONNECTION_TIMEOUT,
                READ_TIMEOUT);
            return result;
        }
        public String FindSmsByMessageId(string messageId)
        {
            var parameters = new Dictionary<string, Object>();
            parameters.Add("appId", appId);
            parameters.Add("appSecret", appSecret);
            parameters.Add("messageId", messageId);
            var result = DoPost(apiUrl + "/smslog/findSmsByMessageId.do",
                parameters,
                DEFAULT_CHARSET,
                CONNECTION_TIMEOUT,
                READ_TIMEOUT);
            return result;
        }
        private string DoPost(string url, Dictionary<string, Object> parameters, string charset, int connectionTimeout, int readTimeout)
        {
            var ret = string.Empty;
            var contentType = "application/x-www-form-urlencoded;charset=" + charset;
            var encoding = BuildEncoding(charset);
            var query = BuildQuery(parameters, encoding);
            var queryBytes = encoding.GetBytes(query);
            var httpRequest = BuildRequest(url, contentType, queryBytes);

            var requestStream = httpRequest.GetRequestStream();
            requestStream.Write(queryBytes, 0, queryBytes.Length);

            using (var rsp = httpRequest.GetResponse())
            {
                using (var rspStream = rsp.GetResponseStream())
                {
                    using (var streamReader = new StreamReader(rspStream))
                    {
                        ret = streamReader.ReadToEnd();
                    }
                }
            }

            return ret;

        }
        private Encoding BuildEncoding(string charset)
        {
            var encoding = Encoding.UTF8;
            if (!string.IsNullOrEmpty(charset))
            {
                encoding = Encoding.GetEncoding(charset);
            }

            return encoding;
        }

        private HttpWebRequest BuildRequest(string url, string contentType, byte[] queryBytes)
        {
            HttpWebRequest httpRequest = null;
            if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
            {
                //ServicePointManager.SecurityProtocol = spt; //不指定,使之自动协商/适应, 避免指定的版本与服务器不一样反而连不上
                ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
                httpRequest = WebRequest.Create(url) as HttpWebRequest;
                httpRequest.ProtocolVersion = HttpVersion.Version10;
            }
            else
            {
                httpRequest = WebRequest.Create(url) as HttpWebRequest;
            }
            httpRequest.Method = "POST";
            httpRequest.ContentType = contentType;
            httpRequest.Accept = "text/xml,text/javascript,text/html";
            httpRequest.ContentLength = queryBytes.Length;
            return httpRequest;
        }

        /// <summary>
        /// 默认charset为UTF-8
        /// </summary>
        /// <param name="parameters"></param>
        /// <param name="charset"></param>
        /// <returns></returns>
        public String BuildQuery(Dictionary<string, Object> parameters, Encoding encoding)
        {
            if ((parameters == null) || (parameters.Count == 0))
            {
                return string.Empty;
            }

            var query = new StringBuilder();

            foreach (var kvp in parameters)
            {
                String name = kvp.Key;
                Object obj = kvp.Value;
                var value = "";
                if (obj.GetType() == typeof(string[]))
                    value = ToJSONString((string[])obj);
                else
                    value = obj.ToString();
                if (!string.IsNullOrEmpty(name))
                {
                    query.Append(name).Append("=").Append(HttpUtility.UrlEncode(value, encoding));
                    query.Append("&");
                }
            }
            if(query.Length > 0)
                query.Remove(query.Length - 1, 1);
            return query.ToString();
        }
        private bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
        {
            return true; //总是接受
        }
        ///数组转json字符串
        private String ToJSONString(string[] array)
        {
            if (array == null)
                return "[]";
            StringBuilder sb = new StringBuilder();
            sb.Append("[");
            foreach (string item in array)
            {
                String val = Escape(item);
                sb.Append("\"");
                sb.Append(val);
                sb.Append("\"");
                sb.Append(",");
            }
            if (sb.Length > 1)
                sb.Remove(sb.Length - 1, 1);
            sb.Append("]");
            return sb.ToString();
        }
        
        ///字符转义
        private string Escape(string s)
        {
            StringBuilder sb = new StringBuilder();
            foreach (char c in s)
            {
                switch (c)
                {
                    case '\"':
                        sb.Append("\\\"");
                        break;
                    case '\\':
                        sb.Append("\\\\");
                        break;
                    case '/':
                        sb.Append("\\/");
                        break;
                    case '\b':
                        sb.Append("\\b");
                        break;
                    case '\f':
                        sb.Append("\\f");
                        break;
                    case '\n':
                        sb.Append("\\n");
                        break;
                    case '\r':
                        sb.Append("\\r");
                        break;
                    case '\t':
                        sb.Append("\\t");
                        break;
                    default:
                        sb.Append(c);
                        break;
                }
            }
            return sb.ToString();
        }
    }
    
}

调用刚才封装的类,传入参数

 //发短信验证码
        [HttpGet]
        public string SendSMS()
        {
            HttpContext context = HttpContext.Current;
            //获取要发送短信的手机号
            var Phone = context.Request.QueryString["phone"].ToString();
            //生成随机验证码
            Random random = new Random();
            string yzm = random.Next(1000, 9999).ToString();
            //调用封装的发短信接口 去榛子官网下载SDK,把ZhenziSmsClient类引入进来
            var client = new ZhenziSmsClient("https://sms_developer.zhenzikj.com", "AppID", "AppSecret");

            var parameters = new Dictionary<string, Object>();
            //选择短信模板
            parameters.Add("templateId", "1");
            //手机号
            parameters.Add("number", Phone);           
            var templateParams = new string[2];
            //占位符验证码
            templateParams[0] = yzm;
            //有效时间
            templateParams[1] = "5分钟";
            parameters.Add("templateParams", templateParams);
            //短信返回状态code为0成功,否则失败
            var result = client.Send(parameters);           
            return result;
        }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值