using System; using System.IO; using System.Net; using System.Xml.Serialization; using WX.CRM.CRMServices.SMS.InterfaceModel; namespace WX.CRM.CRMServices.SMS.InterfaceExec { internal class QiXinTong : IMsgSend { string Url = ""; string cpid = ""; string signature = ""; int mid = 0; string port = ""; string keyCode = ""; public QiXinTong() { QiXinTongConfig config = new QiXinTongConfig(); Url = config.Url; cpid = config.cpid; signature = config.signature; mid = config.mid; port = config.port; keyCode = config.keyCode; } public InterfaceModel.ReturnResult Execute(string[] mobiles, string msg) { return sendPkg(mobiles, msg); } public decimal queryAmt() { throw new NotImplementedException(); } #region InterfaceModel.ReturnResult sendPkg(string[] mobiles, string msg) { string timestamp = DateTime.Now.ToString("yyMMddHHmm"); InterfaceModel.ReturnResult result = new InterfaceModel.ReturnResult(); string _Url = Url; MtPacket msgPkg = new MtPacket(); msgPkg.cpid = cpid; msgPkg.mid = mid; msgPkg.port = port; msgPkg.timestamp = timestamp; msgPkg.cpmid = System.DateTime.Now.ToString("MMddHHmmssfff"); ; //至少保证1个月内不重复 msgPkg.msg = msg; // System.Web.HttpUtility.UrlEncode(msg, Encoding.UTF8); msgPkg.signature = WX.CRM.Common.Utility.EncryptMD5(keyCode + timestamp); msgPkg.mobile = string.Join(",", mobiles); msgPkg.validtime = ""; msgPkg.reserve = ""; try { string xmlStr = WX.CRM.Common.Utility.Serialize(msgPkg); result.SendStr = xmlStr; var serializer = new XmlSerializer(typeof(MtPacket)); MemoryStream s = new MemoryStream(); XmlSerializerNamespaces xsn = new XmlSerializerNamespaces(); xsn.Add("", ""); serializer.Serialize(s, msgPkg, xsn); var bs = s.ToArray(); s.Read(bs, 0, bs.Length); s.Close(); result.ReturnStr = Request(_Url, bs); #region 发送方式1 //Encoding myEncoding = Encoding.UTF8; //String sResult = ""; //string param = string.Format("MtPacket={0}", result.SendStr); //byte[] postBytes = Encoding.ASCII.GetBytes(param); //HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(_Url); //req.Method = "POST"; //req.ContentType = "application/x-www-form-urlencoded;charset=utf-8"; //req.ContentLength = postBytes.Length; //Stream webStream = req.GetRequestStream(); //webStream.Write(postBytes, 0, postBytes.Length); //webStream.Close(); //HttpWebResponse webResponse = (HttpWebResponse)req.GetResponse(); //StreamReader reader = new StreamReader(webResponse.GetResponseStream(), myEncoding); //sResult = reader.ReadToEnd(); //reader.Close(); //sResult.Trim(); //result.ReturnStr = sResult; #endregion #region 发送方式样 //string xmlStr = UP.Interface.Common.Utility.Serialize(msgPkg); //result.SendStr = xmlStr; //WebClient webClient = new WebClient(); //webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); //NameValueCollection postValues = new NameValueCollection(); //webClient.Encoding = Encoding.UTF8; //postValues.Add("", result.SendStr); //byte[] responseArray = webClient.UploadValues(_Url, postValues); //result.ReturnStr = Encoding.UTF8.GetString(responseArray); #endregion MtResponse info = WX.CRM.Common.Utility.XMLToObject(result.ReturnStr); if (info != null) { result.submitStatus = info.result == "0" ? SMS.InterfaceModel.SubmitStatus.success : SMS.InterfaceModel.SubmitStatus.fail; } else { throw new Exception("反序列化异常,返回值:" + result.ReturnStr); } } catch (Exception ex) { result.submitStatus = SMS.InterfaceModel.SubmitStatus.fail; WX.CRM.Common.LogHelper.Error("QiXinTong.sendPkg:" + ex.Message); } return result; } /// /// 发送消息 /// /// /// /// public string Request(string url, byte[] parameters) { try { var request = WebRequest.Create(url) as HttpWebRequest; request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; //需要POST数据 BinaryWriter bw = new BinaryWriter(request.GetRequestStream()); bw.Write(parameters); var response = request.GetResponse(); var v = response.GetResponseStream(); StreamReader reader = new StreamReader(v); return reader.ReadToEnd(); } catch { throw; } } #endregion } public class MtPacket { public string cpid { get; set; } public int mid { get; set; } public string cpmid { get; set; } public string mobile { get; set; } public string port { get; set; } public string msg { get; set; } public string signature { get; set; } public string timestamp { get; set; } public string validtime { get; set; } public string reserve { get; set; } } }