public async Task<IActionResult> ResultATMPay(GetRequest getRequest) { log.InfoFormat("Begin VNPAY Return, URL={0}", Request.QueryString); if (Request.QueryString.Value.Length > 0 && getRequest.vnp_BankTranNo != null && getRequest.vnp_Amount.Length > 0 && getRequest.vnp_BankCode.Length > 0 && getRequest.vnp_CardType.Length > 0 && getRequest.vnp_OrderInfo.Length > 0 && getRequest.vnp_PayDate.Length > 0 && getRequest.vnp_ResponseCode.Length > 0 && getRequest.vnp_SecureHash.Length > 0 && getRequest.vnp_SecureHashType.Length > 0 && getRequest.vnp_TmnCode.Length > 0 && getRequest.vnp_TransactionNo.Length > 0 && getRequest.vnp_TxnRef.Length > 0) { string vnp_HashSecret = _vnpay.vnp_HashSecret; //Chuoi bi mat string vnpayData = Request.QueryString.ToString(); VnPayLibrary vnpay = new VnPayLibrary(); vnpay.AddResponseData("vnp_Amount", getRequest.vnp_Amount); vnpay.AddResponseData("vnp_BankCode", getRequest.vnp_BankCode); vnpay.AddResponseData("vnp_BankTranNo", getRequest.vnp_BankTranNo); vnpay.AddResponseData("vnp_CardType", getRequest.vnp_CardType); vnpay.AddResponseData("vnp_OrderInfo", getRequest.vnp_OrderInfo); vnpay.AddResponseData("vnp_PayDate", getRequest.vnp_PayDate); vnpay.AddResponseData("vnp_ResponseCode", getRequest.vnp_ResponseCode); vnpay.AddResponseData("vnp_SecureHash", getRequest.vnp_SecureHash); vnpay.AddResponseData("vnp_SecureHashType", getRequest.vnp_SecureHashType); vnpay.AddResponseData("vnp_TmnCode", getRequest.vnp_TmnCode); vnpay.AddResponseData("vnp_TransactionNo", getRequest.vnp_TransactionNo); vnpay.AddResponseData("vnp_TxnRef", getRequest.vnp_TxnRef); //vnp_TxnRef: Ma don hang merchant gui VNPAY tai command=pay long orderId = Convert.ToInt64(vnpay.GetResponseData("vnp_TxnRef")); //vnp_TransactionNo: Ma GD tai he thong VNPAY long vnpayTranId = Convert.ToInt64(vnpay.GetResponseData("vnp_TransactionNo")); //vnp_ResponseCode:Response code from VNPAY: 00: Thanh cong, Khac 00: Xem tai lieu string vnp_ResponseCode = vnpay.GetResponseData("vnp_ResponseCode"); //vnp_SecureHash: MD5 cua du lieu tra ve String vnp_SecureHash = getRequest.vnp_SecureHash; bool checkSignature = vnpay.ValidateSignature(vnp_SecureHash, vnp_HashSecret); EmptyCartRemove(); if (checkSignature) { if (vnp_ResponseCode == "00") { try { //Thanh toan thanh cong ViewBag.thongbao = "Thanh toán thành công"; var ma = vnpay.GetResponseData("vnp_OrderInfo"); var order = _unitOfWork.OrderRepository.Get(x => x.MaDonHang.Equals(ma)).FirstOrDefault(); order.Payment = true; order.ThanhToanTruoc = int.TryParse(vnpay.GetResponseData("vnp_Amount"), out int number) ? int.Parse(vnpay.GetResponseData("vnp_Amount")) / 100 : 0; _unitOfWork.OrderRepository.Update(order); _unitOfWork.SaveNotAync(); log.InfoFormat("Thanh toan thanh cong, OrderId={0}, VNPAY TranId={1}", orderId, vnpayTranId); await _mailer.SendEmailSync(order.Email, "[" + order.MaDonHang + "] Đơn đặt hàng từ website ShopAsp.Net", "<p>Thanh toán đơn hàng thành công, số hoá đơn:" + orderId + ". Cảm ơn quý khách đã mua hàng !</p>"); var model = new CheckOutCompleteViewModel() { OrderID = ma, Contact = _unitOfWork.ContactRepository.Get().FirstOrDefault() }; return View(model); } catch (Exception) { ViewBag.thongbao = "Có lỗi xảy ra trong quá trình xử lý.Mã lỗi: " + vnp_ResponseCode; log.InfoFormat("Thanh toan loi, OrderId={0}, VNPAY TranId={1},ResponseCode={2}", orderId, vnpayTranId, vnp_ResponseCode); } } else { //Thanh toan khong thanh cong. Ma loi: vnp_ResponseCode ViewBag.thongbao = "Có lỗi xảy ra trong quá trình xử lý.Mã lỗi: " + vnp_ResponseCode; log.InfoFormat("Thanh toan loi, OrderId={0}, VNPAY TranId={1},ResponseCode={2}", orderId, vnpayTranId, vnp_ResponseCode); } } else { log.InfoFormat("Invalid signature, InputData={0}", Request.QueryString); ViewBag.thongbao = "Có lỗi xảy ra trong quá trình xử lý"; } } else { //Thanh toan khong thanh cong. Ma loi: vnp_ResponseCode ViewBag.thongbao = "Lỗi, xin bạn vui lòng thử lại nha "; log.InfoFormat("Thanh toan loi"); } return View(); }