Gzip压缩报文

 

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; }
    }

 

posted @ 2017-05-04 13:30  wjl910  阅读(141)  评论(0)    收藏  举报