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")); }
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 })); }
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()); }
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 })); }
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")); }