示例#1
0
        protected override ISmsStatusCollection OnSend(ISms sms)
        {
            ASPSMSNET aspsms;
            SmsStatusCollection status;
            SmsStatus smsStatus;

            aspsms = new ASPSMSNET
            {
                UserKey = Provider.Configuration.Settings["userKey"],
                Password = Provider.Configuration.Settings["password"],
                Originator = sms.Sender,
                MessageData = sms.Message,
            };

            foreach (string recipient in sms.Recipients)
                aspsms.Recipients.Add(recipient, ToInt(sms.ReferenceId));

            if (Provider.TestMode == false)
                aspsms.SendTextSMS();

            status = new SmsStatusCollection(sms);
            if ((aspsms.ErrorCode != 1) && (Provider.TestMode == false))
                status.SetError(aspsms.ErrorCode, aspsms.ErrorDescription);

            foreach (string recipient in sms.Recipients)
            {
                smsStatus = new SmsStatus(recipient) {TestMode = Provider.TestMode};
                if (status.Successful == false)
                    smsStatus.SetError(EnMtStatus.Failure, status.ErrorCode, status.ErrorMessage);
                status.Add(smsStatus);
            }

            return status;
        }
示例#2
0
        public override async Task <IList <SmsWithIndex> > ListSmssAsync(SmsStatus smsStatus)
        {
            (AtError error, AtResponse response) = await channel.SendMultilineCommand($"AT+CMGL=\"{SmsStatusHelpers.ToString(smsStatus)}\"", null);

            List <SmsWithIndex> smss = new List <SmsWithIndex>();

            if (error == AtError.NO_ERROR)
            {
                for (int i = 0; i < response.Intermediates.Count; i += 2)
                {
                    string metaData = response.Intermediates[i];
                    var    match    = Regex.Match(metaData, @"\+CMGL:\s(?<index>\d+),""(?<status>[A-Z\s]+)"",""(?<sender>\+?\d+)"",("""")?,""(?<received>(?<year>\d\d)/(?<month>\d\d)/(?<day>\d\d),(?<hour>\d\d):(?<minute>\d\d):(?<second>\d\d)(?<zone>[-+]\d\d))""");
                    if (match.Success)
                    {
                        int            index    = int.Parse(match.Groups["index"].Value);
                        SmsStatus      status   = SmsStatusHelpers.ToSmsStatus(match.Groups["status"].Value);
                        PhoneNumber    sender   = new PhoneNumber(match.Groups["sender"].Value);
                        int            year     = int.Parse(match.Groups["year"].Value);
                        int            month    = int.Parse(match.Groups["month"].Value);
                        int            day      = int.Parse(match.Groups["day"].Value);
                        int            hour     = int.Parse(match.Groups["hour"].Value);
                        int            minute   = int.Parse(match.Groups["minute"].Value);
                        int            second   = int.Parse(match.Groups["second"].Value);
                        int            zone     = int.Parse(match.Groups["zone"].Value);
                        DateTimeOffset received = new DateTimeOffset(2000 + year, month, day, hour, minute, second, TimeSpan.FromMinutes(15 * zone));
                        string         message  = response.Intermediates[i + 1];
                        smss.Add(new SmsWithIndex(index, status, sender, received, message));
                    }
                }
            }
            return(smss);
        }
示例#3
0
 public Sms(SmsStatus status, PhoneNumber sender, DateTimeOffset receiveTime, string message)
 {
     Status      = status;
     Sender      = sender;
     ReceiveTime = receiveTime;
     Message     = message;
 }
示例#4
0
        protected override ISmsStatusCollection OnSend(ISms sms)
        {
            SmsStatusCollection status;
            SmsStatus smsStatus;
            int? failCode = null;

            if (sms.CustomProperties.ContainsKey("FailCode"))
                failCode = int.Parse(sms.CustomProperties["FailCode"].ToString()	);

            status = new SmsStatusCollection(sms);
            for (int count = 0; count < sms.Recipients.Count; ++count)
            {
                smsStatus = new SmsStatus(sms.Recipients[count]);
                smsStatus.ProviderReference = sms.ReferenceId.ToString();
                if (failCode != null)
                    smsStatus.SetError(EnMtStatus.Failure, (int) failCode, "Error forced for testing purposes");
                else
                {
                    if (sms.CustomProperties.ContainsKey(count.ToString()))
                        smsStatus.SetError(EnMtStatus.Failure, -1, "Error forced using sms custom properties");
                }

                status.Add(smsStatus);
            }

            return status;
        }
示例#5
0
        public override async Task <Sms> ReadSmsAsync(int index)
        {
            (AtError error, AtResponse response) = await channel.SendMultilineCommand($"AT+CMGR={index}", null);

            if (error == AtError.NO_ERROR && response.Intermediates.Count > 0)
            {
                string line  = response.Intermediates.First();
                var    match = Regex.Match(line, @"\+CMGR:\s""(?<status>[A-Z\s]+)"",""(?<sender>\+?\d+)"",("""")?,""(?<received>(?<year>\d\d)/(?<month>\d\d)/(?<day>\d\d),(?<hour>\d\d):(?<minute>\d\d):(?<second>\d\d)(?<zone>[-+]\d\d))""");
                if (match.Success)
                {
                    SmsStatus      status   = SmsStatusHelpers.ToSmsStatus(match.Groups["status"].Value);
                    PhoneNumber    sender   = new PhoneNumber(match.Groups["sender"].Value);
                    int            year     = int.Parse(match.Groups["year"].Value);
                    int            month    = int.Parse(match.Groups["month"].Value);
                    int            day      = int.Parse(match.Groups["day"].Value);
                    int            hour     = int.Parse(match.Groups["hour"].Value);
                    int            minute   = int.Parse(match.Groups["minute"].Value);
                    int            second   = int.Parse(match.Groups["second"].Value);
                    int            zone     = int.Parse(match.Groups["zone"].Value);
                    DateTimeOffset received = new DateTimeOffset(2000 + year, month, day, hour, minute, second, TimeSpan.FromMinutes(15 * zone));
                    string         message  = response.Intermediates.Last();
                    return(new Sms(status, sender, received, message));
                }
            }
            return(null);
        }
示例#6
0
文件: Inform.cs 项目: hhy5277/JustSay
        public static bool SMS(Confess confess)
        {
            string    Url    = string.Format("http://www.justsay.cn/confess/Details/{0}", confess.ID);
            SmsStatus status = SMSHelper.SendMsg(confess.ToPhone, string.Format(ConfessSMSTemplete, confess.ToName, Url));

            if (!status.IsSuccess)
            {
                ToDoListBusiness.WriteLog(status.ErrorMessage, "短信异常", "SMSHelper.SendMsg", true);
                return(false);
            }
            return(status.IsSuccess);
            //  return true;
        }
示例#7
0
文件: Inform.cs 项目: hhy5277/JustSay
        public static bool SMS(Relation relation)
        {
            string    Url     = string.Format("http://www.justsay.cn/relation/Details/{0}", relation.ID);
            SmsStatus status  = SMSHelper.SendMsg(relation.ToPhone, string.Format(RelationSMSTemplete, relation.FromName, relation.ToName, Url));
            SmsStatus status2 = SMSHelper.SendMsg(relation.FromPhone, string.Format(RelationSMSTemplete, relation.FromName, relation.ToName, Url));

            if (!(status.IsSuccess && status2.IsSuccess))
            {
                ToDoListBusiness.WriteLog(status.ErrorMessage, "短信异常", "SMSHelper.SendMsg", true);
                return(false);
            }

            return(status.IsSuccess && status2.IsSuccess);

            // return true;
        }
示例#8
0
 /// <summary>
 /// 0 and '' ZGAIA03358 待发送
 ///2 ZGAIA03355 发送成功
 ///? ZGAIA03354 发送失败
 /// </summary>
 /// <param name="con"></param>
 /// <returns></returns>
 public string UpdateSMSContentInfo(string con)
 {
     if (!string.IsNullOrEmpty(con))
     {
         DataSet       dt = new DataSet();
         PersistBroker b  = PersistBroker.Instance();
         try
         {
             SmsStatus s = (SmsStatus)JsonConvert.DeserializeObject(con, typeof(SmsStatus));
             if (s.SessionId != "")
             {
                 //验证用户是否已通过登录验证
                 DataSet dtUser = b.ExecuteSQLForDst("select USERID from secuser where USERITEM4 = '" + s.SessionId + "'");
                 if (dtUser.Tables[0].Rows.Count > 0)
                 {
                     List <SmsStatusList> n = s.StatusList;
                     b.BeginTrans();
                     foreach (SmsStatusList item in n)
                     {
                         dt = b.ExecuteSQLForDst(@"
                                 UPDATE SMSCONTENT
                                    SET S_STATE = '" + item.SendStatus + @"'
                                       ,STIME ='" + item.SendTime + @"'
                                  WHERE ID = '" + item.Id + @"'
                         ");
                     }
                     b.CommitTrans();
                 }
             }
         }
         catch (Exception ex)
         {
             b.RollbackTrans();
             return(JsonConvert.SerializeObject("The data is abnormal", new DataTableConverter()));
         }
         finally
         {
             b.Close();
             //Conn.Close();
         }
         return(JsonConvert.SerializeObject("The update is successful", new DataTableConverter()));
     }
     else
     {
         return(JsonConvert.SerializeObject("Data is empty", new DataTableConverter()));
     }
 }
示例#9
0
 private void ProcessConfirmationData(SmsStatus confirmationData)
 {
     if (confirmationData is SmsFailed)
     {
         var failedMessage        = confirmationData as SmsFailed;
         var messageFailedSending = new MessageFailedSending
         {
             SmsFailed                = failedMessage,
             CorrelationId            = Data.OriginalMessage.CorrelationId,
             SmsData                  = Data.OriginalMessage.SmsData,
             SmsMetaData              = Data.OriginalMessage.SmsMetaData,
             ConfirmationEmailAddress = Data.OriginalMessage.ConfirmationEmailAddress
         };
         ReplyToOriginator(messageFailedSending);
         Bus.SendLocal(messageFailedSending);
         MarkAsComplete();
     }
     else if (confirmationData is SmsSent)
     {
         var sentMessage = confirmationData as SmsSent;
         Bus.Publish <MessageSent>(m =>
         {
             m.ConfirmationData         = sentMessage.SmsConfirmationData;
             m.CorrelationId            = Data.OriginalMessage.CorrelationId;
             m.SmsData                  = Data.OriginalMessage.SmsData;
             m.SmsMetaData              = Data.OriginalMessage.SmsMetaData;
             m.ConfirmationEmailAddress = Data.OriginalMessage.ConfirmationEmailAddress;
         });
         var messageSuccessfullyDelivered = new MessageSuccessfullyDelivered
         {
             ConfirmationData = sentMessage.SmsConfirmationData, CorrelationId = Data.OriginalMessage.CorrelationId, SmsData = Data.OriginalMessage.SmsData, SmsMetaData = Data.OriginalMessage.SmsMetaData, ConfirmationEmailAddress = Data.OriginalMessage.ConfirmationEmailAddress
         };
         Bus.SendLocal(messageSuccessfullyDelivered);
         ReplyToOriginator(messageSuccessfullyDelivered);
         MarkAsComplete();
     }
     else
     {
         RequestUtcTimeout <SmsPendingTimeout>(new TimeSpan(0, 0, 0, 10));
     }
 }
示例#10
0
        public async Task <string> SendAsync(OoredooMessage message)
        {
            var customerID = Convert.ToInt32(ConfigurationManager.AppSettings["SmsCustomerID"]);
            var username   = ConfigurationManager.AppSettings["SmsUsername"];
            var password   = ConfigurationManager.AppSettings["SmsPassword"];

            // if you want to delay your message to a certain time
            // uncomment this and modify this based on your requirements and add to SendSmsAsync as an argument
            //string defDate = DateTime.UtcNow.AddHours(3).ToString("yyyyMMddhhmmss");

            MessengerSoapClient messenger = new MessengerSoapClient("MessengerSoap");

            SoapUser user = new SoapUser
            {
                CustomerID = customerID,
                Name       = username,
                Password   = password
            };
            AuthResult authData = messenger.Authenticate(user);

            if (authData.Result == "OK")
            {
                var sendResult =
                    await messenger.SendSmsAsync(
                        user,
                        authData.Originators[0],
                        message.Body,
                        message.Destination,
                        MessageType.Latin,
                        null, false, false, false);

                SmsStatus smsStatus = await messenger.GetSmsStatusAsync(user, sendResult.TransactionID, true);

                return(smsStatus.Result);
            }
            return(authData.Result);
        }
示例#11
0
        /// <summary>
        /// Forward a SMS Send request to the gateway
        /// Made a private method to allow refreshing of the 
        /// session id - if session is expired, it attempts
        /// 1 time only, then if the error persists 
        /// does not retry anymore
        /// </summary>
        /// <param name="sms">The sms to be sent</param>
        /// <param name="refresingSession">
        /// true if the session id is expired and a new send attempt is
        /// being done after reconnecting with a new session id
        /// </param>
        /// <returns></returns>
        private ISmsStatusCollection Send(ISms sms, bool refresingSession)
        {
            ISmsStatusCollection status;
            SmsStatus smsStatus;
            string[] errorMessages;
            bool retry = false;

            if (Provider.TestMode == false)
            {
                string[] recipients;

                recipients = new string[sms.Recipients.Count];
                for (int count = 0; count < sms.Recipients.Count; ++count)
                    recipients[count] = sms.Recipients[count];

                lock (_server)
                {
                    errorMessages = _server.sendmsg(_sessionId, _apiId, null, null, recipients, sms.Sender, sms.Message, 0, 1, 0, 0, 3, 0, 3, 1, 0, sms.ReferenceId.ToString(), 0, "SMS_TEXT", string.Empty, string.Empty, 1440);
                    if ((errorMessages.Length == 1) && (IsSessionError(errorMessages[0]) && (refresingSession == false)))
                    {
                        Connect();
                        retry = true;
                    }
                }
            }
            else
                errorMessages = new string[sms.Recipients.Count];

            if (retry)
                status = Send(sms, true);
            else
            {
                status = new SmsStatusCollection(sms);
                for (int count = 0; count < sms.Recipients.Count; ++count)
                {
                    smsStatus = new SmsStatus(sms.Recipients[count]);
                    smsStatus.TestMode = Provider.TestMode;

                    CheckResponse(smsStatus, errorMessages[count]);

                    status.Add(smsStatus);
                }
            }

            return status;
        }
示例#12
0
 private void CheckResponse(SmsStatus status, string errorMessage)
 {
     if (status.TestMode == false)
     {
         if (errorMessage == null)
             status.SetError(EnMtStatus.Failure, -1, "No response from the server");
         else if (_regexMessageId.IsMatch(errorMessage))
             status.ProviderReference = _regexMessageId.Match(errorMessage).Result("${reference}");
         else if (_regexErrorMessage.IsMatch(errorMessage))
         {
             Match match;
             match = _regexErrorMessage.Match(errorMessage);
             status.SetError(EnMtStatus.Failure, int.Parse(match.Result("${errorcode}")), match.Result("${errormessage}"));
         }
     }
 }
示例#13
0
 public SmsWithIndex(int index, SmsStatus status, PhoneNumber sender, DateTimeOffset receiveTime, string message)
     : base(status, sender, receiveTime, message)
 {
     Index = index;
 }
示例#14
0
 public static string ToString(SmsStatus smsStatus)
 {
     return(LUT.First(x => x.Key == smsStatus).Value);
 }