ComplianceServer/oldcode/CRMServices/PkgSms/InterfaceExec/QiXinTong.cs

162 lines
6.3 KiB
C#

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<MtPacket>(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<MtPacket>(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<SMS.InterfaceModel.MtResponse>(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;
}
/// <summary>
/// 发送消息
/// </summary>
/// <param name="url"> </param>
/// <param name="parameters"></param>
/// <param name="param"> </param>
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; }
}
}