using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; using Newtonsoft.Json; using RestSharp; using WolfOfWallStreet.Extensions; using WolfOfWallStreet.Models; using WolfOfWallStreet.Models.MofidOnline; using WolfOfWallStreet.Models.OnlinePlus; using WolfOfWallStreet.Services.Contracts; namespace WolfOfWallStreet.Services { public class MofidOnlineService : IMofidOnlineService { public async Task SendOrder(MofidOnlineOrder draft) { RestClient client = new RestClient(); RestRequest request = new RestRequest(new Uri($"https://mofidonline.com/9/0/SiteCustomerHandler.ashx?lan=fa&.rand=2c70981681bb45138629b0f1b82be55d"), Method.POST); request.AddHeader("authority", "mofidonline.com"); request.AddHeader("method", "POST"); request.AddHeader("path", $"/9/0/SiteCustomerHandler.ashx?lan=fa&.rand={StringExtensions.GenerateGuid(32)}"); request.AddHeader("scheme", "https"); request.AddHeader("Accept", "*/*"); request.AddHeader("accept-encoding", "gzip, deflate, br"); request.AddHeader("accept-language", "en-US,en;q=0.9"); request.AddHeader("content-length", "170"); request.AddHeader("origin", "https://mofidonline.com"); request.AddHeader("referer", "https://mofidonline.com/Customer/AddOrder?cr=fbff775e469a4e4d8922e6cc0fe80215&lan=fa"); request.AddHeader("sec-fetch-dest", "empty"); request.AddHeader("sec-fetch-mode", "cors"); request.AddHeader("content-type", "application/x-www-form-urlencoded; charset=UTF-8"); request.AddHeader("sec-fetch-site", "same-origin"); request.AddHeader("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36 OPR/69.0.3686.95"); request.AddHeader("x-requested-with", "XMLHttpRequest"); foreach (var str in draft.Cookies.Split(' ')) { var value = str.Split('=').Last(); request.AddCookie(str.Split('=').First(), value.Substring(0, value.Length - 1)); } request.AddJsonBody(new MofidOnlineOrder { Mode = "buysell", SymbolId = draft.SymbolId, OrderPrice = draft.OrderPrice, OrderType = "76", OrderSide = "65", OrderValidity = "74", OrderValiditydate = "", OrderTotalQuantity = draft.OrderTotalQuantity, TriggerPrice = "", MinimumQuantity = "", MaxShown = "", BourseCode = "", isin = "", pk = "TBRFinancialDataProvider", OrderMode = "add", orderid = "0", OrderExpectedQuantity = "0", ts = null, cs = "", ss = null, SymbolNsc = draft.SymbolNsc, SendSMS = false, browserTime = DateTime.Now.ToString("T"), IsSymbolInAgreement = "false", AcceptedAgreement = false }); var rest = client.Execute(request, Method.POST); if (rest.StatusCode == HttpStatusCode.OK) { if (rest.Data != null) return rest.Data; else { var data = JsonConvert.DeserializeObject(rest.Content); data.GetDateTime = DateTime.Now; return data; } } return null; } public async Task GetSymbolOrderBase(Symbol symbol, long stockPrice) { RestClient client = new RestClient(); RestRequest request = new RestRequest(new Uri($"https://core.tadbirrlc.com//StockFutureInfoHandler.ashx?%7B%22Type%22:%22getSymbolFullInfo%22,%22la%22:%22fa%22,%22nscCode%22:%22{symbol.symbolISIN}%22%7D&"), Method.GET); request.AddHeader("authority", "core.tadbirrlc.com"); request.AddHeader("method", "POST"); request.AddHeader("path", $"//StockFutureInfoHandler.ashx"); request.AddHeader("scheme", "https"); request.AddHeader("Accept", "*/*"); request.AddHeader("accept-encoding", "gzip, deflate, br"); request.AddHeader("accept-language", "en-US,en;q=0.9"); request.AddHeader("content-length", "170"); request.AddHeader("origin", "https://mofidonline.com"); request.AddHeader("referer", " https://mofidonline.com/Customer/AddOrder?cr=fbff775e469a4e4d8922e6cc0fe80215&lan=fa"); request.AddHeader("sec-fetch-dest", "empty"); request.AddHeader("sec-fetch-mode", "cors"); request.AddHeader("content-type", "application/x-www-form-urlencoded; charset=UTF-8"); request.AddHeader("sec-fetch-site", "same-origin"); request.AddHeader("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36 OPR/69.0.3686.95"); request.AddHeader("x-requested-with", "XMLHttpRequest"); var rest = client.Execute(request, Method.GET); if (rest.StatusCode == HttpStatusCode.OK) { MofidOnlineSymbol data; if (rest.Data != null) data = rest.Data; else data = Newtonsoft.Json.JsonConvert.DeserializeObject(rest.Content); data.Quantity = (int)(stockPrice / data.ht)+2; return data; } return null; } } }