Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }