public abstract class ULPayBase<T> where T:class,new()
{
public ULPayBase()
{
INFO = new ULPayInfo();
}
public ULPayInfo INFO { get; set; }
public T BODY { get; set; }
public string GetXml()
{
string xmlStr= KLB.Common.Serializer.ConvertToString(this).Replace("utf-16", "UTF-8");
return xmlStr;
}
public byte[] GZipComparess(byte[] byteData)
{
MemoryStream ms = new MemoryStream();
GZipStream cprsStream = new GZipStream(ms, CompressionMode.Compress, true);
cprsStream.Write(byteData, 0, byteData.Length);
cprsStream.Close();
return ms.ToArray();
}
public byte[] GZipUnComparess(byte[] byteData)
{
MemoryStream ms = new MemoryStream(byteData);
GZipStream compressedzipStream = new GZipStream(ms, CompressionMode.Decompress);
MemoryStream outBuffer = new MemoryStream();
byte[] block = new byte[1024];
while (true)
{
int bytesRead = compressedzipStream.Read(block, 0, block.Length);
if (bytesRead <= 0)
break;
else
outBuffer.Write(block, 0, bytesRead);
}
compressedzipStream.Close();
return outBuffer.ToArray();
}
public TReply Exec<TReply>() where TReply : class, new()
{
var result= default(TReply);
try
{
HttpWebRequest request = WebRequest.Create(Constants.SinglePay_URI) as HttpWebRequest;
request.Method = "POST";
request.Accept = "*/*";
request.ContentType = "application/xmlstream";
string xml = GetXml();
byte[] byteData = Encoding.UTF8.GetBytes(xml);
byte[] gipCmpsData = GZipComparess(byteData);
byte[] base64Byte = Encoding.UTF8.GetBytes(Convert.ToBase64String(gipCmpsData));
using (Stream postStream = request.GetRequestStream())
{
postStream.Write(base64Byte, 0, base64Byte.Length);
}
string responseStr = string.Empty;
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
responseStr = reader.ReadToEnd();
}
string r1 = System.Text.Encoding.Default.GetString(GZipUnComparess(Convert.FromBase64String(responseStr)));
using (StringReader reader = new StringReader(r1))
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(TReply));
result = xmlSerializer.Deserialize(reader) as TReply;
}
}
catch(Exception ex)
{
throw ex;
}
return result;
}
}
[Serializable]
public sealed class ULPayInfo
{
public ULPayInfo():this(string.Empty,string.Empty)
{ }
public ULPayInfo(string trx_Code,string req_SN)
{
VERSION = "01";
DATA_TYPE = 0;
LEVEL = 0;
REQ_SN = req_SN;
USER_NAME = Constants.USER_NAME;
USER_PASS = Constants.USER_PASS;
}
public string TRX_CODE { get; set; }
public string VERSION;
public int DATA_TYPE;
public int LEVEL;
public string USER_NAME ;
public string USER_PASS;
public string REQ_SN;
public string SIGNED_MSG { get; set; }
}