C#WinFrom实现东时方短信接口平台,发送短信

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;

namespace NoteSMS
{
    public class Note
    {
        public Note()
        {

        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="_x_eid">企业ID</param>
        /// <param name="_x_uid">账号</param>
        /// <param name="_x_pwd">登陆密码</param>
        /// <param name="_x_pwd_md5">登陆密码MD5值</param>
        /// <param name="_x_gate_id">短信通道</param>
        public Note(string _x_eid, string _x_uid, string _x_pwd, string _x_pwd_md5, string _x_gate_id)
        {
            x_eid = _x_eid;
            x_uid = _x_uid;
            x_pwd = _x_pwd;
            x_pwd_md5 = _x_pwd_md5;
            x_gate_id = _x_gate_id;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="_x_eid">企业ID</param>
        /// <param name="_x_uid">账号</param>
        /// <param name="_x_pwd">登陆密码</param>
        /// <param name="_x_pwd_md5">登陆密码MD5值</param>
        /// <param name="_x_gate_id">短信通道</param>
        /// <param name="_apiurl">网关地址:    GB2312网关 http://gateway.woxp.cn:6630/gb2312/web_api/   UTF-8网关(为空时默认) http://gateway.woxp.cn:6630/utf8/web_api/</param>
        /// <param name="_apicode">apiurl对应的编码类型:utf8、gb2312,为空时默认utf8</param>
        public Note(string _x_eid, string _x_uid, string _x_pwd, string _x_pwd_md5, string _x_gate_id, string _apiurl, string _apicode)
        {
             
            x_eid = _x_eid;
            x_uid = _x_uid;
            x_pwd = _x_pwd;
            x_pwd_md5 = _x_pwd_md5;
            x_gate_id = _x_gate_id;
            apiurl = _apiurl;
            apicode = _apicode;
        }
        #region 参数
        //http://www.woxp.cn/
        //http://www.xhsms.com/
        /// <summary>
        /// 企业ID
        /// </summary>
        private string _x_eid = "XXXXXX ";
        /// <summary>
        /// 短信通道
        /// </summary>
        private string _x_gate_id = "300";
        /// <summary>
        /// 账号
        /// </summary>
        private string _x_uid = "XXXXXX ";
        /// <summary>
        /// 登陆密码MD5值
        /// </summary>
        private string _x_pwd_md5 = "E10ADC3949BA59ABBE56E057F20F883E";//
        /// <summary>
        /// 登陆密码
        /// </summary>
        private string _x_pwd = "123456";
        /// <summary>
        ///  apiurl对应的编码类型:utf8、gb2312
        /// </summary>
        private string _apicode = "utf8";
        /// <summary>
        /// 请求的api地址
        /// </summary>
        private string _apiurl = "http://gateway.woxp.cn:6630/utf8/web_api/";

        /// <summary>
        /// 企业ID
        /// </summary>
        public string x_eid
        {
            get
            {
                return _x_eid;
            }

            set
            {
                _x_eid = value;
            }
        }
        /// <summary>
        /// 账号
        /// </summary>
        public string x_uid
        {
            get
            {
                return _x_uid;
            }

            set
            {
                _x_uid = value;
            }
        }
        /// <summary>
        /// 登陆密码MD5值
        /// </summary>
        public string x_pwd_md5
        {
            get
            {
                return _x_pwd_md5;
            }

            set
            {
                _x_pwd_md5 = value;
            }
        }
        /// <summary>
        /// 短信通道
        /// </summary>
        public string x_gate_id
        {
            get
            {
                return _x_gate_id;
            }

            set
            {
                if (value == "")
                {
                    _x_gate_id = "300";
                }
                _x_gate_id = value;
            }
        }
        /// <summary>
        /// 密码
        /// </summary>
        public string x_pwd
        {
            get
            {
                return _x_pwd;
            }

            set
            {
                _x_pwd = value;
            }
        }

        /// <summary>
        /// 请求的api地址
        /// </summary>
        public string apiurl
        {
            get
            {
                return _apiurl;
            }

            set
            {
                if (value.Trim() == "")
                {
                    _apiurl = "http://gateway.woxp.cn:6630/utf8/web_api/";
                }
                else
                {
                    _apiurl = value;
                }
            }
        }

        /// <summary>
        /// apiurl对应的编码类型:utf8、gb2312
        /// </summary>
        public string apicode
        {
            get
            {
                return _apicode;
            }

            set
            {
                if (value.Trim() == "utf8")
                {
                    _apicode = "";
                    return;
                }
                _apicode = value;
            }
        }
    
        #endregion

        #region Web Service引用实现发送短信
        //Web Service引用,项目好像是好.net2.0才行
        //Web Service地址:    GB2312网关 http://gateway.woxp.cn:6630/gb2312/ws_api/WebSMS.asmx
        //         UTF-8 网关 http://gateway.woxp.cn:6630/utf8/ws_api/WebSMS.asmx
        private cn.woxp.gateway.WebSMS wsms = new cn.woxp.gateway.WebSMS();
        private string strIdentity = "";
        /// <summary>
        /// 如果TargetNo为空或者MsgContent为空或者boGetAcount=true
        /// </summary>
        /// <param name="TargetNo">发送对方的手机号码,多个用','分开。每次最多提交100条.是否支持移动还是联通或者小灵通请参考通道说明</param>
        /// <param name="MsgContent">发送短信内容,长度要求请参考通道说明</param>
        /// <param name="boGetAcount">是否获取短信剩余条件</param>
        /// <returns>st|msg;st>0=成功</returns>
        public string sendMsg(string TargetNo, string MsgContent, bool boGetAcount)
        {
            string result = "";
            try
            {
                int Eid = Int32.Parse(x_eid);
                string uid = x_uid;// this.t_uid.Text.ToString().Trim();
                string pwd = x_pwd;// this.t_pwd.Text.ToString().Trim();
                int gateId = Int32.Parse(x_gate_id);
                #region 获取网关身份识别字符串, 供网关功能调用前的验证
                //公共参数说明
                //string eid_pwd_gateId
                //详细说明
                //用户身份标识串, 由【企业ID号-会员账号-密码MD5-通道ID】组成。中间用"-"分隔开.
                // 例如10002-admin-87373df3f89fa9932a9c6c58cc75e309-100(通道是可选值,不提供该值,系统使用默认通道),MD5不区分大小写
                // 该值可通过GetIdentityMark函数获取.
                // 获取网关身份识别字符串, 供网关功能调用前的验证
                //public string GetIdentityMark(int Eid, string uid, string pwd, int gateId)
                //参数名称 参数说明
                //Eid 企业ID代码, 个人用户为0
                //uid 注册时的账号
                //pwd 登陆密码.
                //gateId  短信通道ID, 详细请参考通道说明
                //返回值说明
                //返回用户身份标识字符串
                strIdentity = wsms.GetIdentityMark(Eid, uid, pwd, gateId);
                if (strIdentity == null || strIdentity == "")
                {
                    result = "-1|获取身份标识串失败";
                    return result;
                }
                #endregion 
                //获取剩余短信条数
                if (TargetNo == "" || MsgContent == "")
                {
                    string msg = wsms.GetBalanceCount(strIdentity).ToString("0.00");
                    if (msg.StartsWith("-"))
                    {
                        result = "-2|查询账户余额失败," + errormsg(msg);
                        return result;
                    }
                    else
                    {
                        result = "1|" + msg;
                        return result;
                    }
                }
                #region 快速发送短信,直接提交到网关
                //快速发送短信,直接提交到网关。
                //public SendResult FastSend(string eid_pwd_gateId, string No_List, string Memo, string SendTime, string strSubId)
                //参数名称 参数说明
                //TargetNo 发送对方的手机号码,多个用','分开。每次最多提交100条.是否支持移动还是联通或者小灵通请参考通道说明
                //MsgContent  发送短信内容,长度要求请参考通道说明
                //DateTime    定时发送时间,必须大于当前时间.空代表立即发送
                //strSubId    如果通道支持子号码扩展,值为子号码.否则使用空值
                //全速提交短信
                cn.woxp.gateway.SendResult status = wsms.FastSend(strIdentity, TargetNo, MsgContent, "", "");
                if (status.RetCode > 0)
                {
                    //RetCode: 返回发送状态,大于0代表成功
                    //BlackWords: 被屏蔽的关键字
                    //FailNo:发送失败号的码列表,","分开
                    //ShieldNo:被屏蔽的号码列表,","分开
                    //ErrorDesc:错误的描述
                    //this.l_money.Text = wsms.GetMoney(strIdentity).ToString("0.00");
                    //js = "发送成功!共发送:" + status.RetCode.ToString() + "条";
                    //MessageBox.Show(js, "发送短信状态", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    result = "2|发送成功,共发送:" + status.RetCode.ToString() + "条";
                    if (boGetAcount)
                    {
                        string _Amount = wsms.GetMoney(strIdentity).ToString("0.00"); ;
                        result += "|" + _Amount;
                    }
                }
                else
                {
                    result = "-3|发送失败";
                }
                if (status.FailNo.Trim() != "" || status.ShieldNo.Trim() != "" || status.ErrorDesc.Trim() != "")
                {
                    result += "{";
                    if (status.FailNo.Trim() != "")
                    {
                        result += "发送失败的号码列表:" + status.FailNo.Trim() + "|";
                    }
                    if (status.ShieldNo.Trim() != "")
                    {
                        result += "被屏蔽的号码列表:" + status.ShieldNo.Trim() + "|";
                    }
                    if (status.ErrorDesc.Trim() != "")
                    {
                        result += "发送失败的号码列表:" + status.ErrorDesc.Trim() + "|";
                    }
                    result = result.Substring(0, result.Length - 1);
                    result += "}";
                }

                #endregion
            }
            catch (Exception ex)
            {
                result = "-4|出错:"+ex.Message;
            }
            return result;
        }
        #endregion

        #region HTTP网关接口
        //网关地址:    GB2312网关 http://gateway.woxp.cn:6630/gb2312/web_api/
        //            UTF-8网关 http://gateway.woxp.cn:6630/utf8/web_api/

        //发送短信,<=0返回失败.大于0成功条数,个人的。企业ID为0
        //http://gateway.woxp.cn:6630/gb2312/web_api/?x_eid=企业ID&x_uid=账号&x_pwd_md5=登陆密码MD5值&x_ac=10&x_gate_id=300&x_target_no=手机号码&x_memo=短信内容

        /// <summary>
        /// 
        /// </summary>
        /// <param name="TargetNo">接受者号码</param>
        /// <param name="MsgContent"> 短信发送内容.长度请参考通道说明(必须使用URL编码)</param>
        /// <param name="SendTime">定时短信, 格式YYYY-MM-DD HH:MM:SS,24小时制.值为空或无该参数代表立即发送 否</param>
        /// <returns>大于0成功,小于0失败(可通过errormsg返回失败原因)<</returns>
        public string sendMsg_http(string TargetNo, string MsgContent, string SendTime)
        {
            //System.Web.HttpUtility引用,右击项目-->添加引用,请切换到浏览标签,在 C:\Windows\Microsoft.NET\Framework\v2.0.50727 目录下找到,其中 v2.0.50727 是你实际使用的 .NET 版本。(一定要是这个,4.0目录下的无效)
            string _MsgContent = "";
            if (apicode.ToLower().Trim() == "gb2312")
            {
                //按照GB2312进行编码 
                _MsgContent = System.Web.HttpUtility.UrlEncode(MsgContent, System.Text.Encoding.GetEncoding("GB2312"));

            }
            else
            {
                //按照UTF-8进行编码
                _MsgContent=System.Web.HttpUtility.UrlEncode(MsgContent);
            }
            var url = apiurl;// "http://gateway.woxp.cn:6630/utf8/web_api/";
            var postdata = "?x_eid=" + x_eid + "&x_uid=" + x_uid;
            postdata += "&x_pwd_md5=" + x_pwd_md5 + "&x_ac=10&x_gate_id=" + x_gate_id + "&x_target_no=" + TargetNo + "&x_memo=" + _MsgContent + "";
            postdata += "&x_send_time=";
            string msg = GetHtmlFromUrl(url + postdata);
            return  msg;
        }

        //        x_eid 会员企业ID号, 个人用户为0  是
        //2    x_uid 会员账号    是
        //3    x_pwd_md5 登陆密码的MD5值   是
        //4    x_new_pwd 修改密码时需要此参数。代表要变更的新密码 否
        //5    x_sub_id 扩展子号码, 发送短信时需要, 根据通道是否支持子号码扩展而提供  否
        //6    x_target_no 接受者号码,多个号码用“,”分开 否
        //7    x_memo 短信发送内容.长度请参考通道说明(必须使用URL编码)    否
        //8    x_send_time 定时短信, 格式YYYY-MM-DD HH:MM:SS,24小时制.值为空或无该参数代表立即发送 否
        //9    x_gate_id 发送短信时通道ID,通道发送失败可以切换其它通道,无该值系统使用默认通道 否
        //10    x_ac 本此提交的行为。比如是发送短信。查询余额, 参数值如下

        //提示:HTTP调用URL接口时, 参数值必须URL编码后再调用
        //--x_eid企业代码,个人账号值为0
        //--x_gate_id值为300.代表组合通道
        //--x_target_no可以多个号码最多100个每次。之间用[,] 分开。例如:15910011001,1591061000,15912341234
        //--x_memo短信内容70字
        //--查询余额
        //http://gateway.woxp.cn:6630/gb2312/web_api/?x_eid=企业ID&x_uid=账号&x_pwd_md5=登陆密码MD5值&x_ac=30&x_gate_id=300
        /// <summary>
        /// 查询余额
        /// </summary>
        /// <returns>-1=查询账户余额失败; (>=0)=返回当前余额 </returns>
        public string GetBalanceCount()
        {
            //gb2312
            string result = "";//http://gateway.woxp.cn:6630/utf8/web_api/
            var url =apiurl+ "?x_eid=" + x_eid + "&x_uid=" + x_uid + "&x_pwd_md5=" + x_pwd_md5 + "&x_ac=30";
            string msg = GetHtmlFromUrl(url);
            if (msg == null) { msg = "-1"; }
            result = msg;
            return result;
        }
        public string GetHtmlFromUrl(string url)
        {
            string strRet = null;

            if (url == null || url.Trim().ToString() == "")
            {
                return strRet;
            }
            string targeturl = url.Trim().ToString();
            try
            {
                HttpWebRequest hr = (HttpWebRequest)WebRequest.Create(targeturl);
                hr.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";
                hr.Method = "GET";
                hr.Timeout = 30 * 60 * 1000;
                WebResponse hs = hr.GetResponse();
                Stream sr = hs.GetResponseStream();
                System.IO.StreamReader ser = new StreamReader(sr, Encoding.Default);
                strRet = ser.ReadToEnd();
            }
            catch (Exception ex)
            {
                strRet = null;
            }
            return strRet;
        }

        #region 发送短信返回值
        /// <summary>
        /// 参数x_ac=10发送短信时。返回值
        /// </summary>
        /// <param name="ErrorId"></param>
        /// <returns></returns>
        public string errormsg(string ErrorId)
        {
            if (ErrorId == null)
            {
                ErrorId = "-199";
            }
            if (!ErrorId.StartsWith("-"))
            {
                return "发送成功!共发送:" + ErrorId + "条";
            }
            //编号  值 说明
            //1   大于0 发送成功, 此次发送成功条数
            //-100到-199    运营商返回失败代码
            string errmsg = "";
            switch (ErrorId)
            {
                #region 
                case "-1":
                    errmsg = "参数无效";
                    break;
                case "-2":
                    errmsg = "通道不存在或者当前业务不支持此通道";
                    break;
                case "-3":
                    errmsg = "定时格式错误";
                    break;
                case "-4":
                    errmsg = "接收号码无效";
                    break;

                case "-5":
                    errmsg = "提交号码个数超过上限,每个通道都有批量提交的上限.详细值请参考通道说明";
                    break;
                case "-6":
                    errmsg = "发送短信内容长度不符合要求,参考通道要求长度";
                    break;
                case "-7":
                    errmsg = "当前账户余额不足";
                    break;
                case "-8":
                    errmsg = "网关发送短信时出现异常";
                    break;
                case "-9":
                    errmsg = "用户或者密码没输入";
                    break;
                case "-10":
                    errmsg = "企业ID或者会员账号不存在";
                    break;
                case "-11":
                    errmsg = "密码错误";
                    break;
                case "-12":
                    errmsg = "账户锁定";
                    break;
                case "-13":
                    errmsg = "网关状态关闭";
                    break;
                case "-14":
                    errmsg = "验证用户时执行异常";
                    break;
                case "-15":
                    errmsg = "网关初始化失败";
                    break;

                case "-16":
                    errmsg = "当前IP已被系统屏蔽,可能是与您设置的接入IP不同或者是失败次数太多";
                    break;
                case "-17":
                    errmsg = "发送异常";
                    break;
                case "-18":
                    errmsg = "账号未审核";
                    break;
                case "-19":
                    errmsg = "当前时间不允许此通道工作,主要对群发通道限制";
                    break;
                case "-20":
                    errmsg = "传输密钥未设置,请登陆平台设置";
                    break;
                case "-21":
                    errmsg = "提取密钥异常";
                    break;
                case "-22":
                    errmsg = "签名验证失败";
                    break;
                case "-23":
                    errmsg = "发现屏蔽关键字";
                    break;
                default:
                    errmsg = "运营商返回失败代码";
                    break;
                    #endregion
            }
            return errmsg;

        }
        #endregion
        #endregion
    }

}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值