private SendSmsResult GetSendSmsResultFromString(string[] result) { var r = DeserializeStrings(result); var model = new SendSmsResult() { RequestResult = new RequestResult() { TextView = result.Aggregate((a, b) => a + " " + b), ErrorCode = null, ErrorText = "" } }; if (Contains(r, "id")) { model.SendSmsId = (int?)r["id"]; } if (Contains(r, "error_code")) { model.RequestResult.ErrorCode = (int)r["error_code"]; model.RequestResult.ErrorText = r["error"].ToString(); } return(model); }
static SendSmsResult ReadParseRetXml(StreamReader xmlResult) { //返回信息 //<? xml version = "1.0" encoding = "gb2312" ?>< returnsms > //< returnstatus > Faild </ returnstatus > //< message > 非法签名 </ message > //< remainpoint > 0 </ remainpoint > //< taskID > 0 </ taskID > //< successCounts > 0 </ successCounts ></ returnsms > SendSmsResult result = new SendSmsResult(); try { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(xmlResult); //查找<returnsms> XmlNode root = xmlDoc.SelectSingleNode("returnsms"); if (root != null) { //遍历所有子属性 foreach (XmlNode xmlNode in root.ChildNodes) { switch (xmlNode.Name) { case "returnstatus": result.ReturnStatus = "Success".Equals(xmlNode.InnerText); break; case "message": result.Message = xmlNode.InnerText; break; case "remainpoint": uint remainPoint = 0; uint.TryParse(xmlNode.InnerText, out remainPoint); result.RemainPoint = remainPoint; break; case "taskID": int taskId = 0; int.TryParse(xmlNode.InnerText, out taskId); result.TaskID = taskId; break; case "successCounts": uint successCount = 0; uint.TryParse(xmlNode.InnerText, out successCount); result.SuccessCounts = successCount; break; } } } } catch { } return(result); }
public SendSmsResult SendSms(Sms sms) { using (var client = new MittoHttpApiWrapperSync(ApiUrl, ApiKey)) { var request = sms.ToSendSmsRequest(); var response = client.SendSms(request); return(SendSmsResult.FromSmsResponse(response)); } }
/// <summary> /// Send sms message /// </summary> /// <param name="smsAccount">Sms account</param> /// <param name="messageTemplate">Message template</param> /// <param name="message">Message</param> /// <param name="smsTag">Sms tag</param> /// <param name="mobiles">Mobiles</param> /// <param name="asynchronously">Whether send by asynchronously</param> /// <returns>Return send result</returns> public static async Task <SendMessageResult> SendSmsMessageAsync(SmsAccount smsAccount, MessageTemplate messageTemplate, MessageInfo message, string smsTag, IEnumerable <string> mobiles, bool asynchronously = true) { var msgResult = GetSmsOptions(messageTemplate, message, smsTag, mobiles, asynchronously, out var smsOptions); if (!msgResult.Success || smsOptions == null) { return(msgResult); } SendSmsResult smsSendResult = await SmsManager.SendAsync(smsAccount, smsOptions).ConfigureAwait(false); return(smsSendResult.Success ? SendMessageResult.SendSuccess() : SendMessageResult.SendFailed(smsSendResult.Description)); }
/// <summary> /// Send an SMS message to a user who isn't registered. If the user is registered with a mobile app then no message will be sent. /// </summary> /// <param name="userId">The user ID to send the message to</param> /// <param name="force">Force a message to be sent even if the user is already registered as an app user. This will incrase your costs</param> public SendSmsResult SendSms(string userId, bool force = false) { userId = AuthyHelpers.SanitizeNumber(userId); var url = string.Format("{0}/protected/json/sms/{1}?api_key={2}{3}", this.baseUrl, userId, this.apiKey, force ? "&force=true" : string.Empty); return(this.Execute <SendSmsResult>(client => { var response = client.DownloadString(url); SendSmsResult apiResponse = JsonConvert.DeserializeObject <SendSmsResult>(response); apiResponse.Status = AuthyStatus.Success; apiResponse.RawResponse = response; return apiResponse; })); }
/// <summary> /// Function to parse server response from send sms API /// </summary> /// <param name="xmldata">Xml response from server</param> /// <returns></returns> public static SendSmsResult Parse(byte[] xmldata) { var result = new SendSmsResult(); var xDoc = new System.Xml.XmlDocument(); System.Xml.XmlNode rootNode; xDoc.LoadXml(Encoding.UTF8.GetString(xmldata)); rootNode = xDoc["root"].FirstChild; result.Message = (rootNode["message"] != null && !string.IsNullOrEmpty(rootNode["message"].InnerText)) ? rootNode["message"].InnerText : ""; result.ErrorCode = (rootNode["error_code"] != null && !string.IsNullOrEmpty(rootNode["error_code"].InnerText)) ? Int32.Parse(rootNode["error_code"].InnerText) : new Nullable <int>(); result.ErrorMessage = (rootNode["error_message"] != null && !string.IsNullOrEmpty(rootNode["error_message"].InnerText)) ? rootNode["error_message"].InnerText : ""; result.Success = (rootNode["error"].InnerText == "0"); result.ExtraData = (rootNode["exstra_info"] != null && !string.IsNullOrEmpty(rootNode["exstra_info"].InnerText)) ? rootNode["exstra_info"].InnerText : ""; xDoc = null; rootNode = null; return(result); }
/// <summary> /// Odeslani SMS zpravy /// </summary> public static SendSmsResult SendSms(OutgoingSms sms, LoginInfo loginInfo) { if (sms == null) { throw new ArgumentNullException("message"); } if (loginInfo == null) { throw new ArgumentNullException("loginInfo"); } #region pozadavek var doc = new XDocument(); var rootEl = new XElement("outgoing_message"); doc.Add(rootEl); if (sms.RequireDeliveryReport.HasValue) { if (sms.RequireDeliveryReport == true) { rootEl.Add(new XElement("dr_request", "20")); } else { rootEl.Add(new XElement("dr_request", "0")); } } rootEl.Add(new XElement("text", new XCData(sms.Text))); rootEl.Add(new XElement("recipient", sms.Recipient)); if (sms.SendAt.HasValue) { rootEl.Add(new XElement("send_at", sms.SendAt.Value.ToString("yyyyMMddHHmmss"))); } var sb = new StringBuilder(); using (var sw = new StringWriterUtf8(sb)) { doc.Save(sw); } #endregion string url = ApiXml20RecieverUrl .Replace("[login]", HttpUtility.UrlEncodeUnicode(loginInfo.Login)) .Replace("[password]", HttpUtility.UrlEncodeUnicode(loginInfo.Password)) .Replace("[affiliate]", loginInfo.Affiliate); // odeslani string resultString = Communicator.CallUrl(url, sb.ToString(), "POST", "text/xml"); #region zpracovani odpovedi var result = new SendSmsResult() { Status = SendSmsResultStatus.OK, StatusDescription = "OK" }; result.Message = sms; doc = XDocument.Parse(resultString); // chyba if (string.Equals(doc.Root.Name.LocalName, "messages", StringComparison.OrdinalIgnoreCase)) { var messageEl = doc.Root.Elements("message").First(); result.Message.OutgoingSmsID = messageEl.Elements("id").FirstOrDefault().Value; result.Message.Text = messageEl.Elements("text").FirstOrDefault().Value; result.Message.SendAt = DateTime.ParseExact(messageEl.Elements("send_at").FirstOrDefault().Value, "yyyyMMddHHmmss", CultureInfo.InvariantCulture); result.Message.Recipient = messageEl.Elements("recipient").FirstOrDefault().Value; result.Parts = int.Parse(messageEl.Elements("parts").FirstOrDefault().Value); result.Price = decimal.Parse(messageEl.Elements("price").FirstOrDefault().Value, CultureInfo.GetCultureInfo(2057)); result.Credit = decimal.Parse(doc.Root.Elements("credit").First().Value, CultureInfo.GetCultureInfo(2057)); } else { result.StatusDescription = doc.Root.Elements("message").First().Value; switch (doc.Root.Elements("id").First().Value) { case "400;1": result.Status = SendSmsResultStatus.InvalidMsisdn; break; case "400;2": result.Status = SendSmsResultStatus.InvalidText; break; case "400": result.Status = SendSmsResultStatus.InvalidAction; break; case "401": result.Status = SendSmsResultStatus.InvalidLogin; break; case "402": result.Status = SendSmsResultStatus.LowCredit; break; case "500": result.Status = SendSmsResultStatus.GatewayError; break; default: break; } } #endregion return(result); }
/// <summary> /// 发送消息业务(短信,微信) /// </summary> private void ActivitySendMessige() { #region Business Object var ActivityBLL = new C_ActivityBLL(c_loggingSessionInfo); var MessageSendBLL = new C_MessageSendBLL(c_loggingSessionInfo); var ActivityMessageBLL = new C_ActivityMessageBLL(c_loggingSessionInfo); var CommonBLL = new CommonBLL(); #endregion #region 获取所有营销活动 List <IWhereCondition> complexCondition = new List <IWhereCondition> { }; complexCondition.Add(new EqualsCondition() { FieldName = "CustomerID", Value = c_loggingSessionInfo.ClientID }); //complexCondition.Add(new DirectCondition(" ((IsLongTime=1 and GETDATE()>=StartTime) OR (GETDATE()>=StartTime AND GETDATE()<=EndTime)) AND STATUS=0 and IsDelete=0 ")); complexCondition.Add(new DirectCondition(" (IsLongTime=1 or (IsLongTime=0 and GETDATE()<=EndTime)) and STATUS=0 and IsDelete=0 ")); var ActivityList = ActivityBLL.Query(complexCondition.ToArray(), null);//营销活动 #endregion //轮循活动获取到当前活动与发送短信,微信消息集合 foreach (var item in ActivityList) { //预发送消息源 var ActivityMessageList = ActivityMessageBLL.QueryByEntity(new C_ActivityMessageEntity() { ActivityID = item.ActivityID }, null).ToList(); var ActivitySMSMessageList = new List <C_ActivityMessageEntity>(); //短信消息集合 var ActivityWeChatMessageList = new List <C_ActivityMessageEntity>(); //微信消息集合 ActivitySMSMessageList = ActivityMessageList.Where(m => m.MessageType.Trim().Equals("SMS")).ToList(); ActivityWeChatMessageList = ActivityMessageList.Where(m => m.MessageType.Trim().Equals("WeChat")).ToList(); //遍历消息集合,调用发送消息方法 #region 发送短信 string content = ""; string mobile = ""; foreach (var SMSMessage in ActivitySMSMessageList) { List <IWhereCondition> MessageCondition = new List <IWhereCondition> { }; //获取未发送的信息 MessageCondition.Add(new DirectCondition("MessageID='" + SMSMessage.MessageID + "' and IsSend <>2 order by Priority desc ")); var MessageSendList = MessageSendBLL.Query(MessageCondition.ToArray(), null).ToList().Take(5000).ToList(); StringBuilder PhoneStr = new StringBuilder(); //群发短信接口对象 api api1 = new api(); if (MessageSendList.Count > 100) { #region 大于一百条 foreach (var MessageSend in MessageSendList) { if (MessageSend.SendTime <= DateTime.Now) { PhoneStr.Append(MessageSend.Phone + ",");//手机号 } if (string.IsNullOrWhiteSpace(content)) { content = "尊敬的会员," + SMSMessage.Content + "回TD退订【连锁掌柜】"; //消息内容 } mobile = PhoneStr.ToString(); //手机号 } mobile = mobile.TrimEnd(','); //调用群发发送短信接口 SendSmsResult SendSmsResult1 = api1.SendSms("hy_znxx", "znxx", content, mobile, "", "17"); //事物对象 var pTran = ActivityBLL.GetTran(); using (pTran.Connection) { try { if (SendSmsResult1.code == 2) {//发送成功 foreach (var updateItem in MessageSendList) { updateItem.ActualSendTime = DateTime.Now; updateItem.IsSend = 2; updateItem.SendNumber++; MessageSendBLL.Update(updateItem, pTran); } } else {//失败 foreach (var updateItem in MessageSendList) { updateItem.SendNumber++; updateItem.Priority = 1; MessageSendBLL.Update(updateItem, pTran); } } //提交 pTran.Commit(); System.Threading.Thread.Sleep(2000); // 1秒为单位 } catch (Exception ex) { pTran.Rollback(); throw ex; } } #endregion } //else //{ #region 单发 // foreach (var MessageSend in MessageSendList) // { // if (MessageSend.SendTime < DateTime.Now) // { // //移动手机号不能单发 // string yidong = @"^1(34[0-8]|(3[5-9]|5[017-9]|8[278])\\d)\\d{7}$"; // Regex YD = new Regex(yidong); // if (YD.IsMatch(MessageSend.Phone)) // continue; // string NewContent = "尊敬的会员," + MessageSend.Content + "回TD退订【连锁掌柜】"; // //调用群发发送短信接口 // SendSmsResult SendSmsResult2 = api1.SendSms("hy_znxx", "znxx", NewContent, MessageSend.Phone, "", "17"); // if (SendSmsResult2.code == 2) // {//发送成功 // MessageSend.ActualSendTime = DateTime.Now; // MessageSend.IsSend = 2; // MessageSend.SendNumber++; // MessageSendBLL.Update(MessageSend); // } // else // {//失败 // MessageSend.SendNumber++; // MessageSend.Priority = 1; // MessageSendBLL.Update(MessageSend); // } // } // } #endregion //} } #endregion #region 发送微信 foreach (var Weitem in ActivityWeChatMessageList) { List <IWhereCondition> WeMessageCondition = new List <IWhereCondition> { }; //获取预发送的微信 WeMessageCondition.Add(new DirectCondition("MessageID='" + Weitem.MessageID + "' and IsSend =0 order by Priority desc ")); var WeMessageSendList = MessageSendBLL.Query(WeMessageCondition.ToArray(), null).ToList().Take(10000); List <string> OpenIDList = new List <string>(); string WXcontent = ""; foreach (var WeMessageSend in WeMessageSendList) { if (WeMessageSend.SendTime <= DateTime.Now) { OpenIDList.Add(WeMessageSend.OpenID); } if (string.IsNullOrWhiteSpace(WXcontent)) { WXcontent = WeMessageSend.Content; } } if (OpenIDList.Count > 1) { //调用 string Json = CommonBLL.BulkSendWXTemplateMessage(OpenIDList.ToArray(), WXcontent, c_loggingSessionInfo); if (!string.IsNullOrWhiteSpace(Json)) { var Data = JsonHelper.JsonDeserialize <Result>(Json); //事物对象 var pTranWX = ActivityBLL.GetTran(); using (pTranWX.Connection) { try { if (Data.errcode == 0) { foreach (var WXUpdateitem in WeMessageSendList) { WXUpdateitem.ActualSendTime = DateTime.Now; WXUpdateitem.IsSend = 2; WXUpdateitem.SendNumber++; MessageSendBLL.Update(WXUpdateitem, pTranWX); } } else {//失败 foreach (var WXUpdateitem in WeMessageSendList) { WXUpdateitem.SendNumber++; WXUpdateitem.Priority = 1; WXUpdateitem.IsSend = 3; MessageSendBLL.Update(WXUpdateitem, pTranWX); } } //提交 pTranWX.Commit(); System.Threading.Thread.Sleep(2000); // 5秒为单位 } catch (Exception ex) { pTranWX.Rollback(); throw ex; } } } } } #endregion #region 发送邮件 #endregion } }
void ILibSMSService.SendMsg(SendSMSParam param) { if (param.PhoneList == null || param.PhoneList.Count == 0) { throw new ArgumentNullException("短信接收号码为空值"); } try { StringBuilder builder = new StringBuilder(); foreach (string phone in param.PhoneList) { builder.AppendFormat("{0},", phone); } builder.Remove(builder.Length - 1, 1); string phoneStr = builder.ToString(); SMSProvider provider = EnvProvider.Default.SMSProvider; //SMS.wmgwSoapClient client = new SMS.wmgwSoapClient();//调用的方法 //SMSProvider provider = EnvProvider.Default.SMSProvider;//提供必要参数信息:Host(地址),SMSSys(用户名),SMSPwd,Port(端口) if (provider != null && !string.IsNullOrEmpty(provider.SMSSys)) { string message = "【" + provider.SMSSign + "】" + param.Message.Trim(); //string strparam = "action=send&userid=" + param.UserId + "&account=" + param.Account + "&password="******"&content=" + message + "&mobile=" + phoneStr + "&sendtime="; string strparam = string.Format("action=send&userid={0}&account={1}&password={2}&content={3}&mobile={4}&sendtime=", provider.SMSUserId, provider.SMSSys, provider.SMSPwd, message, phoneStr); byte[] bs = Encoding.GetEncoding("GB2312").GetBytes(strparam); string straddress = "http://" + provider.Host + ":" + provider.Port.ToString() + "/smsGBK.aspx"; HttpWebRequest postSmsInfoReq = (HttpWebRequest)HttpWebRequest.Create(straddress); postSmsInfoReq.Method = "POST"; postSmsInfoReq.ContentType = "application/x-www-form-urlencoded";//头 postSmsInfoReq.ContentLength = bs.Length; using (Stream reqStream = postSmsInfoReq.GetRequestStream()) { reqStream.Write(bs, 0, bs.Length); } //string port = provider.Port == 0 ? "*" : provider.Port.ToString(); //string ret = client.MongateCsSpSendSmsNew(provider.SMSSys, provider.SMSPwd, phoneStr, message, // param.PhoneList.Count, port, string.Empty, string.Empty, string.Empty, // string.Empty, string.Empty, string.Empty, 0, string.Empty, string.Empty, 0);//调用方法,返回参数给ret //string ret = string.Empty; //using (WebResponse wr = postSmsInfoReq.GetResponse()) //{ // StreamReader sr = new StreamReader(wr.GetResponseStream(), System.Text.Encoding.Default); // ret = sr.ReadToEnd().Trim(); //} //if (ret.Length < 6)//txt文件保存错误信息 //{ // string path = System.IO.Path.Combine(AxCRL.Comm.Runtime.EnvProvider.Default.MainPath, "Output", "Error", "SMS", string.Format("{0}.txt", DateTime.Now.Ticks));//将字符串组成一个路径 // using (System.IO.FileStream fs = new System.IO.FileStream(path, System.IO.FileMode.Create)) // { // using (System.IO.StreamWriter sw = new System.IO.StreamWriter(fs)) // { // sw.Write(string.Format("发送失败,错误码:{0}", ret)); // } // } //} SendSmsResult ret = null; using (WebResponse wr = postSmsInfoReq.GetResponse()) { StreamReader sr = new StreamReader(wr.GetResponseStream(), System.Text.Encoding.Default); ret = ReadParseRetXml(sr); } if (ret != null && ret.ReturnStatus == false) { string path = Path.Combine(AxCRL.Comm.Runtime.EnvProvider.Default.MainPath, "Output", "Error", "SMS");//将字符串组成一个路径 if (Directory.Exists(path) == false) { Directory.CreateDirectory(path); } path = Path.Combine(path, string.Format("{0}.txt", DateTime.Now.Ticks)); using (System.IO.FileStream fs = new System.IO.FileStream(path, System.IO.FileMode.Create)) { using (System.IO.StreamWriter sw = new System.IO.StreamWriter(fs)) { sw.Write(string.Format("{0}:发送短信失败,{1}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), ret.ToString())); } } } } } catch (Exception ex) { string path = Path.Combine(AxCRL.Comm.Runtime.EnvProvider.Default.MainPath, "Output", "Error", "SMS");//将字符串组成一个路径 if (Directory.Exists(path) == false) { Directory.CreateDirectory(path); } path = Path.Combine(path, string.Format("{0}.txt", DateTime.Now.Ticks)); using (System.IO.FileStream fs = new System.IO.FileStream(path, System.IO.FileMode.Create)) { using (System.IO.StreamWriter sw = new System.IO.StreamWriter(fs)) { sw.Write(string.Format("{0}:发送短信失败,异常:{1}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), ex)); } } } }
SendSmsResult SendSms(string sessionId, SmsConfiguration smsConf, SendSmsRecord sendSms) { SendSmsResult returnValue = new SendSmsResult(); smsService.smsservice smsApi = new smsService.smsservice(); //string[] result = smsApi.SmsInsert_1_N("kalekulup", "cilingir123", null, null, new string[] { sendSms.PhoneNumber }, sendSms.Content); string[] result = smsApi.SmsInsert_1_N(smsConf.UserName, smsConf.Password, null, null, new string[] { sendSms.PhoneNumber }, sendSms.Content); //SendSMSRequest req = new SendSMSRequest(); //req.DeleteDate = ""; //req.GroupID = "0"; //req.SendDate = ""; //req.SessionID = sessionId; //req.Operator = (Operators)(int)smsConf.Operator; //req.Isunicode = Unicode.Yes; //req.Orginator = smsConf.Orginator; //req.ShortNumber = smsConf.ShortNumber; //MessageList mList = new MessageList(); //List<Content> cList = new List<Content>(); //List<GSM> gsmList = new List<GSM>(); //Content cnt = new Content() //{ // Value = sendSms.Content //}; //GSM gsm = new GSM() //{ // Value = sendSms.PhoneNumber //}; //cList.Add(cnt); //gsmList.Add(gsm); //mList.ContentList = cList.ToArray(); //mList.GSMList = gsmList.ToArray(); //req.MessageList = mList; //SendMessageResponse resp = mService.SendSMS(req); returnValue.SendSmsCrmId = sendSms.Id; returnValue.StatusCode = result[0]; //if (resp.Results != null) // returnValue.MessageId = resp.Results[0].MessageID; return returnValue; }