public ActionResult Send(string message, string phone)
        {
            SessionKontrol();
            if (_users != null)
            {
                var smssettings = _SMSSettingsServices.Get(1);

                //   bool IsItSended = _SMSHelpers.Send2(smssettings.ApiLink,smssettings.Account,smssettings.Login,smssettings.Password,smssettings.From,phone,message);
                string val = _SMSHelpers.sendSms(smssettings.AppKey, smssettings.Secret, smssettings.ConsumerKey, smssettings.ServiceName, message, phone);

                SMSRequest smsrqst = JsonConvert.DeserializeObject <SMSRequest>(val);
                string     httpcd  = smsrqst.httpCode.Substring(0, 3);

                if (httpcd == "200")
                {
                    SMSHistoryViewModel smsvm = new SMSHistoryViewModel();
                    smsvm.Phone   = phone;
                    smsvm.Message = message;
                    _SMSHistoryServices.Add(smsvm);

                    _unitOfWork.SaveChanges();
                    return(RedirectToAction("Index", "SMS"));
                }
                else
                {
                    return(RedirectToAction("SmsNotSended", "SMS", new { errorCode = smsrqst.errorCode }));
                }
            }
            else
            {
                return(RedirectToAction("Index", "Login"));
            }
        }
Exemplo n.º 2
0
 /// <summary>
 /// 参数检查
 /// </summary>
 /// <param name="eRequest">SMSRequest对象</param>
 /// <returns>参数合法,返回true;参数非法,返回false</returns>
 private bool CheckParas(SMSRequest eRequest)
 {
     if (eRequest == null)
     {
         _eResponse.Success = false;
         _eResponse.ErrMsg  = "SMSRequest对象不能为null.";
         return(false);
     }
     if (string.IsNullOrEmpty(eRequest.AppId))
     {
         _eResponse.Success = false;
         _eResponse.ErrMsg  = "AppId不能为null或空.";
         return(false);
     }
     if (string.IsNullOrEmpty(eRequest.Mobile))
     {
         _eResponse.Success = false;
         _eResponse.ErrMsg  = "Mobile不能为null或空.";
         return(false);
     }
     if (string.IsNullOrEmpty(eRequest.Content))
     {
         _eResponse.Success = false;
         _eResponse.ErrMsg  = "Content不能为null或空.";
         return(false);
     }
     return(true);
 }
Exemplo n.º 3
0
        //public SMSController()
        //{

        //}

        //public SMSController(ISMSService smsService)
        //{
        //    //_smsService = smsService;
        //}

        public HttpResponseMessage Post(SMSRequest request)
        {
            var smsevents = new SMSEvents();

            switch (request.action)
            {
            case "test":
                break;

            case "outgoing":
            {
                var msgs     = SMSService.FindBy(s => s.Status == 1);
                var messages = new List <SmsOutgoingMessage>();

                if (msgs.Count > 0)
                {
                    foreach (var msg in msgs)
                    {
                        var m = new SmsOutgoingMessage()
                        {
                            id       = msg.SMSID.ToString(),
                            message  = "\"" + msg.Text + "\"",
                            to       = msg.MobileNumber,
                            priority = null,
                            type     = null
                        };

                        messages.Add(m);
                    }
                }

                // messages.Add(messageTwo);
                var sendevents = new List <SmsEventSend>();

                var ev = new SmsEventSend()
                {
                    @event   = "send",
                    messages = messages
                };
                sendevents.Add(ev);
                smsevents.events = sendevents;

                return(Request.CreateResponse(HttpStatusCode.OK, smsevents));
            }

            case "send_status":
            {
                if (request.status == "sent")
                {
                    var id  = Convert.ToInt32(request.id);
                    var msg = SMSService.FindById(id);
                    msg.Status = 2;
                    SMSService.EditSMS(msg);
                }
                break;
            }
            }

            return(Request.CreateResponse(HttpStatusCode.OK, smsevents));
        }
Exemplo n.º 4
0
        public static string SendSMS(string recipientPhone, string message)
        {
            string senderAddress = "KW-IRS";
            string username      = "******";
            string password      = "******";

            Configuration configuration = new Configuration(username, password);
            SMSClient     smsClient     = new SMSClient(configuration);

            try
            {
                LoginResponse loginResponse = smsClient.CustomerProfileClient.Login();
                if (loginResponse.Verified == false)
                {
                    throw new Exception("SMS gateway user credentials is not verified!");
                }
            }
            catch (RequestException ex)
            {
                throw new Exception(ex.Message);
            }

            SMSRequest smsRequest = new SMSRequest(senderAddress, message, recipientPhone);

            // Store request id because we can later query for the delivery status with it:
            string requestId = smsClient.SmsMessagingClient.SendSMS(smsRequest).ToString();

            return(requestId);
        }
Exemplo n.º 5
0
        /// <summary>
        /// 发送手机短信验证码(这里模版id需要修改)
        /// </summary>
        /// <param name="req">数据报文</param>
        /// <returns></returns>
        public static string SendVercode(SMSRequest req)
        {
            XmlSerializer xmlSerializer = new XmlSerializer(typeof(SMSRequest));
            StringWriter  sw            = new StringWriter();

            xmlSerializer.Serialize(sw, req);

            string formData = sw.ToString().Replace("utf-16", "utf-8");
            string formUrl  = "http://111.13.19.27/smsbill/mt";

            Dictionary <string, string> dic = new Dictionary <string, string>();

            dic.Add("Cmd", "mt");
            int timestamp = StringExtension.getTimeStamp(DateTime.Now);

            dic.Add("TS", timestamp.ToString());
            string md5String = (formData + timestamp + "5B04B6DE58D5FE0C4A94BDC0B129AB41").ToMd5();

            dic.Add("Authorization", md5String);

            try
            {
                string result = HttpHelper.Post(formUrl, dic, formData);

                ResetPasswordLog resetLog = new ResetPasswordLog();
                string           id       = Guid.NewGuid().ToString();
                resetLog.ID        = id;
                resetLog.InputTime = DateTime.Now;
                return(result);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public IHttpActionResult SendSMS([FromBody] SMSRequestModel model)
        {
            var request = new SMSRequest(model.UserNumber);

            request.SendSms();
            return(Ok());
        }
Exemplo n.º 7
0
        private static void test_notify_url()
        {
            var configuration = new Configuration("ENVOTIONS", "Envo6183");

            var smsClient = new SMSClient(configuration);

            {
                var smsRequest = new SMSRequest("ABC", "InfobipDeliveryReport" + DateTime.Now.ToShortDateString(), new string[] { "+886921859698" });
                smsRequest.NotifyURL    = "http://zutech-sms.azurewebsites.net/api/InfobipDeliveryReport";
                smsRequest.CallbackData = "InfobipDeliveryReport";
                SendMessageResult sendMessageResult = smsClient.SmsMessagingClient.SendSMS(smsRequest);

                // requestId = messageId;

                string requestId = sendMessageResult.ClientCorrelator; // you can use this to get deliveryReportList later.

                Console.WriteLine(requestId);
            }

            {
                var smsRequest = new SMSRequest("ABC", "InfobipDeliveryReportRawBody" + DateTime.Now.ToShortDateString(), new string[] { "+886921859698" });
                smsRequest.NotifyURL    = "http://zutech-sms.azurewebsites.net/api/InfobipDeliveryReportRawBody";
                smsRequest.CallbackData = "InfobipDeliveryReportRawBody";
                SendMessageResult sendMessageResult = smsClient.SmsMessagingClient.SendSMS(smsRequest);

                // requestId = messageId;

                string requestId = sendMessageResult.ClientCorrelator; // you can use this to get deliveryReportList later.

                Console.WriteLine(requestId);
            }
        }
        public static void Execute()
        {
            // Configure in the 'app.config' which Logger levels are enabled(all levels are enabled in the example)
            // Check http://logging.apache.org/log4net/release/manual/configuration.html for more informations about the log4net configuration
            XmlConfigurator.Configure(new FileInfo("OneApiExamples.exe.config"));


            // example:initialize-sms-client
            Configuration configuration = new Configuration(System.Configuration.ConfigurationManager.AppSettings.Get("Username"),
                                                            System.Configuration.ConfigurationManager.AppSettings.Get("Password"));
            SMSClient smsClient = new SMSClient(configuration);
            // ----------------------------------------------------------------------------------------------------

            // example:prepare-message-without-notify-url
            SMSRequest smsRequest = new SMSRequest(senderAddress, message, recipientAddress);
            // ----------------------------------------------------------------------------------------------------

            // example:send-message
            // Store request id because we can later query for the delivery status with it:
            SendMessageResult sendMessageResult = smsClient.SmsMessagingClient.SendSMS(smsRequest);

            // ----------------------------------------------------------------------------------------------------

            // Few seconds later we can check for the sending status
            System.Threading.Thread.Sleep(10000);

            // example:query-for-delivery-status
            DeliveryInfoList deliveryInfoList = smsClient.SmsMessagingClient.QueryDeliveryStatus(senderAddress, sendMessageResult.ClientCorrelator);
            string           deliveryStatus   = deliveryInfoList.DeliveryInfos[0].DeliveryStatus;

            // ----------------------------------------------------------------------------------------------------
            Console.WriteLine(deliveryStatus);
        }
Exemplo n.º 9
0
        public static void Execute()
        {
            // Configure in the 'app.config' which Logger levels are enabled(all levels are enabled in the example)
            // Check http://logging.apache.org/log4net/release/manual/configuration.html for more informations about the log4net configuration
            XmlConfigurator.Configure(new FileInfo("OneApiExamples.exe.config"));


            // Initialize Configuration object
            Configuration configuration = new Configuration(System.Configuration.ConfigurationManager.AppSettings.Get("Username"),
                                                            System.Configuration.ConfigurationManager.AppSettings.Get("Password"));

            // Initialize SMSClient using the Configuration object
            SMSClient smsClient = new SMSClient(configuration);

            SMSRequest smsRequest = new SMSRequest(senderAddress, message, recipientAddress);

            smsRequest.Language = new Language(LanguageCode.Default);

            // smsRequest.Language = new Language(LanguageCode.Turkish, true, false);

            smsClient.SmsMessagingClient.SendSMSAsync(smsRequest, (sendMessageResult, e) =>
            {
                if (e == null)
                {
                    Console.WriteLine(sendMessageResult);
                }
                else
                {
                    Console.WriteLine(e.Message);
                }
            });
        }
Exemplo n.º 10
0
        /// <summary>
        ///     发送短信.
        /// </summary>
        /// <param name="requestParams">短信发送对象.</param>
        /// <returns>返回对象<see cref="UCloudSDK.Models.SMSResponse" /></returns>
        public SMSResponse SendSms(SMSRequest requestParams)
        {
            var request = new RestRequest(Method.GET);

            request.AddUObject(requestParams);
            return(Execute <SMSResponse>(request));
        }
Exemplo n.º 11
0
 /// <summary>
 /// SMSRequest对象转换成类型为SMSDTO的数据传输对象
 /// </summary>
 /// <param name="smsId">SMS编号</param>
 /// <param name="eRequest">SMSRequest对象</param>
 /// <returns>类型为SMSDTO的数据传输对象</returns>
 private SMSDTO ConverToCommonDTO(string smsId, SMSRequest eRequest)
 {
     return(new SMSDTO
     {
         Id = smsId,
         AppId = eRequest.AppId,
         Mobile = eRequest.Mobile,
         Content = eRequest.Content
     });
 }
        /// <summary>
        /// Send an SMS asynchronously over OneAPI to one or more mobile terminals using the customized 'SMS' object </summary>
        /// <param name="sms"> (mandatory) object containing data needed to be filled in order to send the SMS </param>
        /// <param name="callback"> (mandatory) method to call after receiving sent SMS response </param>
        public void SendSMSAsync(SMSRequest smsRequest, System.Action <SendMessageResult, RequestException> callback)
        {
            StringBuilder urlBuilder = new StringBuilder(SMS_MESSAGING_OUTBOUND_URL_BASE).Append("/");

            urlBuilder.Append(HttpUtility.UrlEncode(smsRequest.SenderAddress));
            urlBuilder.Append("/requests");

            RequestData requestData = new RequestData(urlBuilder.ToString(), Method.POST, null, smsRequest);

            ExecuteMethodAsync <SendMessageResult>(requestData, callback);
        }
Exemplo n.º 13
0
        /// <summary>
        /// Send a SMS message.
        /// </summary>
        /// <param name="request">The SMS message request</param>
        /// <param name="creds">(Optional) Overridden credentials for only this request</param>
        /// <exception cref="SmsResponseException">Thrown when the status of a message is non-zero or response is empty</exception>
        /// <returns></returns>
        public static SMSResponse Send(SMSRequest request, Credentials creds = null)
        {
            if (string.IsNullOrEmpty(request.from))
            {
                request.from = Configuration.Instance.Settings["Nexmo.sender_id"];
            }
            var response = ApiRequest.DoPostRequestUrlContentFromObject <SMSResponse>(ApiRequest.GetBaseUriFor(typeof(SMSResponse), "/sms/json"), request, creds);

            ValidateSmsResponse(response);
            return(response);
        }
Exemplo n.º 14
0
        public static SMSResponse Send(SMSRequest request)
        {
            if (string.IsNullOrEmpty(request.from))
            {
                request.from = System.Configuration.ConfigurationManager.AppSettings["Nexmo.sender_id"];
            }

            var jsonstring = ApiRequest.DoRequest(ApiRequest.GetBaseUriFor(typeof(SMSResponse), "/sms/json"), request);

            return(JsonConvert.DeserializeObject <SMSResponse>(jsonstring));
        }
        //*************************SMSMessagingClientImpl public******************************************************************************************************************************************************
        /// <summary>
        /// Send an SMS over OneAPI to one or more mobile terminals using the customized 'SMS' object </summary>
        /// <param name="sms"> (mandatory) object containing data needed to be filled in order to send the SMS </param>
        /// <returns> SendMessageResult </returns>
        public SendMessageResult SendSMS(SMSRequest smsRequest)
        {
            StringBuilder urlBuilder = new StringBuilder(SMS_MESSAGING_OUTBOUND_URL_BASE).Append("/");

            urlBuilder.Append(HttpUtility.UrlEncode(smsRequest.SenderAddress));
            urlBuilder.Append("/requests");

            RequestData requestData = new RequestData(urlBuilder.ToString(), Method.POST, null, smsRequest);

            return(ExecuteMethod <SendMessageResult>(requestData));
        }
Exemplo n.º 16
0
        /// <summary>
        /// Send a SMS message.
        /// </summary>
        /// <param name="request">The SMS message request</param>
        /// <param name="creds">(Optional) Overridden credentials for only this request</param>
        /// <returns></returns>
        public static SMSResponse Send(SMSRequest request, Credentials creds = null)
        {
            if (string.IsNullOrEmpty(request.from))
            {
                request.from = Configuration.Instance.Settings["Nexmo.sender_id"];
            }

            var response = ApiRequest.DoPostRequest(ApiRequest.GetBaseUriFor(typeof(SMSResponse), "/sms/json"), request, creds);

            return JsonConvert.DeserializeObject<SMSResponse>(response.JsonResponse);
        }
Exemplo n.º 17
0
        public void SendSmsTest()
        {
            var phone = new NList();

            phone.Add("138xxxxxxxx");
            phone.Add("189xxxxxxxx");
            var content  = "你好,Ucloud";
            var entity   = new SMSRequest(phone, content);
            var response = ucloud.SendSms(entity);

            Assert.AreEqual(response.RetCode, 0);
        }
        private static string notifyUrl        = ""; //e.g. "http://127.0.0.1:3000/" 3000=Default port for 'Delivery Info Notifications' server simulator

        public static void Execute()
        {
            // Configure in the 'app.config' which Logger levels are enabled(all levels are enabled in the example)
            // Check http://logging.apache.org/log4net/release/manual/configuration.html for more informations about the log4net configuration
            XmlConfigurator.Configure(new FileInfo("OneApiExamples.exe.config"));


            // Initialize Configuration object
            Configuration configuration = new Configuration(System.Configuration.ConfigurationManager.AppSettings.Get("Username"),
                                                            System.Configuration.ConfigurationManager.AppSettings.Get("Password"));

            // Initialize SMSClient using the Configuration object
            SMSClient smsClient = new SMSClient(configuration);

            // Add listener(start push server and wait for the 'Delivery Info Notifications')
            smsClient.SmsMessagingClient.AddPushDeliveryStatusNotificationsListener(new DeliveryStatusNotificationsListener((deliveryInfoNotification) =>
            {
                // Handle pushed 'Delivery Info Notification'
                if (deliveryInfoNotification != null)
                {
                    string deliveryStatus = deliveryInfoNotification.DeliveryInfo.DeliveryStatus;
                    Console.WriteLine(deliveryStatus);
                }
            }));

            // example:prepare-message-with-notify-url
            SMSRequest smsRequest = new SMSRequest(senderAddress, message, recipientAddress);

            // The url where the delivery notification will be pushed:
            smsRequest.NotifyURL = notifyUrl;
            // ----------------------------------------------------------------------------------------------------

            // Send SMS
            smsClient.SmsMessagingClient.SendSMS(smsRequest);

            // Wait 30 seconds for 'Delivery Info Notification' push-es before closing the server connection
            System.Threading.Thread.Sleep(30000);

            // Remove 'Delivery Info Notifications' push listeners and stop the server
            smsClient.SmsMessagingClient.RemovePushDeliveryStatusNotificationsListeners();
        }
Exemplo n.º 19
0
        public void Case2()
        {
            //return;

            string mobile = "0928873075";

            try
            {
                foreach (var fmt in new PhoneNumberFormat[] {
                    //PhoneNumberFormat.INTERNATIONAL,
                    //PhoneNumberFormat.NATIONAL,
                    PhoneNumberFormat.E164
                })
                {
                    string formattedNumber = MobileUtil.Format(mobile, fmt);

                    formattedNumber = formattedNumber.Replace("+", string.Empty);

                    string userName = "******";
                    string password = "******";

                    var configuration = new Configuration(userName, password);
                    var SMSClient     = new SMSClient(configuration);

                    var SMSRequest = new SMSRequest(userName, formattedNumber, new string[] { formattedNumber });

                    //SendMessageResult sendMessageResult = SMSClient.SmsMessagingClient.SendSMS(SMSRequest);

                    //string requestId = sendMessageResult.ClientCorrelator; // you can use this to get deliveryReportList later.


                    //Console.WriteLine(formattedNumber);
                    //Console.WriteLine(requestId);
                }
            }
            catch
            {
                throw;
            }
        }
Exemplo n.º 20
0
        public void RetrySMS(int sendMessageHistoryId)
        {
            var sendMessageHistory = this.unitOfWork.Repository <SendMessageHistory>().GetById(sendMessageHistoryId);

            string message = sendMessageHistory.SendBody;

            var senderAddress = sendMessageHistory.SenderAddress;

            string[] recipientAddress = { sendMessageHistory.DestinationAddress };

            this.logService.Debug("InfobipSmsProvider(smsProviderType = {0}),重試簡訊(簡訊發送結果歷史紀錄編號:{1},發送內容:{2},發送名單:[{3}])",
                                  smsProviderType.ToString(),
                                  sendMessageHistory.Id,
                                  message,
                                  string.Join("、", recipientAddress));

            if (systemParameters.AllowSendMessage)
            {
                var smsRequest = new SMSRequest(senderAddress, message, recipientAddress);
                // 還是不知道怎麼使用
                // http://dev.infobip.com/v1/docs/logs-vs-delivery-reports
                // http://dev.infobip.com/docs/notify-url
                // 還是不知道怎麼使用 smsRequest.NotifyURL = "";
                //smsRequest.NotifyURL = @"http://zutech-sms.azurewebsites.net/api/InfobipNotification";

                SendMessageResult sendMessageResult = this.smsClient.SmsMessagingClient.SendSMS(smsRequest);

                this.logService.Debug("InfobipSmsProvider(smsProviderType = {0}),重試簡訊(簡訊發送結果歷史紀錄編號:{1},回傳簡訊發送識別碼:{2},回傳結果:{3})",
                                      smsProviderType.ToString(),
                                      sendMessageHistory.Id,
                                      sendMessageResult.ClientCorrelator,
                                      sendMessageResult.ToString());

                string requestId = sendMessageResult.ClientCorrelator; // you can use this to get deliveryReportList later.

                UpdateDb_RetrySMS(sendMessageHistory, sendMessageResult);
            }
        }
Exemplo n.º 21
0
        public string SendSMS(string[] receiverAddress, string SMSMessage, string senderAddress)
        {
            var username = Properties.Settings.Default.OneAPI_Auth_Username;
            var password = Properties.Settings.Default.OneAPI_Auth_Password;

            try
            {
                Configuration configuration = new Configuration(username, password);
                SMSClient     smsClient     = new SMSClient(configuration);

                SMSRequest smsRequest = new SMSRequest(senderAddress, SMSMessage, receiverAddress);

                string requestId = smsClient.SmsMessagingClient.SendSMS(smsRequest).ToString();

                return(requestId);
            }

            catch
            {
                Exception ex;
                return("");
            }
        }
Exemplo n.º 22
0
        public async Task <dynamic> RequestSMSCode(SMSRequest model)
        {
            HttpResponseMessage responce = Utils.CheckModel(model, Request);

            if (!responce.IsSuccessStatusCode)
            {
                return(responce);
            }

            ApplicationUser user = await LoginUtils.findByIdentifierAsync(model.phone.ToString(), UserManager);

            if (user == null || !String.Equals(user.LastName, model.lastName, StringComparison.OrdinalIgnoreCase)) //if the user does not exist, or if their last name does not match phone number
            {
                return(Request.CreateResponse(HttpStatusCode.BadRequest, ErrorResponse.CantLogin));
            }
            else
            {
                string otp = Base.LoginUtils.GenerateOTP(user);
                await SMSService.SendMessage(model.phone.ToString(), String.Format("Your SMS code is {0} use it to login within {1} min", otp, LoginUtils.Interval / 60));
            }

            return(responce);
        }
        public static void Execute()
        {
            // Configure in the 'app.config' which Logger levels are enabled(all levels are enabled in the example)
            // Check http://logging.apache.org/log4net/release/manual/configuration.html for more informations about the log4net configuration
            XmlConfigurator.Configure(new FileInfo("OneApiExamples.exe.config"));


            // Initialize Configuration object
            Configuration configuration = new Configuration(System.Configuration.ConfigurationManager.AppSettings.Get("Username"),
                                                            System.Configuration.ConfigurationManager.AppSettings.Get("Password"));

            // Initialize SMSClient using the Configuration object
            SMSClient smsClient = new SMSClient(configuration);

            string[] address = new string[2];
            address[0] = recipientAddress;
            address[1] = recipientAddress;

            SMSRequest smsRequest = new SMSRequest(senderAddress, message, address);

            SendMessageResult sendMessageResult = smsClient.SmsMessagingClient.SendSMS(smsRequest);

            Console.WriteLine(sendMessageResult);
        }
Exemplo n.º 24
0
        public SMSResponse SendSMS(SMSRequest smsRequest)
        {
            var smsRepeater = new SmsRepeater();

            return(smsRepeater.SendSMS(smsRequest));
        }
Exemplo n.º 25
0
        public HttpResponseMessage Post(SMSRequest request)
        {
            var smsevents = new SMSEvents();

            //var headerparam = request.GetQueryNameValuePairs();

            //if(request.Content.Headers.Contains("action"))
            //{
            //    return null;
            //}

            //var action = headerparam.SingleOrDefault(t => t.Key == "action");

            if (request.action == "test")
            {
            }

            else if (request.action == "outgoing")
            {
                var msgs     = _smsService.FindBy(s => s.Status == 1);
                var messages = new List <SmsOutgoingMessage>();

                //var outmsgs = new List<out>
                foreach (var msg in msgs)
                {
                    var m = new SmsOutgoingMessage()
                    {
                        id       = msg.SMSID.ToString(),
                        message  = msg.Text,
                        to       = msg.MobileNumber,
                        priority = null,
                        type     = null
                    };
                    messages.Add(m);
                }

                var sendevents = new List <SmsEventSend>();

                //var messageOne = new SmsOutgoingMessage()
                //{
                //    id = "9y7c9cya5711b",
                //    message = "\"Hello Yareda! You are selected to be man of the day! CATS\"",
                //    to = "0911663223",
                //    priority = null,
                //    type = null
                //};

                //var messageTwo = new SmsOutgoingMessage()
                //{
                //    id = "9c7c9cya5711b",
                //    message = "\"Hello Fish! You are selected to be man of the day again! CATS\"",
                //    to = "0911306248",
                //    priority = null,
                //    type = null
                //};

                //messages.Add(messageOne);
                //messages.Add(messageTwo);

                var ev = new SmsEventSend()
                {
                    @event   = "send",
                    messages = messages
                };
                sendevents.Add(ev);
                smsevents.events = sendevents;

                return(Request.CreateResponse(HttpStatusCode.OK, smsevents));
            }
            return(Request.CreateResponse(HttpStatusCode.OK, smsevents));
        }
Exemplo n.º 26
0
        public HttpResponseMessage Post(SMSRequest request)
        {
            var phone = _db.PhoneStatus.Find(1);

            phone.BatteryLevel = request.battery;
            phone.Network      = request.network;
            phone.PowerMode    = request.power;
            phone.SIM_Number   = request.phone_number;
            //phone.LastConnected = _mv.ToDateTime(Convert.ToDouble(request.now));
            phone.LastConnected = DateTime.Now;
            _db.SaveChanges();

            var smsevents = new SMSEvents();

            char[] separators = { ' ', ',', '-', '_', '/', ':', ';', '~' };

            switch (request.action)
            {
            case "test":
                break;

            case "outgoing":
            {
                var msgs     = _db.Messages.Where(m => m.Status == 7).Take(200);
                var msgLogs  = _db.MessageLogs.Where(m => m.Status == 4);
                var messages = new List <SmsOutgoingMessage>();

                //This if clause is needed because the outgoing messages are fetched from two tables and sent to the mobile client as if they are all coming from the same table.
                if (msgs.Any())
                {
                    messages.AddRange(msgs.ToList().Select(msg => new SmsOutgoingMessage()
                        {
                            id       = "P" + msg.MessageID.ToString(),
                            message  = msg.msg_body,
                            to       = msg.User.PhoneNumber,
                            priority = null,
                            type     = null
                        }));
                }
                if (msgLogs.Any())
                {
                    messages.AddRange(msgLogs.ToList().Select(msg => new SmsOutgoingMessage()
                        {
                            id       = "S" + msg.MessageID.ToString(),
                            message  = msg.MessageBody,
                            to       = msg.PhoneNumber,
                            priority = null,
                            type     = null
                        }));
                }

                var sendevents = new List <SmsEventSend>();
                var ev         = new SmsEventSend()
                {
                    @event   = "send",
                    messages = messages
                };
                sendevents.Add(ev);
                smsevents.events = sendevents;
                return(Request.CreateResponse(HttpStatusCode.OK, smsevents));
            }

            case "incoming":
            {
                if (request.message_type != "sms")
                {
                    //Add MMS Functionality here
                    return(Request.CreateResponse(HttpStatusCode.OK, request));
                }
                var fm = request.from;

                //RealHub.Value.Clients.All.notify();

                //Check if the message is coming from a registered user
                var s = _db.Users.Where(t => t.PhoneNumber == fm).ToList().FirstOrDefault();

                //var tag = request.message.TrimStart().Take(1).FirstOrDefault();


                char[] separator      = { ' ' };
                var    token          = request.message;
                var    code           = request.message.Split(separator).First().ToUpper();
                var    replay         = new MessageLog();
                var    comprayer      = new MessageLog();
                var    services       = _db.ServiceCodes.Where(y => y.Type == 1).ToList();
                var    customServices = _db.ServiceCodes.Where(y => y.Type == 2 && y.Active == true).ToList();

                var serviceRequest = new ServiceRequest
                {
                    RequestFromNumber = request.@from,
                    RequestTime       = DateTime.Now,
                    RequestFromName   = s != null ? s.Name : ""
                };


                //Determine which original service type it is: Registration, Prayer and Comments
                // var c=' ';
                if (code.Equals(services.Find(t => t.ServiceCodeID == 1).Code.ToUpper()))
                {
                    //It means it is a registration request
                    //c = 'R';
                    var sr = services.Find(t => t.ServiceCodeID == 1);
                    serviceRequest.ServiceCodeID = 1;
                    sr.ServiceRequests.Add(serviceRequest);
                    _db.SaveChanges();

                    if (sr.Active)
                    {
                        var values = token.Split(separator, 3);
                        try
                        {
                            var firstName = values[1];
                            var lastName  = values[2];
                        }
                        catch (IndexOutOfRangeException e)
                        {
                        }

                        var member = new User
                        {
                            PhoneNumber = request.@from,
                            Name        = (values[1] + " " + values[2]).ToUpper(),
                            Status      = 3
                        };
                        var exists = _db.Users.Where(t => t.PhoneNumber == fm).ToList();

                        if (!exists.Any())
                        {
                            _db.Users.Add(member);
                            _db.SaveChanges();
                            if (sr.AutoReply)
                            {
                                replay.PhoneNumber = request.from;
                                replay.MessageBody = sr.Response;
                                replay.Status      = 4;
                                replay.Time        = DateTime.Now;
                                _db.MessageLogs.Add(replay);
                            }
                            _db.SaveChanges();
                        }
                        else
                        {
                            if (sr.AutoReply)
                            {
                                replay.PhoneNumber = request.from;
                                replay.MessageBody = "Someone has already been registered from this number: " +
                                                     request.from;
                                replay.Status = 4;
                                replay.Time   = DateTime.Now;
                                _db.MessageLogs.Add(replay);
                                _db.SaveChanges();
                            }
                        }
                    }
                }
                else if (code.Equals(services.Find(t => t.ServiceCodeID == 2).Code.ToUpper()))
                {
                    // It means it is a prayer request
                    //c = 'P';
                    var sr = services.Find(t => t.ServiceCodeID == 2);
                    serviceRequest.ServiceCodeID = 2;
                    sr.ServiceRequests.Add(serviceRequest);
                    _db.SaveChanges();

                    if (sr.Active)
                    {
                        var vals = token.Split(separator, 2);
                        if (s != null)
                        {
                            comprayer.PhoneNumber = s.Name + Environment.NewLine + request.from;
                        }
                        else
                        {
                            comprayer.PhoneNumber = request.from;
                        }
                        comprayer.MessageBody = vals[1];
                        comprayer.Status      = 5;
                        comprayer.Time        = DateTime.Now;
                        _db.MessageLogs.Add(comprayer);
                        _db.SaveChanges();
                        if (sr.AutoReply)
                        {
                            replay.PhoneNumber = request.from;
                            replay.MessageBody = sr.Response;
                            replay.Status      = 4;
                            replay.Time        = DateTime.Now;
                            _db.MessageLogs.Add(replay);
                            _db.SaveChanges();
                        }
                    }
                }
                else if (code.Equals(services.Find(t => t.ServiceCodeID == 3).Code.ToUpper()))
                {
                    //It means it is a comment
                    //c = 'C';
                    var sr = services.Find(t => t.ServiceCodeID == 3);
                    serviceRequest.ServiceCodeID = 3;
                    sr.ServiceRequests.Add(serviceRequest);
                    _db.SaveChanges();
                    if (sr.Active)
                    {
                        var valls = token.Split(separator, 2);
                        if (s != null)
                        {
                            comprayer.PhoneNumber = s.Name + Environment.NewLine + request.from;
                        }
                        else
                        {
                            comprayer.PhoneNumber = request.from;
                        }
                        comprayer.MessageBody = valls[1];
                        comprayer.Status      = 6;
                        comprayer.Time        = DateTime.Now;
                        _db.MessageLogs.Add(comprayer);
                        _db.SaveChanges();
                        if (sr.AutoReply)
                        {
                            replay.PhoneNumber = request.from;
                            replay.MessageBody = sr.Response;
                            replay.Status      = 4;
                            replay.Time        = DateTime.Now;
                            _db.MessageLogs.Add(replay);
                            _db.SaveChanges();
                        }
                    }
                }
                else
                {
                    var custom = true;
                    foreach (var cs in customServices)
                    {
                        if (code.Equals(cs.Code.ToUpper()) && cs.Active && cs.AutoReply)
                        {
                            serviceRequest.ServiceCodeID = cs.ServiceCodeID;
                            cs.ServiceRequests.Add(serviceRequest);
                            _db.SaveChanges();
                            replay.PhoneNumber = request.from;
                            replay.MessageBody = cs.Response;
                            replay.Status      = 4;
                            replay.Time        = DateTime.Now;
                            _db.MessageLogs.Add(replay);
                            _db.SaveChanges();
                            custom = false;
                        }
                    }

                    if (s != null && custom)
                    {
                        if (s.CurrentSurvey == null)
                        {
                            // A registered member is sending a message for niether services nor for poll answers
                            var m = new MessageLog
                            {
                                MessageBody = request.message,
                                Status      = 1,
                                Time        = _mv.ToDateTime(Convert.ToDouble(request.timestamp)),
                                PhoneNumber = s.Name + Environment.NewLine + request.from
                            };

                            _db.MessageLogs.Add(m);
                            _db.SaveChanges();
                        }
                    }
                    else if (custom)
                    {
                        // Some body is who is not registered is sending a message
                        var m = new MessageLog
                        {
                            MessageBody = request.message,
                            Status      = 1,
                            Time        = _mv.ToDateTime(Convert.ToDouble(request.timestamp)),
                            PhoneNumber = request.from
                        };
                        _db.MessageLogs.Add(m);
                        _db.SaveChanges();
                    }
                }

                // Analyze Poll Answers
                if (s != null && s.CurrentSurvey != null)
                {
                    var response = request.message;
                    var answers  = response.Split(separators, StringSplitOptions.RemoveEmptyEntries);
                    //response.Split(separators, StringSplitOptions.RemoveEmptyEntries);
                    var participant = _db.Users.Find(s.UserId);

                    //Check if this participant  already has answered for this question
                    var done =
                        _db.Answers.Any(
                            a => a.User_UserId == s.UserId && a.Question.Survey_SurveyId == s.Survey.SurveyId);

                    var survey    = participant.Survey;
                    var questions = survey.Questions;

                    if (done)
                    {
                        return(Request.CreateResponse(HttpStatusCode.OK, request));
                    }

                    if (survey.Questions.Count == answers.Count())
                    {
                        var i        = 0;
                        var feedback = new List <Answer>();
                        var parity   = new List <bool>();

                        foreach (var question in questions)
                        {
                            switch (question.QuestionType)
                            {
                            case 1:
                                if (answers[i].ToLower().Contains("yes"))
                                {
                                    parity.Add(true);
                                    var ansYes = new Answer()
                                    {
                                        Question_QuestionId = question.QuestionId,
                                        User_UserId         = participant.UserId,
                                        AnswerType          = 1,
                                        Response            = "Yes",
                                        TimeStamp           = _mv.ToDateTime(Convert.ToDouble(request.timestamp))
                                    };
                                    feedback.Add(ansYes);
                                }
                                else if (answers[i].ToLower().Contains("no"))
                                {
                                    parity.Add(true);
                                    var ansNo = new Answer()
                                    {
                                        Question_QuestionId = question.QuestionId,
                                        User_UserId         = participant.UserId,
                                        AnswerType          = 2,
                                        Response            = "No",
                                        TimeStamp           = _mv.ToDateTime(Convert.ToDouble(request.timestamp))
                                    };
                                    feedback.Add(ansNo);
                                }
                                else
                                {
                                    parity.Add(false);
                                }
                                break;

                            case 2:
                                if (answers[i].IsDecimal() || answers[i].IsInt())
                                {
                                    var ansQty = new Answer()
                                    {
                                        Question_QuestionId = question.QuestionId,
                                        User_UserId         = participant.UserId,
                                        AnswerType          = 3,
                                        Response            = answers[i],
                                        TimeStamp           = _mv.ToDateTime(Convert.ToDouble(request.timestamp))
                                    };
                                    feedback.Add(ansQty);
                                }
                                else
                                {
                                    parity.Add(false);
                                }
                                break;
                            }
                            i++;
                        }

                        if (parity.TrueForAll(t => t.Equals(true)))
                        {
                            var j = 0;
                            foreach (var qs in questions)
                            {
                                qs.Answers.Add(feedback[j]);
                                j++;
                            }
                            _db.SaveChanges();
                            s.CurrentSurvey = null;
                            _db.SaveChanges();
                        }
                        else
                        {
                            var r = new Resolution
                            {
                                SurveyID = survey.SurveyId,
                                UserId   = participant.UserId,
                                message  = request.message,
                                Resolved = false,
                                Time     = _mv.ToDateTime(Convert.ToDouble(request.timestamp))
                            };
                            _db.Resolutions.Add(r);
                            _db.SaveChanges();
                        }
                    }
                    else
                    {
                        var r = new Resolution
                        {
                            SurveyID = survey.SurveyId,
                            UserId   = participant.UserId,
                            message  = request.message,
                            Resolved = false,
                            Time     = _mv.ToDateTime(Convert.ToDouble(request.timestamp))
                        };
                        _db.Resolutions.Add(r);
                        _db.SaveChanges();
                    }
                }



                //else
                //{
                //    var m = new MessageLog
                //    {
                //        MessageBody = request.message,
                //        PhoneNumber = request.@from,
                //        Status = 1,
                //        Time = _mv.ToDateTime(Convert.ToDouble(request.timestamp))
                //    };
                //    _db.MessageLogs.Add(m);
                //    _db.SaveChanges();
                //}

                return(Request.CreateResponse(HttpStatusCode.OK, request));
            }

            case "send_status":
            {
                if (request.status == "sent")
                {
                    var temp = request.id;
                    if (temp.StartsWith("P"))
                    {
                        var id  = Convert.ToInt32(request.id.Substring(1));
                        var msg = _db.Messages.Find(id);
                        msg.Status   = 2;
                        msg.SentTime = DateTime.Now;
                        _db.SaveChanges();
                    }
                    else if (temp.StartsWith("S"))
                    {
                        var id  = Convert.ToInt32(request.id.Substring(1));
                        var msg = _db.MessageLogs.Find(id);
                        msg.Status = 7;
                        msg.Time   = DateTime.Now;
                        _db.SaveChanges();
                    }
                }
                break;
            }
            }
            return(Request.CreateResponse(HttpStatusCode.OK, smsevents));
        }
Exemplo n.º 27
0
        /// <summary>
        /// 发送邮件请求到MQ
        /// </summary>
        /// <param name="eRequest"></param>
        /// <returns></returns>
        public SMSResponse SendSMS(SMSRequest eRequest)
        {
            if (!CheckParas(eRequest))
            {
                return(_eResponse);
            }
            var smsId     = Guid.NewGuid().ToString("N");
            var smsFacade = new SMSFacade();

            try
            {
                while (smsFacade.IsSMSIdExist(smsId))
                {
                    smsId = Guid.NewGuid().ToString("N");
                }
            }
            catch (Exception ex)
            {
                loger.Error("数据库查询SMSId是否存在失败--SMSId:{0}--Exception:{1}".FormatWith(new object[] { smsId, ex }));
            }
            var smsDto = ConverToCommonDTO(smsId, eRequest);

            _eResponse.Success = true;
            _eResponse.SMSId   = smsId;
            _eResponse.ErrMsg  = "";

            loger.Info("开始转发--SMSId:{0}".FormatWith(smsId));
            var bus = MqBusMgr.GetInstance();

            if (!bus.IsConnected || bus.IsNull())
            {
                _eResponse.Success = false;
                _eResponse.ErrMsg  = "无法连接RabbitMQ";
                loger.Error("无法连接RabbitMQ--SMSId:{0}".FormatWith(smsId));
            }
            try
            {
                bus.PublishAsync(smsDto).ContinueWith(task =>
                {
                    if (!(task.IsCompleted && !task.IsFaulted))
                    {
                        _eResponse.Success = false;
                        _eResponse.ErrMsg  = string.Format("发送RabbitMQ失败");
                        loger.Error("发送RabbitMQ失败--SMSId:{0}--Exception:{1}".FormatWith(new object[] { smsId, task.Exception }));
                    }
                }).Wait();
            }
            catch (Exception ex)
            {
                _eResponse.Success = false;
                _eResponse.ErrMsg  = string.Format("发送RabbitMQ失败");
                loger.Error("发送RabbitMQ失败--SMSId:{0}--Exception:{1}".FormatWith(new object[] { smsId, ex }));
            }
            //保存数据库
            var sms = new SMS
            {
                SMSId           = smsDto.Id,
                AppId           = smsDto.AppId,
                SMSContent      = smsDto.Content,
                SMSErrMsg       = _eResponse.ErrMsg,
                SMSMobile       = smsDto.Mobile,
                SMSReceivedTime = DateTime.Now,
                SMSSentTime     = DateTime.Now,
                SMSStatus       = SMSStatus.Received.ToString()
            };

            try
            {
                smsFacade.AddSMS(sms);
            }
            catch (Exception ex)
            {
                loger.Error("数据库增加SMS记录失败--SMSId:{0}--Exception:{1}".FormatWith(new object[] { smsId, ex }));
            }
            loger.Info("结束转发--SMSId:{0}--结果:{1}".FormatWith(new object[] { smsId, _eResponse.Success }));
            return(_eResponse);
        }
Exemplo n.º 28
0
 public static SMSResponse SendSMS(SMSRequest request)
 {
     var jsonstring = ApiRequest.DoRequest(ApiRequest.GetBaseUriFor(typeof(SMSRequest), "/sms/json"), new Dictionary<string, string>()
     {
         {"from", request.from},
         {"to", request.to},
         {"type", request.sms_type.ToString()},
         {"text", request.text}
     });
     return JsonConvert.DeserializeObject<SMSResponse>(jsonstring);
 }
Exemplo n.º 29
0
        public void SendSMS(int sendMessageQueueId)
        {
            var sendMessageQueue = this.unitOfWork.Repository <SendMessageQueue>().GetById(sendMessageQueueId);

            string message = sendMessageQueue.SendBody;

            var messageReceivers = this.unitOfWork.Repository <MessageReceiver>().GetMany(p =>
                                                                                          p.SendMessageRuleId == sendMessageQueue.SendMessageRuleId &&
                                                                                          p.SendBody == message).ToList();

            var senderAddress   = string.Empty;
            var sendMessageRule = this.unitOfWork.Repository <SendMessageRule>().GetById(sendMessageQueue.SendMessageRuleId);

            if (sendMessageRule != null)
            {
                senderAddress = sendMessageRule.SenderAddress;
            }

            string[] recipientAddress = messageReceivers.Select(p => p.E164Mobile).ToArray();

            this.logService.Debug("InfobipSmsProvider(smsProviderType = {0}),發送簡訊(簡訊編號:{1},簡訊序列編號:{2},發送內容:{3},發送名單(共{4}筆):[{5}])",
                                  smsProviderType.ToString(),
                                  sendMessageQueue.SendMessageRuleId,
                                  sendMessageQueue.Id,
                                  message,
                                  recipientAddress.Length,
                                  string.Join("、", recipientAddress));

            if (systemParameters.AllowSendMessage)
            {
                var smsRequest = new SMSRequest(senderAddress, message, recipientAddress);
                //smsRequest.NotifyURL = "http://zutech-sms.azurewebsites.net/api/InfobipDeliveryReport";
                // 還是不知道怎麼使用
                // http://dev.infobip.com/v1/docs/logs-vs-delivery-reports
                // http://dev.infobip.com/docs/notify-url


                SendMessageResult sendMessageResult = this.smsClient.SmsMessagingClient.SendSMS(smsRequest);

                this.logService.Debug("InfobipSmsProvider(smsProviderType = {0}),發送簡訊(簡訊編號:{1},簡訊序列編號:{2},回傳簡訊發送識別碼:{3},回傳結果:{4})",
                                      smsProviderType.ToString(),
                                      sendMessageQueue.SendMessageRuleId,
                                      sendMessageQueue.Id,
                                      sendMessageResult.ClientCorrelator,
                                      sendMessageResult.ToString());

                // Send Email
                string   subject = sendMessageQueue.SendTitle;
                string   body    = message;
                string[] emails  = messageReceivers.Where(p => !string.IsNullOrEmpty(p.Email)).Select(p => p.Email).ToArray();
                if (emails.Any())
                {
                    this.logService.Debug("InfobipSmsProvider(smsProviderType = {0}),發送Email(簡訊編號:{1},簡訊序列編號:{2},主旨:{3},內容:{4},發送名單:[{5}])",
                                          smsProviderType.ToString(),
                                          sendMessageQueue.SendMessageRuleId,
                                          sendMessageQueue.Id,
                                          subject,
                                          body,
                                          string.Join("、", emails));

                    BackgroundJob.Enqueue <CommonMailService>(x => x.Send(subject, body, emails));
                }
                else
                {
                    this.logService.Debug("InfobipSmsProvider(smsProviderType = {0}),無須發送Email(簡訊編號:{1},簡訊序列編號:{2})",
                                          smsProviderType.ToString(),
                                          sendMessageQueue.SendMessageRuleId,
                                          sendMessageQueue.Id);
                }

                string requestId = sendMessageResult.ClientCorrelator; // you can use this to get deliveryReportList later.

                UpdateDb_SendSMS(sendMessageQueue, messageReceivers, sendMessageResult);
            }
        }
Exemplo n.º 30
0
        public int DichVu(DatabaseConstant.Action action, ref DICHVU objDichVu,
                          ref List <ClientResponseDetail> listClientResponseDetail)
        {
            SMSServiceClient client   = null;
            SMSRequest       request  = null;
            SMSResponse      response = null;
            int iret = 1;

            try
            {
                // Kiểm tra kết nối, server, service trước khi request
                Common.Utilities.IsRequestAllow(ApplicationConstant.SystemService.SMSService.layGiaTri());

                client   = SMSServiceClient(ApplicationConstant.SystemService.SMSService);
                request  = Common.Utilities.PrepareRequest(new SMSRequest());
                response = new SMSResponse();

                //Khởi tạo request
                request.Function  = DatabaseConstant.Function.SMS_DANG_KY_DVU;
                request.Action    = action;
                request.objDichVu = objDichVu;

                // make a call to service client here
                response = client.SMS(request);

                //Kiểm tra kết quả trả về
                Common.Utilities.ValidResponse(request, response);

                if (response == null)
                {
                    iret = 0;
                }
                else
                {
                    listClientResponseDetail = Common.Utilities.convertToClientResponseDetail(response);
                    objDichVu = response.objDichVu;
                    if (response.ResponseStatus.Equals(ApplicationConstant.ResponseStatus.THANH_CONG))
                    {
                        iret = 1;
                    }
                    else
                    {
                        iret = 0;
                    }
                }
            }
            catch (Exception ex)
            {
                iret = 0;
                LLogging.WriteLog(System.Reflection.MethodInfo.GetCurrentMethod().ToString(), LLogging.LogType.ERR, ex);
                throw ex;
            }
            finally
            {
                if (client.State == CommunicationState.Faulted)
                {
                    client.Abort();
                }
                else
                {
                    client.Close();
                }

                client   = null;
                request  = null;
                response = null;
            }
            return(iret);
        }