private async Task <Common.Bill> CreateInvoiceByBankTransfer(string u, IEnumerable <long> paymentErcIds) { var retVal = new Common.Bill(); retVal.Enabled = true; retVal.ModeId = (int)PaymentMode.BankTransfer; retVal.StatusId = (int)PaymentStatus.Created; var postData = new List <KeyValuePair <string, string> >(); postData.Add(new KeyValuePair <string, string>("orderlist", string.Join(',', paymentErcIds.ToArray()) + ",")); postData.Add(new KeyValuePair <string, string>("u", u)); postData.Add(new KeyValuePair <string, string>("p", "0")); using (var content = new FormUrlEncodedContent(postData)) { using (var response = await client.PostAsync(bankTransfer, content)) { if (response.StatusCode == HttpStatusCode.OK) { var page = await response.Content.ReadAsStringAsync(); var doc = new HtmlDocument(); doc.LoadHtml(page); var purposeOfPayment = doc.DocumentNode.SelectSingleNode("//div[@class=\"banktransferinfo_line\"]/span/textarea").InnerText; retVal.ErcId = Convert.ToInt64(purposeOfPayment.Split(';')[1]); retVal.CreateDate = DateTime.Now; var spans = doc.DocumentNode.SelectNodes("//div[@class=\"pay_conf_order_header\"]/span[@style=\"color:rgb(240, 80, 51);\"]"); int i = 0; foreach (var span in spans) { var payment = new Common.Payment(); payment.ErcId = paymentErcIds.ElementAt(i); payment.Commission = 0m; decimal commission; var style = NumberStyles.AllowDecimalPoint; var culture = CultureInfo.CreateSpecificCulture("en-US"); if (decimal.TryParse(span.InnerText.Replace(" грн.", string.Empty), style, culture, out commission)) { payment.Commission = commission; } retVal.Payments.Add(payment); i++; } //сохранить страницу на диске и открыть в браузере. using (var writer = File.CreateText(GetReportPath(PaymentMode.BankTransfer, retVal.ErcId))) { writer.Write(page); } } } } return(retVal); }
private async Task <List <Common.Bill> > GetBillsList(IEnumerable <Account> accounts) { List <Common.Bill> retVal = new List <Common.Bill>(); var billsJson = await client.GetStringAsync(billsUrl); IList <Bill> bills = new List <Bill>(); using (JsonTextReader reader = new JsonTextReader(new StringReader(billsJson))) { if (reader.Read()) { JsonSerializer serializer = new JsonSerializer(); bills = serializer.Deserialize <IList <Bill> >(reader); } } CultureInfo culture = new CultureInfo("ru-ru"); foreach (var bill in bills) { var item = new Common.Bill() { Enabled = false, ErcId = bill.IdBill, ModeId = bill.IdPayMode, Mode = new PayMode() { Id = bill.IdPayMode, Name = bill.PayModeName }, StatusId = bill.Status, Status = new PayStatus() { Id = bill.Status, Name = bill.StatusName }, CreateDate = DateTime.Now }; DateTime dt; // example DateTime format: "15.09.2020 16:04:46" if (DateTime.TryParse(bill.DtCreate, culture, DateTimeStyles.AllowWhiteSpaces, out dt)) { item.CreateDate = dt; } if (null != bill.OrderList) { foreach (var order in bill.OrderList) { var payment = new Payment() { AccountId = accounts.First(x => x.Number == order.CdFlat).Id, Enabled = false, ErcId = order.IdOrder, Comment = order.Comment, Commission = order.Commission, PaymentDate = DateTime.Now }; if (DateTime.TryParse(order.DtCreate, culture, DateTimeStyles.AllowWhiteSpaces, out dt)) { payment.PaymentDate = dt; } item.Payments.Add(payment); } } retVal.Add(item); } return(retVal); }
public async Task <Common.Bill> CreateInvoice(PaymentMode mode, IEnumerable <long> paymentErcIds) { Common.Bill retVal = null; try { if (!await Login2Site()) { return(null); } JsonSerializer serializer = new JsonSerializer(); StringBuilder sBuilder = new StringBuilder(); using (StringWriter sWriter = new StringWriter(sBuilder)) { using (JsonTextWriter jtWriter = new JsonTextWriter(sWriter)) { serializer.Serialize(jtWriter, paymentErcIds.Select(x => x.ToString())); } } var postData = new List <KeyValuePair <string, string> >(); postData.Add(new KeyValuePair <string, string>("sorder", sBuilder.ToString())); string url = null; using (var content = new FormUrlEncodedContent(postData)) { using (var response = await client.PostAsync(checkOutUrl, content)) { if (response.StatusCode == HttpStatusCode.OK) { var contentString = await response.Content.ReadAsStringAsync(); using (var reader = new JsonTextReader(new StringReader(contentString))) { while (reader.Read()) { if (reader.Value != null && Convert.ToString(reader.Value) == "url") { reader.Read(); url = Convert.ToString(reader.Value); } } } } } } string u = null; if (null != url) { using (var response = await client.GetAsync(url)) { if (response.StatusCode == HttpStatusCode.OK) { u = HttpUtility.ParseQueryString(url).Get("u"); } } } if (null != u) { switch (mode) { case PaymentMode.BankTransfer: retVal = await CreateInvoiceByBankTransfer(u, paymentErcIds); break; case PaymentMode.BankCard: throw new NotImplementedException(); default: throw new NotImplementedException(); } } } catch (Exception ex) { _logger.Error(ex.Message, ex); throw ex; } return(retVal); }