using System; using System.IO; using System.Text; using System.Net; using System.Threading; namespace BWP.ABCClient { public sealed class MockWebServer : IDisposable { private readonly HttpListener _listener; private readonly Thread _thread; private readonly Encoding _reqEncoding; private Encoding _respEncoding; private readonly bool _compressResp; public MockWebServer() : this("http://localhost:5000/", Encoding.UTF8, Encoding.UTF8, false) { } public MockWebServer(string prefix, Encoding reqEncoding, Encoding respEncoding, bool compressResp) { try { _listener = new HttpListener(); _listener.Prefixes.Add(prefix); _listener.Start(); Console.WriteLine("MockWebServer Listening... "); _thread = new Thread(Listen); _thread.Start(); } catch (Exception e) { Console.WriteLine(e); } _reqEncoding = reqEncoding; _respEncoding = respEncoding; _compressResp = compressResp; } private void Listen() { while (true) { HttpListenerContext context = _listener.GetContext(); HttpListenerRequest request = context.Request; string receivedData; using (var inputStream = request.InputStream) { using (var inputReader = new StreamReader(inputStream, _reqEncoding)) { receivedData = inputReader.ReadToEnd(); } } Console.WriteLine("ReceivedData:"); Console.WriteLine(receivedData); string responseStr = string.Empty; if (request.RawUrl.Contains("B2C")) { responseStr = "B2C1034520839804100000交易成功PayReq634333749713468745https://easyabc.95599.cn/b2c/NotCheckStatus/PaymentModeAct.ebf?TOKEN=12977496798933397376170940.8SHA1withRSAeAy2xu/VmFnkHEY5sAxwmV/NfbXUDRzLH3IJa7oXOMuGGHHkXfYlwFfe2HesKq6gQgfFcfIsNs0bEc8r6EDkzZVETuiVviQxahqnqr0+GRnfly5OwNELtFCbtJ5PdzuWjme6SbNPSTqMUN6bRWzgr/UXrkuo3uyJOIIyCFGsFbs="; _respEncoding = Encoding.GetEncoding("gb2312"); } if (request.RawUrl.Contains("B2B")) { responseStr = "B2B3371000000000660000交易成功FundTransfer.1634331972002042500https://easyabc.95599.cn/b2b/NotCheckStatus/PaymentModeAct.ebf?TOKEN=12975716546177309876SHA1withRSA977AkRZUxtHflGP4fyvfNFpcmjuD0goKvRWD+w5g/bx45ZiCkGIki3wDwtgSNBA+QDBs/cyYAsR6AxuIs9CC0obMeSMrMBbixKJgJkNKO0UPlIU4seJ5rSlYKT1HX7tNE1SI7/VEmsv9i0r110hQjkSjzFhVrv9jRlMhNxSopbg="; } if (request.RawUrl.Contains("Market")) { responseStr = "RSU11040600101Java_V1.0187.61.1.1MARKET00000000337199901033E01SHA1withRSAevJk/wQM5BjR72vHSCd1wgXSK8ZSRCVHbKv15faI1dY5kr4oz7ThBftaqcKqV7548QoDrMT0M3nITOffUU2CkLqb4TJcLAFZm+UVX2p/+1J2VPR0pBOnVLde8F6ADtnSV4IvqOCSkRi1Zoymr6UQ1gVw9p1Mh+TgOd6K85Zhitk="; } if (request.RawUrl.Contains("MarketOrderApply")) { responseStr = "Req110607008交易成功01Java_V1.0MARKET00250000337199901033E012011-06-07 11:13:18https://www.95599.cn/market/MarketOrderPay.ebf?token=13074163984216493171SHA1withRSAMI99KF8wCoZR9DDBVEZWPFPJqJJFHV4Eci7/LJKP46fmaK3N4y9nWXPhJ+STnAZ5xwvjpRrgZqzcwVEY4acI0EqaUfADvzVV5jIgXatFG8gO1UhL3YpfK7HJX5lXdBcSN72QNuJA1M9ZbaH6KDhs3V/fWYrlLfTrdHnfjKssxMY="; } if (_compressResp) { responseStr = MsgUtil.Compress(responseStr); } HttpListenerResponse response = context.Response; byte[] buffer = _respEncoding.GetBytes(responseStr); response.ContentLength64 = buffer.Length; using (Stream output = response.OutputStream) { output.Write(buffer, 0, buffer.Length); } } } public void Dispose() { _thread.Abort(); _listener.Stop(); } } }