コード例 #1
0
        public ActionResult LiqPayCallback()
        {
            LiqPayHelper liqPayHelper = new LiqPayHelper(ConfigurationManager.AppSettings["LiqPayPrivateKey"], ConfigurationManager.AppSettings["LiqPayPublicKey"]);

            // --- Перетворюю відповідь LiqPay в Dictionary<string, string> для зручності:
            var request_dictionary = Request.Form.AllKeys.ToDictionary(key => key, key => Request.Form[key]);

            // --- Розшифровую параметр data відповіді LiqPay та перетворюю в Dictionary<string, string> для зручності:
            byte[] request_data            = Convert.FromBase64String(request_dictionary["data"]);
            string decodedString           = Encoding.UTF8.GetString(request_data);
            var    request_data_dictionary = JsonConvert.DeserializeObject <Dictionary <string, string> >(decodedString);

            // --- Отримую сигнатуру для перевірки
            var mySignature = liqPayHelper.GetLiqPaySignature(request_dictionary["data"]);

            // --- Якщо сигнатура серевера не співпадає з сигнатурою відповіді LiqPay - щось пішло не так
            if (mySignature != request_dictionary["signature"])
            {
                return(View("PurchaseError"));
            }
            //return new HttpStatusCodeResult(HttpStatusCode.BadRequest);

            string order_id = request_data_dictionary["order_id"];
            Order  order    = orderRepository.FindBy(x => x.TestIdForLiqpay == order_id).FirstOrDefault();

            if (order == null)
            {
                return(View("PurchaseError"));
            }
            //new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            // --- Якщо статус відповіді "Тест" або "Успіх" - все добре
            if (request_data_dictionary["status"] == "sandbox" || request_data_dictionary["status"] == "success")
            {
                // Тут можна оновити статус замовлення та зробити всі необхідні речі. Id замовлення можна взяти тут: request_data_dictionary[order_id]
                foreach (var item in order.OrderItems)
                {
                    item.Ticket.StatusId = 1;
                }
                order.OrderStatusId = 1;
                order.PurchaseDate  = DateTime.Now;
                orderRepository.AddOrUpdate(order);
                orderRepository.Save();

                return(View("PurchaseSuccess", order));
            }

            // delete tickets
            foreach (var item in order.OrderItems)
            {
                if (item.Ticket != null)
                {
                    ticketRepository.Delete(item.Ticket);
                }
            }
            ticketRepository.Save();
            TicketHub.NotifyToAllClients();

            return(View("PurchaseError"));
        }
コード例 #2
0
        public IActionResult LiqPayResult()
        {
            var requestDictionary = Request.Form.Keys.ToDictionary(key => key, key => Request.Form[key]);

            var requestData           = Convert.FromBase64String(requestDictionary["data"]);
            var decodedString         = Encoding.UTF8.GetString(requestData);
            var requestDataDictionary = JsonConvert.DeserializeObject <Dictionary <string, string> >(decodedString);
            var mySignature           = LiqPayHelper.GetLiqPaySignature(requestDictionary["data"]);

            if (!mySignature.Equals(requestDictionary["signature"]))
            {
                return(RedirectToAction("Completed", new { success = false, result = "ERROR" }));
            }

            var orderId       = requestDataDictionary["order_id"];
            var transactionId = requestDataDictionary["transaction_id"];

            return(RedirectToAction("Completed", new { success = true, result = "Success", orderId, transactionId }));
        }
コード例 #3
0
        public async Task <ActionResult> Post(string donationId, int?projectId, [FromForm] string data, [FromForm] string signature)
        {
            if (string.IsNullOrEmpty(data))
            {
                throw new ArgumentException($"{nameof(data)} can not be null");
            }
            if (string.IsNullOrEmpty(signature))
            {
                throw new ArgumentException($"{nameof(signature)} can not be null");
            }

            string mySignature = LiqPayHelper.GetLiqPaySignature(data);

            if (mySignature != signature)
            {
                throw new Exception($"Error, while checking LiqPay response signature, the {nameof(signature)} was not authenticated ");
            }

            await _donationService.AddDonation(projectId, donationId, data, signature);

            return(Ok());
        }
コード例 #4
0
        public ActionResult Pay()
        {
            var request_dictionary = Request.Form.AllKeys.ToDictionary(key => key, key => Request.Form[key]);

            byte[] request_data            = Convert.FromBase64String(request_dictionary["data"]);
            string decodedString           = Encoding.UTF8.GetString(request_data);
            var    request_data_dictionary = JsonConvert.DeserializeObject <Dictionary <string, string> >(decodedString);
            var    mySignature             = LiqPayHelper.GetLiqPaySignature(request_dictionary["data"]);

            if (mySignature != request_dictionary["signature"])
            {
                return(RedirectToAction("UserPage", "Account", new { Message = ManageMessageId.Error }));
            }


            if (request_data_dictionary["status"] == "sandbox" || request_data_dictionary["status"] == "success")
            {
                var account = _accountService.GetUserAccount(User.Identity.GetUserId());
                _accountService.AddToBalance(account.Id.ToString(), double.Parse(request_data_dictionary["amount"]));
                return(RedirectToAction("UserPage", "Account", new { Message = ManageMessageId.PaymentSuccess }));
            }

            return(RedirectToAction("UserPage", "Account", new { Message = ManageMessageId.Error }));
        }
コード例 #5
0
        public async Task <ActionResult> AppointmentResult()
        {
            var request_dictionary = Request.Form.AllKeys.ToDictionary(key => key, key => Request.Form[key]);

            // --- Розшифровую параметр data відповіді LiqPay та перетворюю в Dictionary<string, string> для зручності:
            byte[] request_data            = Convert.FromBase64String(request_dictionary["data"]);
            string decodedString           = Encoding.UTF8.GetString(request_data);
            var    request_data_dictionary = JsonConvert.DeserializeObject <Dictionary <string, string> >(decodedString);

            // --- Отримую сигнатуру для перевірки
            var mySignature = LiqPayHelper.GetLiqPaySignature(request_dictionary["data"]);

            // --- Якщо сигнатура серевера не співпадає з сигнатурою відповіді LiqPay - щось пішло не так
            if (mySignature != request_dictionary["signature"])
            {
                return(View("~/Views/Shared/_Error.cshtml"));
            }

            // --- Якщо статус відповіді "Тест" або "Успіх" - все добре
            if (request_data_dictionary["status"] == "sandbox" || request_data_dictionary["status"] == "success")
            {
                Payment payment = db.Payments.Find(request_data_dictionary["order_id"]);
                Record  record  = db.Records.Find(payment.RecordId);
                payment.status   = request_data_dictionary["status"];
                record.PatientId = payment.PatientId;
                db.SaveChanges();
                // настройка логина, пароля отправителя
                var from = "*****@*****.**";
                var pass = "******";

                // создаем письмо: message.Destination - адрес получателя
                var emailMessage = new MimeMessage()
                {
                    Subject = "eLife підтвердження запису",
                    Body    = new TextPart(MimeKit.Text.TextFormat.Html)
                    {
                        Text = "<h2> " + record.Patient.Name + " , ви успішно записались на прийом" + " </h2> <br>"
                               + "Лікар:" + record.AttendingDoctor.Name + " <br>" +
                               " Клініка:" + record.AttendingDoctor.DoctorInform.Clinic.Name + " < br > " +
                               " Дата та час:" + record.Date + " < br > " +
                               " Вид прийому:" + record.TypeOfService.Name + " < br > "
                    }
                };
                emailMessage.From.Add(new MailboxAddress("Администрация сайта", from));
                emailMessage.To.Add(new MailboxAddress("", record.Patient.Email));

                // адрес и порт smtp-сервера, с которого мы и будем отправлять письмо
                using (var client = new SmtpClient())
                {
                    await client.ConnectAsync("smtp.gmail.com", 465);

                    await client.AuthenticateAsync(from, pass);

                    await client.SendAsync(emailMessage);

                    await client.DisconnectAsync(true);
                }
                ViewBag.Type = record.TypeOfService.Name;
                return(View(record));
            }
            return(View("~/Views/Shared/_Error.cshtml"));
        }