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; }
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); }
public Sms(SmsStatus status, PhoneNumber sender, DateTimeOffset receiveTime, string message) { Status = status; Sender = sender; ReceiveTime = receiveTime; Message = message; }
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; }
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); }
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; }
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; }
/// <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())); } }
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)); } }
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); }
/// <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; }
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}")); } } }
public SmsWithIndex(int index, SmsStatus status, PhoneNumber sender, DateTimeOffset receiveTime, string message) : base(status, sender, receiveTime, message) { Index = index; }
public static string ToString(SmsStatus smsStatus) { return(LUT.First(x => x.Key == smsStatus).Value); }