Beispiel #1
0
        /// <summary>
        /// 把短信发送到MQ
        /// 负责拆包,递交出去的PlainSMS
        /// </summary>
        /// <param name="sms"></param>
        public void SendSMS(SMSDTO sms)
        {
            foreach (var smsnumber in sms.SMSNumbers)
            {
                if (smsnumber.NumberCount > this.GatewayConfig.MaxPackageSize)
                {
                    List <string> Numbers = smsnumber.Numbers.Split(',').ToList();
                    for (int i = 0; i < Numbers.Count; i = i + this.GatewayConfig.MaxPackageSize)
                    {
                        var numbers = Numbers.Skip(i).Take(this.GatewayConfig.MaxPackageSize).ToList();

                        PlainSMS tmp = PlainSMS.CreatePlainSMS(sms.Message, numbers, smsnumber.Operator);


                        this.SendMQHelper.PublishMessage(JsonConvert.SerializeObject(tmp), sms.Message.SMSLevel);
                    }
                }
                else
                {
                    PlainSMS tmp = PlainSMS.CreatePlainSMS(sms.Message, smsnumber);

                    this.SendMQHelper.PublishMessage(JsonConvert.SerializeObject(tmp), sms.Message.SMSLevel);
                }
            }
        }
Beispiel #2
0
 public void SendSMS(PlainSMS sms)
 {
     try
     {
         SendResult      sr = Gateway.SendSMS(sms);
         ReportEventArgs re = new ReportEventArgs();
         int             i  = 0;
         re.StatusReports.AddRange(sms.Numbers.Split(',').Select(n => new StatusReport()
         {
             SMSID        = sms.ID,
             SerialNumber = sr.SerialNumber + (++i).ToString().PadLeft(5, '0'),
             SendTime     = sms.SendTime.Value,
             StatusCode   = 2000 + sr.StatusCode,
             Succeed      = sr.Success,
             Channel      = sms.Channel,
             Description  = sr.Message,
             Number       = n,
             ResponseTime = null
         }));
         SendEvent(this, re);
         if (sr.Success)
         {
             lock (locker)
             {
                 sends.Add(sr.SerialNumber, re);
             }
         }
     }
     catch (Exception ex)
     {
         MessageHelper.Instance.WirteError(ex.ToString());
         LogClient.LogHelper.LogInfo(Gateway.Config.GatewayName, "SendSMS Error ->", ex.Message);
     }
 }
Beispiel #3
0
 private static void SendFail(PlainSMS sms, string message, ushort statusCode)
 {
     try
     {
         foreach (var number in sms.Numbers.Split(','))
         {
             StatusReportSend.Instance.Send(new StatusReport()
             {
                 SMSID            = sms.ID,
                 AccountID        = sms.AccountID,
                 StatusReportType = (StatusReportType)sms.StatusReportType,
                 Channel          = sms.Channel,
                 SendTime         = sms.SendTime.Value,
                 SerialNumber     = System.Guid.NewGuid().ToString(),
                 StatusCode       = statusCode,
                 Succeed          = false,
                 Description      = message,
                 Gateway          = "",
                 Number           = number,
                 ResponseTime     = null
             });
         }
     }
     catch (Exception ex)
     {
         LogHelper.LogError("SendQueue", "SendQueueHost._gatewayHandler_SendSMSError", ex.ToString());
     }
 }
Beispiel #4
0
 public SendEventArgs(PlainSMS message, string serial, bool succeed, ushort statusCode, string description)
 {
     _statusCode = statusCode;
     _message    = message;
     Numbers     = message.Numbers.Split(',').ToList();
     _serial     = serial;
     Description = description;
     _succeed    = succeed;
     SubmitTime  = DateTime.Now;
 }
Beispiel #5
0
        static bool frSMS_ReceiveMessage(RabbitMQHelper mq, string message)
        {
            PlainSMS sms = null;

            try
            {
                sms = JsonConvert.DeserializeObject <PlainSMS>(message);
                //短信过滤
                if (sms.FilterType == (int)FilterType.Failure)
                {
                    string[] rk = processKeyword.Find(sms.Content);
                    if (rk.Length > 0)
                    {
                        int    StatusCode  = ((ushort)PlatformCode.SYS + (ushort)SystemCode.IllegalKeyword);
                        string Description = "关键词: " + string.Join(",", rk);
                        var    reports     = from num in sms.Numbers.Split(',')
                                             select new StatusReport()
                        {
                            SMSID            = sms.ID,
                            SendTime         = sms.SendTime.Value,
                            SerialNumber     = System.Guid.NewGuid().ToString(),
                            StatusCode       = StatusCode,
                            Succeed          = false,
                            Channel          = sms.Channel,
                            Gateway          = GatewayName,
                            Description      = Description,
                            Number           = num,
                            ResponseTime     = DateTime.Now,
                            StatusReportType = (StatusReportType)sms.StatusReportType
                        };
                        ReportSend.Instance.BatchSend(reports.ToList());
                        return(true);
                    }
                }
                else if (sms.FilterType == (int)FilterType.Replace)
                {
                    sms.Content = processKeyword.Replace(sms.Content);
                }

                Gateway.SendSMS(sms);
                return(true);
            }
            catch (Exception ex)
            {
                LogHelper.LogError("Gateway", "GatewayHost.frSMS_ReceiveMessage", ex.ToString());
            }

            return(true);
        }
Beispiel #6
0
        private static void SendFail(PlainSMS sms, string message, ushort statusCode)
        {
            try
            {
                var reports = from ss in sms.Numbers.Split(',')
                              select new StatusReport()
                {
                };

                ReportSend.Instance.BatchSend(reports.ToList());
            }
            catch (Exception ex)
            {
                LogHelper.LogError("SendQueue", "SendQueueHost._gatewayHandler_SendSMSError", ex.ToString());
            }
        }
Beispiel #7
0
        public GatewayInterface.SendResult SendSMS(PlainSMS sms)
        {
            Dictionary <string, string> par = new Dictionary <string, string>();

            par.Add("action", "send");
            par.Add("userid", Config.UserId);
            par.Add("account", Config.Account);
            par.Add("password", Config.Password);
            par.Add("mobile", sms.Numbers);
            var content = sms.Content + sms.Signature;

            if (Config.SignaturePos == 1)
            {
                content = sms.Signature + sms.Content;
            }
            par.Add("content", content);
            par.Add("sendTime", "");
            if (Config.ExtendNo == 1)
            {
                par.Add("extno", sms.SPNumber);
            }
            else
            {
                par.Add("extno", "");
            }

            string res  = HttpUtil.Post(Config.SendUrl, par, Encoding.UTF8);
            var    xdoc = XDocument.Parse(res);

            var sendresult = new SendResult()
            {
                Success      = xdoc.Root.Element("returnstatus").Value.Equals("Success"),
                Message      = xdoc.Root.Element("message").Value,
                SerialNumber = xdoc.Root.Element("taskID").Value,
                StatusCode   = 2000
            };

            if (!sendresult.Success)
            {
                sendresult.StatusCode = 2099;
            }
            if (string.IsNullOrWhiteSpace(sendresult.SerialNumber))
            {
                sendresult.SerialNumber = System.Guid.NewGuid().ToString();
            }
            return(sendresult);
        }
Beispiel #8
0
        public SendResult SendSMS(PlainSMS sms)
        {
            var r = ran.Next(100);

            if (r < 10)
            {
                //十分之一提交失败
                return(new SendResult()
                {
                    Message = "提交失败",
                    SerialNumber = System.Guid.NewGuid().ToString(),
                    StatusCode = 2099,
                    Success = false
                });
            }


            var sr = new SendResult()
            {
                Message      = "提交成功",
                Success      = true,
                SerialNumber = System.Guid.NewGuid().ToString(),
                StatusCode   = 2000
            };

            smslist.Add(sr.SerialNumber, sms);
            lock (this)
            {
                foreach (var num in sms.Numbers.Split(','))
                {
                    r = ran.Next(100);
                    if (r > 50)
                    {
                        var mo = new MOSMS()
                        {
                            Gateway      = Config.GatewayName,
                            SerialNumber = System.Guid.NewGuid().ToString(),
                            Message      = "回复:" + sms.Content,
                            UserNumber   = num,
                            ReceiveTime  = DateTime.Now
                        };
                        molist.Add(mo);
                    }
                }
            }
            return(sr);
        }
Beispiel #9
0
 public void SendSMS(PlainSMS sms)
 {
     try
     {
         MessageHelper.Instance.WirteTest("提交短信:" + JsonConvert.SerializeObject(sms));
         SendResult sr = Gateway.SendSMS(sms);
         if (string.IsNullOrWhiteSpace(sr.SerialNumber))
         {
             sr.SerialNumber = System.Guid.NewGuid().ToString();
         }
         MessageHelper.Instance.WirteTest("提交短信返回结果:" + JsonConvert.SerializeObject(sr));
         ReportEventArgs re = new ReportEventArgs();
         int             i  = 0;
         re.StatusReports.AddRange(sms.Numbers.Split(',').Select(n => new StatusReport()
         {
             SMSID            = sms.ID,
             SerialNumber     = sr.SerialNumber + (++i).ToString().PadLeft(5, '0'),
             SendTime         = sms.SendTime.Value,
             StatusCode       = sr.StatusCode,
             Succeed          = sr.Success,
             Channel          = sms.Channel,
             Description      = sr.Message,
             Number           = n,
             ResponseTime     = null,
             Gateway          = Gateway.Config.GatewayName,
             AccountID        = sms.AccountID,
             StatusReportType = (StatusReportType)sms.StatusReportType
         }));
         SendEvent(this, re);
         if (sr.Success)
         {
             lock (locker)
             {
                 sends.Add(sr.SerialNumber, re);
             }
         }
         if (this.Gateway.Config.EnableTrafficControl > 0)
         {
             tc.AddCountAndCheckTraffic(sms.NumberCount);
         }
     }
     catch (Exception ex)
     {
         MessageHelper.Instance.WirteError(ex.ToString());
         LogClient.LogHelper.LogInfo(Gateway.Config.GatewayName, "SendSMS Error ->", ex.Message);
     }
 }
Beispiel #10
0
        private static bool SMSMQHelper_RecieveMessage(RabbitMQHelper mq, string message)
        {
            try
            {
                MessageTools.MessageHelper.Instance.WirteTest(message);

                var sms = JsonConvert.DeserializeObject <SMSDTO>(message);
                SMSOriginalSend.Send(sms);
                foreach (var smsnumber in sms.SMSNumbers)
                {
                    try
                    {
                        GatewayHelper gateway = GetGatewayByOperator(sms.Message.Channel, smsnumber.Operator);
                        if (gateway == null)
                        {
                            SendFail(PlainSMS.CreatePlainSMS(sms.Message, smsnumber), "没有找到可用网关!", 2022);
                            continue;
                        }
                        SMSDTO dto = new SMSDTO()
                        {
                            Message = sms.Message
                        };
                        dto.SMSNumbers = new List <SMSNumber>()
                        {
                            smsnumber
                        };
                        gateway.SendSMS(dto);
                    }
                    catch (Exception ex)
                    {
                        //记录异常
                        LogHelper.LogError("SendQueue", "SMSMQHelper_RecieveMessage", "发送短信时发生异常:" + ex.ToString());
                        SendFail(PlainSMS.CreatePlainSMS(sms.Message, smsnumber), "发送时失败!", 99);
                    }
                }

                return(true);
            }
            catch (Exception ex)
            {
                LogHelper.LogError("SendQueue", "SMSMQHelper_RecieveMessage", "解析短信时发生异常:" + ex.ToString());
                LogHelper.LogError("SendQueue", "SMSMQHelper_RecieveMessage", message);
                // throw ex;
                return(true);
            }
        }
Beispiel #11
0
 public void SendSubmit(PlainSMS sms)
 {
 }
Beispiel #12
0
        public void SendSMS(PlainSMS sms)
        {
            try
            {
                string post = "";


                string send = string.Join(",", sms.Number);

                string content = sms.Signature + sms.Content;
                post = "act=sendmsg&unitid=" + _config.UserId + "&username="******"&passwd=" + _config.Password + "&phone=" + send + "&msg=" + content + "&port=&sendtime=" + DateTime.Now.ToString();
                string t = HTTPRequest.PostWebRequest(sendUrl, post, Encoding.GetEncoding("GBK"));

                Console.WriteLine("发送字符串 " + post);
                //状态,批号,说明
                bool   ok   = true;
                string rmsg = "短信提交成功";

                string[] rt  = t.Split(',');
                int      rok = 0;
                int      r   = 1;//原来默认0 ,应为1  by lmw  1 代表已发送
                if (int.TryParse(rt[0], out rok) && rok == 1)
                {
                }
                else
                {
                    rmsg = GetErrorMsg(rok);
                    Console.WriteLine(rmsg);
                    LogClient.LogHelper.LogInfo("JCSY", "Connect Error ->", rmsg);
                    ok = false;
                    r  = 99;
                }

                int i = 0;
                foreach (string number in sms.Number)
                {
                    SMS s = new SMS();

                    s.Account = sms.Account;
                    s.Audit   = sms.Audit;
                    s.Channel = sms.Channel;
                    s.Content = sms.Content;
                    s.Filter  = sms.Filter;
                    s.Level   = sms.Level;
                    s.Number  = new List <string> {
                        number
                    };
                    s.SendTime     = sms.SendTime;
                    s.SerialNumber = sms.SerialNumber;
                    s.StatusReport = sms.StatusReport;
                    s.Signature    = sms.Signature;
                    s.SPNumber     = sms.SPNumber;
                    s.WapURL       = sms.WapURL;
                    i++;
                    SendEventArgs se = new SendEventArgs(s, rt[1] + i.ToString().PadLeft(5, '0'), ok, (ushort)(2000 + r), rmsg, 1, 1);

                    if (SendEvent != null)
                    {
                        SendEvent(this, se);
                    }
                    //string result = JsonSerialize.Instance.Serialize<SendEventArgs>(se);
                    //Console.WriteLine("短信发送结果:" + result);
                    ExSendEventArgs ese = new ExSendEventArgs(se);
                    if (ok)
                    {
                        lock (locker)
                        {
                            sends.Add(se.SerialNumber, ese);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                LogClient.LogHelper.LogInfo("JCSY", "SendSMS Error ->", ex.Message);
            }
        }
Beispiel #13
0
        public void SendSMS(PlainSMS sms)
        {
            try
            {
                string post = "";


                string send = string.Join(",", sms.Number);

                int mobile = 1, phone = 0;
                post = "action=send&userid=" + userId + "&account=" + account + "&password="******"&mobile=" + send + "&content=" + sms.Signature + sms.Content + "&sendTime=&taskName=&checkcontent=1&countnumber=1&mobilenumber=" + mobile + "&telephonenumber=" + phone;
                // Console.WriteLine("发送字符串 " + post);
                string t = HTTPRequest.PostWebRequest(sendUrl, post, Encoding.UTF8);
                //<? xml version = "1.0" encoding = "utf-8" ?>
                //< returnsms >
                //< returnstatus > status </ returnstatus > ----------返回状态值:成功返回Success 失败返回:Faild
                //<message> message</ message > ----------返回信息:见下表
                //<remainpoint> remainpoint</ remainpoint > ----------返回余额
                //< taskID > taskID </ taskID > -----------返回本次任务的序列ID
                //< successCounts > successCounts </ successCounts > --成功短信数:当成功后返回提交成功短信数
                //</ returnsms >
                Console.WriteLine("发送回复字符串 " + t);
                bool        ok    = true;
                string      rmsg  = "";
                string      msgid = "";
                XmlDocument doc   = new XmlDocument();
                doc.LoadXml(t);
                XmlElement root = null;
                root = doc.DocumentElement;
                XmlNodeList listNodes = root.ChildNodes;
                foreach (XmlNode node in listNodes)
                {
                    switch (node.Name)
                    {
                    case "returnstatus":
                        ok = (node.InnerText == "Success") ? true : false;
                        break;

                    case "message":
                        if (node.InnerText == "ok")
                        {
                            rmsg = "短信提交成功.";
                        }
                        else
                        {
                            rmsg = node.InnerText;
                        }
                        break;

                    case "remainpoint":
                        break;

                    case "taskID":
                        msgid = node.InnerText;
                        break;

                    case "successCounts":
                        break;
                    }
                }
                int r = 1;//原来默认0 ,应为1  by lmw  1 代表已发送
                if (!ok)
                {
                    // r = 101;
                    r = 99;//提交失败 错误码应该在100以内   by lmw
                }
                int i = 0;
                foreach (string number in sms.Number)
                {
                    SMS s = new SMS();

                    s.Account = sms.Account;
                    s.Audit   = sms.Audit;
                    s.Channel = sms.Channel;
                    s.Content = sms.Content;
                    s.Filter  = sms.Filter;
                    s.Level   = sms.Level;
                    s.Number  = new List <string> {
                        number
                    };
                    s.SendTime     = sms.SendTime;
                    s.SerialNumber = sms.SerialNumber;
                    s.StatusReport = sms.StatusReport;
                    s.Signature    = sms.Signature;
                    s.SPNumber     = sms.SPNumber;
                    s.WapURL       = sms.WapURL;
                    i++;

                    SendEventArgs se = new SendEventArgs(s, msgid + i.ToString().PadLeft(5, '0'), ok, (ushort)(2000 + r), rmsg, 1, 1);

                    if (SendEvent != null)
                    {
                        SendEvent(this, se);
                    }

                    //string result = JsonSerialize.Instance.Serialize<SendEventArgs>(se);
                    //Console.WriteLine("短信发送结果:" + result);
                    ExSendEventArgs ese = new ExSendEventArgs(se);

                    if (ok)
                    {
                        lock (locker)
                        {
                            sends.Add(se.SerialNumber, ese);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                LogClient.LogHelper.LogInfo("DWWG", "SendSMS Error ->", ex.Message);
            }



            //if (_cm.ContainsKey(sms.Content))
            //{
            //    var list = _cm.Get(sms.Content);
            //    list.Add(sms);
            //    if (list.Count > 100)
            //    {
            //        List<List<SMS>> caches = new List<List<SMS>>();
            //        caches.Add(list);
            //        _cm_ExpireCache(caches);
            //        _cm.Del(sms.Content);
            //    }
            //}
            //else
            //{
            //    _cm.Add(sms.Content, new List<SMS>() { sms });
            //}
        }
Beispiel #14
0
        public void SendSMS(PlainSMS sms)
        {
            try
            {
                //  List<SMS> caches = new List<SMS>();

                string post = "";


                string content = "";
                if (SignaturePos == "0")
                {
                    //签名在前
                    content = sms.Signature + sms.Content;
                }
                else
                {
                    //签名在后
                    content = sms.Content + sms.Signature;
                }
                post = "action=send&userid=" + userId + "&account=" + account + "&password="******"&mobile=" + sms.Numbers + "&content=" + content + "&sendTime=&extno=" + SrcID + sms.SPNumber;
                // MessageHelper.Instance.WirteTest("发送字符串: " + post);
                string t = HTTPRequest.PostWebRequest(sendUrl, post, Encoding.UTF8);
                //string t = "";
                MessageHelper.Instance.WirteTest("提交返回原始内容: " + t);
                //<? xml version = "1.0" encoding = "utf-8" ?>
                //< returnsms >
                //< returnstatus > status </ returnstatus > ----------返回状态值:成功返回Success 失败返回:Faild
                //<message> message</ message > ----------返回信息:见下表
                //<remainpoint> remainpoint</ remainpoint > ----------返回余额
                //< taskID > taskID </ taskID > -----------返回本次任务的序列ID
                //< successCounts > successCounts </ successCounts > --成功短信数:当成功后返回提交成功短信数
                //</ returnsms >

                bool        ok    = true;
                string      rmsg  = "";
                string      msgid = "";
                XmlDocument doc   = new XmlDocument();
                doc.LoadXml(t);
                XmlElement root = null;
                root = doc.DocumentElement;
                XmlNodeList listNodes = root.ChildNodes;
                foreach (XmlNode node in listNodes)
                {
                    switch (node.Name)
                    {
                    case "returnstatus":
                        ok = (node.InnerText == "Success") ? true : false;
                        break;

                    case "message":
                        if (node.InnerText == "ok")
                        {
                            rmsg = "短信提交成功.";
                        }
                        else
                        {
                            rmsg = node.InnerText;
                        }
                        break;

                    case "remainpoint":
                        break;

                    case "taskID":
                        msgid = node.InnerText;
                        break;

                    case "successCounts":
                        break;
                    }
                }


                int r = 1;//原来默认0 ,应为1  by lmw  1 代表已发送
                if (!ok)
                {
                    // r = 101;
                    r = 99;//提交失败 错误码应该在100以内吧   by lmw
                    if (string.IsNullOrWhiteSpace(msgid) || msgid == "0")
                    {
                        msgid = System.Guid.NewGuid().ToString();
                    }
                }



                int i = 0;
                foreach (string num in sms.Numbers.Split(','))
                {
                    PlainSMS s = PlainSMS.GetPlainSMSWithOneNumber(sms, num);
                    i++;
                    SendEventArgs se = new SendEventArgs(s, msgid + i.ToString().PadLeft(5, '0'), ok, (ushort)(2000 + r), rmsg, 1, 1);
                    if (SendEvent != null)
                    {
                        SendEvent(this, se);
                    }
                    //string result = JsonSerialize.Instance.Serialize<SendEventArgs>(se);
                    //IService.ServiceProxy.Instance.WriteTest("短信发送结果:" + result);
                    ExSendEventArgs ese = new ExSendEventArgs(se);
                    if (ok)
                    {
                        lock (sendslocker)
                        {
                            sends.Add(se.SerialNumber, ese);
                        }
                    }
                }
            }

            catch (Exception ex)
            {
                MessageHelper.Instance.WirteError(ex.ToString());
                LogClient.LogHelper.LogInfo("OPWO", "SendSMS Error ->", ex.Message);
            }
        }
Beispiel #15
0
 public void SendSMS(PlainSMS sms)
 {
     try
     {
         string post = "";
         for (int i = 0; i < sms.Number.Count; i++)
         {
             string md5p = MD5Helper.GetMD5(password);
             post = "Account=" + account + "&Password="******"&SubCode=&Phone=" + sms.Number[i] + "&Content=" + sms.Content + sms.Signature + "&SendTime=";
             string      t     = HTTPRequest.PostWebRequest(sendUrl, post, System.Text.Encoding.UTF8);
             bool        ok    = false;
             string      rmsg  = "";
             string      msgid = "";
             XmlDocument doc   = new XmlDocument();
             doc.LoadXml(t);
             XmlElement root = null;
             root = doc.DocumentElement;
             XmlNodeList listNodes = root.ChildNodes;
             foreach (XmlNode node in listNodes)
             {
                 if (node.Name == "response")
                 {
                     int c = int.Parse(node.InnerText);
                     if (c <= 0)
                     {
                         msgid = System.Guid.NewGuid().ToString();
                         rmsg  = GetSendErrorMsg(c);
                         break;
                     }
                 }
                 else
                 {
                     ok   = true;
                     rmsg = "短信提交成功.";
                     foreach (XmlNode n in node.ChildNodes)
                     {
                         switch (n.Name)
                         {
                         case "smsID":
                             msgid = n.InnerText;
                             break;
                         }
                     }
                 }
             }
             int r = 0;
             if (!ok)
             {
                 r = 101;
             }
             SendEventArgs se     = new SendEventArgs(sms, msgid, ok, (ushort)(2000 + r), rmsg, 1, 1);
             string        result = JsonSerialize.Instance.Serialize <SendEventArgs>(se);
             Console.WriteLine("短信发送结果:" + result);
             ExSendEventArgs ese = new ExSendEventArgs(se);
             if (ok)
             {
                 //sends.Add(se.Serial,ese);
                 sends.Enqueue(ese);
                 LogClient.LogHelper.LogInfo("WFLTQY", "SendSMS OK ->", result);
             }
             else
             {
                 LogClient.LogHelper.LogInfo("WFLTQY", "SendSMS Fail ->", result);
             }
             if (SendEvent != null)
             {
                 SendEvent(this, se);
             }
         }
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex.Message);
         LogClient.LogHelper.LogInfo("WFLTQY", "SendSMS Error ->", ex.Message);
     }
 }
Beispiel #16
0
        public void SendSMS(PlainSMS sms)
        {
            try
            {
                string post = "";

                string content = "";
                if (SignaturePos == "0")
                {
                    //签名在前
                    content = sms.Signature + sms.Content;
                }
                else
                {
                    //签名在后
                    content = sms.Content + sms.Signature;
                }
                post = "action=send&userid=" + userId + "&account=" + account + "&password="******"&mobile=" + sms.Numbers + "&content=" + content + "&sendTime=&extno=";//+ scrId + sms.SPNumber;
                // MessageHelper.Instance.WirteTest("发送字符串: " + post);
                string t = HTTPRequest.PostWebRequest(sendUrl, post, Encoding.UTF8);
                //string t = "";
                MessageHelper.Instance.WirteTest("提交返回原始内容: " + t);
                //<? xml version = "1.0" encoding = "utf-8" ?>
                //< returnsms >
                //< returnstatus > status </ returnstatus > ----------返回状态值:成功返回Success 失败返回:Faild
                //<message> message</ message > ----------返回信息:见下表
                //<remainpoint> remainpoint</ remainpoint > ----------返回余额
                //< taskID > taskID </ taskID > -----------返回本次任务的序列ID
                //< successCounts > successCounts </ successCounts > --成功短信数:当成功后返回提交成功短信数
                //</ returnsms >

                bool        ok    = true;
                string      rmsg  = "";
                string      msgid = "";
                XmlDocument doc   = new XmlDocument();
                doc.LoadXml(t);
                XmlElement root = null;
                root = doc.DocumentElement;
                XmlNodeList listNodes = root.ChildNodes;
                foreach (XmlNode node in listNodes)
                {
                    switch (node.Name)
                    {
                    case "returnstatus":
                        ok = (node.InnerText == "Success") ? true : false;
                        break;

                    case "message":
                        if (node.InnerText == "ok")
                        {
                            rmsg = "短信提交成功.";
                        }
                        else
                        {
                            rmsg = node.InnerText;
                        }
                        break;

                    case "remainpoint":
                        break;

                    case "taskID":
                        msgid = node.InnerText;
                        break;

                    case "successCounts":
                        break;
                    }
                }

                int r = 0;
                if (!ok)
                {
                    r = 99;
                    if (string.IsNullOrWhiteSpace(msgid) || msgid == "0")
                    {
                        msgid = System.Guid.NewGuid().ToString();
                    }
                }

                ReportEventArgs re = new ReportEventArgs();
                int             i  = 0;
                re.StatusReports.AddRange(sms.Numbers.Split(',').Select(n => new StatusReport()
                {
                    SMSID        = sms.ID,
                    SerialNumber = msgid + (++i).ToString().PadLeft(5, '0'),
                    SendTime     = sms.SendTime.Value,
                    StatusCode   = 2000 + r,
                    Succeed      = ok,
                    Channel      = sms.Channel,
                    Description  = rmsg,
                    Number       = n,
                    ResponseTime = null
                }));
                SendEvent(this, re);
                if (ok)
                {
                    lock (sendslocker)
                    {
                        sends.Add(msgid, re);
                    }
                }
            }

            catch (Exception ex)
            {
                MessageHelper.Instance.WirteError(ex.ToString());
                LogClient.LogHelper.LogInfo("ZSXWG", "SendSMS Error ->", ex.Message);
            }
        }
Beispiel #17
0
        public void SendSMS(PlainSMS sms)
        {
            try
            {
                string post    = "";
                string content = "";
                foreach (var num in sms.Numbers.Split(','))
                {
                    content = System.Web.HttpUtility.UrlEncode(sms.Content + sms.Signature, System.Text.Encoding.UTF8);
                    post    = "account=" + account + "&pswd=" + password + "&mobile=" + num + "&msg=" + content + "&needstatus=true&product=";
                    Console.WriteLine("post-> " + post);
                    string t = HTTPRequest.PostWebRequest(sendUrl, post, System.Text.Encoding.UTF8);
                    Console.WriteLine("request-> " + t);
                    string[] ts    = t.Split((char)0xa);
                    string   msgid = "";
                    if (ts.Length > 1)
                    {
                        msgid = ts[1];
                    }
                    ts = ts[0].Split(',');

                    int    r    = int.Parse(ts[1]);
                    bool   ok   = (r == 0) ? true : false;
                    string rmsg = "发送成功.";
                    switch (r)
                    {
                    case 101:
                        rmsg = "无此用户。";
                        break;

                    case 102:
                        rmsg = "密码错。";
                        break;

                    case 103:
                        rmsg = "提交过快(提交速度超过流速限制)";
                        break;

                    case 104:
                        rmsg = "系统忙(因平台侧原因,暂时无法处理提交的短信)";
                        break;

                    case 105:
                        rmsg = "敏感短信(短信内容包含敏感词)";
                        break;

                    case 106:
                        rmsg = "消息长度错(> 536或 <= 0)";
                        break;

                    case 107:
                        rmsg = "包含错误的手机号码";
                        break;

                    case 108:
                        rmsg = "手机号码个数错(群发 > 50000或 <= 0; 单发 > 200或 <= 0)";
                        break;

                    case 109:
                        rmsg = "无发送额度(该用户可用短信数已使用完)";
                        break;

                    case 110:
                        rmsg = "不在发送时间内";
                        break;

                    case 111:
                        rmsg = "超出该账户当月发送额度限制";
                        break;

                    case 112:
                        rmsg = "无此产品,用户没有订购该产品";
                        break;

                    case 113:
                        rmsg = "extno格式错(非数字或者长度不对)";
                        break;

                    case 115:
                        rmsg = "自动审核驳回";
                        break;

                    case 116:
                        rmsg = "签名不合法,未带签名(用户必须带签名的前提下)";
                        break;

                    case 117:
                        rmsg = "IP地址认证错,请求调用的IP地址不是系统登记的IP地址";
                        break;

                    case 118:
                        rmsg = "用户没有相应的发送权限";
                        break;

                    case 119:
                        rmsg = "用户已过期";
                        break;
                    }
                    if (r > 100)
                    {
                        r = r - 100;  //状态报告程序会根据r的值的范围进行不同的处理
                    }
                    if (!ok)
                    {
                        msgid = System.Guid.NewGuid().ToString();
                    }
                    SendEventArgs se     = new SendEventArgs(sms, msgid, ok, (ushort)(2000 + r), rmsg, 1, 1);
                    string        result = JsonSerialize.Instance.Serialize <SendEventArgs>(se);
                    Console.WriteLine("短信发送结果:" + result);

                    if (ok)
                    {
                        LogClient.LogHelper.LogInfo("JCWG", "SendSMS OK ->", result);
                    }
                    else
                    {
                        LogClient.LogHelper.LogInfo("JCWG", "SendSMS Fail ->", result);
                    }
                    if (SendEvent != null)
                    {
                        SendEvent(this, se);
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                LogClient.LogHelper.LogInfo("JCWG", "SendSMS Error ->", ex.Message);
            }
        }