public IActionResult IPNHandler() { byte[] parameters; using (var stream = new MemoryStream()) { this.Request.Body.CopyTo(stream); parameters = stream.ToArray(); } var strRequest = Encoding.ASCII.GetString(parameters); var processor = _paymentPluginManager.LoadPluginBySystemName("Payments.Paytm") as PaytmPaymentProcessor; if (processor == null || !_paymentPluginManager.IsPluginActive(processor) || !processor.PluginDescriptor.Installed) { throw new NopException("Paytm Standard module cannot be loaded"); } if (processor.VerifyIpn(strRequest, out Dictionary <string, string> values)) { #region values var mc_gross = decimal.Zero; try { mc_gross = decimal.Parse(values["mc_gross"], new CultureInfo("en-US")); } catch { } values.TryGetValue("payer_status", out string payer_status); values.TryGetValue("payment_status", out string payment_status); values.TryGetValue("pending_reason", out string pending_reason); values.TryGetValue("mc_currency", out string mc_currency); values.TryGetValue("txn_id", out string txn_id); values.TryGetValue("txn_type", out string txn_type); values.TryGetValue("rp_invoice_id", out string rp_invoice_id); values.TryGetValue("payment_type", out string payment_type); values.TryGetValue("payer_id", out string payer_id); values.TryGetValue("receiver_id", out string receiver_id); values.TryGetValue("invoice", out string _); values.TryGetValue("payment_fee", out string payment_fee); #endregion var sb = new StringBuilder(); sb.AppendLine("Paytm IPN:"); foreach (var kvp in values) { sb.AppendLine(kvp.Key + ": " + kvp.Value); } var newPaymentStatus = PaytmHelper.GetPaymentStatus(payment_status, pending_reason); sb.AppendLine("New payment status: " + newPaymentStatus); switch (txn_type) { case "recurring_payment_profile_created": //do nothing here break; #region Recurring payment case "recurring_payment": { var orderNumberGuid = Guid.Empty; try { orderNumberGuid = new Guid(rp_invoice_id); } catch { } var initialOrder = _orderService.GetOrderByGuid(orderNumberGuid); if (initialOrder != null) { var recurringPayments = _orderService.SearchRecurringPayments(initialOrderId: initialOrder.Id); foreach (var rp in recurringPayments) { switch (newPaymentStatus) { case PaymentStatus.Authorized: case PaymentStatus.Paid: { var recurringPaymentHistory = _orderService.GetRecurringPaymentHistory(rp); if (!recurringPaymentHistory.Any()) { _orderService.InsertRecurringPaymentHistory(new RecurringPaymentHistory { RecurringPaymentId = rp.Id, OrderId = initialOrder.Id, CreatedOnUtc = DateTime.UtcNow }); } else { //next payments var processPaymentResult = new ProcessPaymentResult { NewPaymentStatus = newPaymentStatus }; if (newPaymentStatus == PaymentStatus.Authorized) { processPaymentResult.AuthorizationTransactionId = txn_id; } else { processPaymentResult.CaptureTransactionId = txn_id; } _orderProcessingService.ProcessNextRecurringPayment(rp, processPaymentResult); } } break; case PaymentStatus.Voided: //failed payment var failedPaymentResult = new ProcessPaymentResult { Errors = new[] { $"Paytm IPN. Recurring payment is {payment_status} ." }, RecurringPaymentFailed = true }; _orderProcessingService.ProcessNextRecurringPayment(rp, failedPaymentResult); break; } } //this.OrderService.InsertOrderNote(newOrder.OrderId, sb.ToString(), DateTime.UtcNow); _logger.Information("Paytm IPN. Recurring info", new NopException(sb.ToString())); } else { _logger.Error("Paytm IPN. Order is not found", new NopException(sb.ToString())); } } break; case "recurring_payment_failed": if (Guid.TryParse(rp_invoice_id, out Guid orderGuid)) { var initialOrder = _orderService.GetOrderByGuid(orderGuid); if (initialOrder != null) { var recurringPayment = _orderService.SearchRecurringPayments(initialOrderId: initialOrder.Id).FirstOrDefault(); //failed payment if (recurringPayment != null) { _orderProcessingService.ProcessNextRecurringPayment(recurringPayment, new ProcessPaymentResult { Errors = new[] { txn_type }, RecurringPaymentFailed = true }); } } } break; #endregion default: #region Standard payment { values.TryGetValue("custom", out string orderNumber); var orderNumberGuid = Guid.Empty; try { orderNumberGuid = new Guid(orderNumber); } catch { } var order = _orderService.GetOrderByGuid(orderNumberGuid); if (order != null) { //order note //order.OrderNotes.Add(new OrderNote //{ // Note = sb.ToString(), // DisplayToCustomer = false, // CreatedOnUtc = DateTime.UtcNow //}); //_orderService.UpdateOrder(order); _orderService.InsertOrderNote(new OrderNote { OrderId = order.Id, Note = sb.ToString(), DisplayToCustomer = false, CreatedOnUtc = DateTime.UtcNow }); switch (newPaymentStatus) { case PaymentStatus.Pending: { } break; case PaymentStatus.Authorized: { //validate order total if (Math.Round(mc_gross, 2).Equals(Math.Round(order.OrderTotal, 2))) { //valid if (_orderProcessingService.CanMarkOrderAsAuthorized(order)) { _orderProcessingService.MarkAsAuthorized(order); } } else { //not valid var errorStr = $"Paytm IPN. Returned order total {mc_gross} doesn't equal order total {order.OrderTotal}. Order# {order.Id}."; //log _logger.Error(errorStr); //order note //order.OrderNotes.Add(new OrderNote //{ // Note = errorStr, // DisplayToCustomer = false, // CreatedOnUtc = DateTime.UtcNow //}); //_orderService.UpdateOrder(order); _orderService.InsertOrderNote(new OrderNote { OrderId = order.Id, Note = sb.ToString(), DisplayToCustomer = false, CreatedOnUtc = DateTime.UtcNow }); } } break; case PaymentStatus.Paid: { //validate order total if (Math.Round(mc_gross, 2).Equals(Math.Round(order.OrderTotal, 2))) { //valid if (_orderProcessingService.CanMarkOrderAsPaid(order)) { order.AuthorizationTransactionId = txn_id; _orderService.UpdateOrder(order); _orderProcessingService.MarkOrderAsPaid(order); } } else { //not valid var errorStr = $"Paytm IPN. Returned order total {mc_gross} doesn't equal order total {order.OrderTotal}. Order# {order.Id}."; //log _logger.Error(errorStr); //order note //order.OrderNotes.Add(new OrderNote //{ // Note = errorStr, // DisplayToCustomer = false, // CreatedOnUtc = DateTime.UtcNow //}); //_orderService.UpdateOrder(order); _orderService.InsertOrderNote(new OrderNote { OrderId = order.Id, Note = sb.ToString(), DisplayToCustomer = false, CreatedOnUtc = DateTime.UtcNow }); } } break; case PaymentStatus.Refunded: { var totalToRefund = Math.Abs(mc_gross); if (totalToRefund > 0 && Math.Round(totalToRefund, 2).Equals(Math.Round(order.OrderTotal, 2))) { //refund if (_orderProcessingService.CanRefundOffline(order)) { _orderProcessingService.RefundOffline(order); } } else { //partial refund if (_orderProcessingService.CanPartiallyRefundOffline(order, totalToRefund)) { _orderProcessingService.PartiallyRefundOffline(order, totalToRefund); } } } break; case PaymentStatus.Voided: { if (_orderProcessingService.CanVoidOffline(order)) { _orderProcessingService.VoidOffline(order); } } break; default: break; } } else { _logger.Error("Paytm IPN. Order is not found", new NopException(sb.ToString())); } } #endregion break; } } else { _logger.Error("Paytm IPN failed.", new NopException(strRequest)); } //nothing should be rendered to visitor return(Content("")); }
public async Task <IActionResult> IPNHandler() { await using var stream = new MemoryStream(); await Request.Body.CopyToAsync(stream); var strRequest = Encoding.ASCII.GetString(stream.ToArray()); if (await _paymentPluginManager.LoadPluginBySystemNameAsync("Payments.Paytm") is not PaytmPaymentProcessor processor || !_paymentPluginManager.IsPluginActive(processor)) { throw new NopException("Paytm module cannot be loaded"); } var(result, values) = await processor.VerifyIpnAsync(strRequest); if (!result) { await _logger.ErrorAsync("Paytm IPN failed.", new NopException(strRequest)); //nothing should be rendered to visitor return(Ok()); } var mcGross = decimal.Zero; try { mcGross = decimal.Parse(values["mc_gross"], new CultureInfo("en-US")); } catch { // ignored } values.TryGetValue("payment_status", out var paymentStatus); values.TryGetValue("pending_reason", out var pendingReason); values.TryGetValue("txn_id", out var txnId); values.TryGetValue("txn_type", out var txnType); values.TryGetValue("rp_invoice_id", out var rpInvoiceId); var sb = new StringBuilder(); sb.AppendLine("Paytm IPN:"); foreach (var kvp in values) { sb.AppendLine(kvp.Key + ": " + kvp.Value); } var newPaymentStatus = PaytmHelper.GetPaymentStatus(paymentStatus, pendingReason); sb.AppendLine("New payment status: " + newPaymentStatus); var ipnInfo = sb.ToString(); switch (txnType) { case "recurring_payment": await ProcessRecurringPaymentAsync(rpInvoiceId, newPaymentStatus, txnId, ipnInfo); break; case "recurring_payment_failed": if (Guid.TryParse(rpInvoiceId, out var orderGuid)) { var order = await _orderService.GetOrderByGuidAsync(orderGuid); if (order != null) { var recurringPayment = (await _orderService.SearchRecurringPaymentsAsync(initialOrderId: order.Id)) .FirstOrDefault(); //failed payment if (recurringPayment != null) { await _orderProcessingService.ProcessNextRecurringPaymentAsync(recurringPayment, new ProcessPaymentResult { Errors = new[] { txnType }, RecurringPaymentFailed = true }); } } } break; default: values.TryGetValue("custom", out var orderNumber); await ProcessPaymentAsync(orderNumber, ipnInfo, newPaymentStatus, mcGross, txnId); break; } //nothing should be rendered to visitor return(Ok()); }
public ActionResult Return() { var processor = _paymentPluginManager.LoadPluginBySystemName("Payments.Paytm") as PaytmPaymentProcessor; if (processor == null || !_paymentPluginManager.IsPluginActive(processor) || !processor.PluginDescriptor.Installed) { throw new NopException("Paytm module cannot be loaded"); } var myUtility = new PaytmHelper(); string orderId, amount, authDesc, resCode; bool checkSumMatch = false; //Assign following values to send it to verifychecksum function. if (String.IsNullOrWhiteSpace(_paytmPaymentSettings.MerchantKey)) { throw new NopException("Paytm key is not set"); } string workingKey = _paytmPaymentSettings.MerchantKey; string paytmChecksum = null; Dictionary <string, string> parameters = new Dictionary <string, string>(); if (Request.Form.Keys.Count > 0) { foreach (string key in Request.Form.Keys) { if (Request.Form[key].Contains("|")) { parameters.Add(key.Trim(), ""); } else { parameters.Add(key.Trim(), Request.Form[key]); } } if (parameters.ContainsKey("CHECKSUMHASH")) { paytmChecksum = parameters["CHECKSUMHASH"]; parameters.Remove("CHECKSUMHASH"); } if (!string.IsNullOrEmpty(paytmChecksum) && paytm.CheckSum.verifyCheckSum(workingKey, parameters, paytmChecksum)) { checkSumMatch = true; } } orderId = parameters["ORDERID"]; amount = parameters["TXNAMOUNT"]; resCode = parameters["RESPCODE"]; authDesc = parameters["STATUS"]; var order = _orderService.GetOrderById(Convert.ToInt32(orderId)); if (checkSumMatch == true) { if (resCode == "01" && authDesc == "TXN_SUCCESS") { if (TxnStatus(orderId, order.OrderTotal.ToString("0.00"))) { if (_orderProcessingService.CanMarkOrderAsPaid(order)) { _orderProcessingService.MarkOrderAsPaid(order); } return(RedirectToRoute("CheckoutCompleted", new { orderId = order.Id })); } else { return(Content("Amount Mismatch")); } } else if (authDesc == "TXN_FAILURE") { _orderProcessingService.CancelOrder(order, false); order.OrderStatus = OrderStatus.Cancelled; _orderService.UpdateOrder(order); return(RedirectToRoute("OrderDetails", new { orderId = order.Id })); } else { return(Content("Security Error. Illegal access detected")); } } else if (string.IsNullOrEmpty(paytmChecksum)) { return(Content("Please Contact Customer Care")); } else { return(Content("Security Error. Illegal access detected, Checksum failed")); } }
public IActionResult PDTHandler() { var tx = _webHelper.QueryString <string>("tx"); var processor = _paymentPluginManager.LoadPluginBySystemName("Payments.Paytm") as PaytmPaymentProcessor; if (processor == null || !_paymentPluginManager.IsPluginActive(processor) || !processor.PluginDescriptor.Installed) { throw new NopException("Paytm Standard module cannot be loaded"); } if (processor.GetPdtDetails(tx, out Dictionary <string, string> values, out string response)) { values.TryGetValue("custom", out string orderNumber); var orderNumberGuid = Guid.Empty; try { orderNumberGuid = new Guid(orderNumber); } catch { } var order = _orderService.GetOrderByGuid(orderNumberGuid); if (order != null) { var mc_gross = decimal.Zero; try { mc_gross = decimal.Parse(values["mc_gross"], new CultureInfo("en-US")); } catch (Exception exc) { _logger.Error("Paytm PDT. Error getting mc_gross", exc); } values.TryGetValue("payer_status", out string payer_status); values.TryGetValue("payment_status", out string payment_status); values.TryGetValue("pending_reason", out string pending_reason); values.TryGetValue("mc_currency", out string mc_currency); values.TryGetValue("txn_id", out string txn_id); values.TryGetValue("payment_type", out string payment_type); values.TryGetValue("payer_id", out string payer_id); values.TryGetValue("receiver_id", out string receiver_id); values.TryGetValue("invoice", out string invoice); values.TryGetValue("payment_fee", out string payment_fee); var sb = new StringBuilder(); sb.AppendLine("Paytm PDT:"); sb.AppendLine("mc_gross: " + mc_gross); sb.AppendLine("Payer status: " + payer_status); sb.AppendLine("Payment status: " + payment_status); sb.AppendLine("Pending reason: " + string.Empty); sb.AppendLine("mc_currency: " + mc_currency); sb.AppendLine("txn_id: " + txn_id); sb.AppendLine("payment_type: " + payment_type); sb.AppendLine("payer_id: " + payer_id); sb.AppendLine("receiver_id: " + receiver_id); sb.AppendLine("invoice: " + invoice); sb.AppendLine("payment_fee: " + payment_fee); var newPaymentStatus = PaytmHelper.GetPaymentStatus(payment_status, string.Empty); sb.AppendLine("New payment status: " + newPaymentStatus); //order note _orderService.InsertOrderNote(new OrderNote { OrderId = order.Id, Note = sb.ToString(), DisplayToCustomer = false, CreatedOnUtc = DateTime.UtcNow }); //order.OrderNotes.Add(new OrderNote //{ // Note = sb.ToString(), // DisplayToCustomer = false, // CreatedOnUtc = DateTime.UtcNow //}); //_orderService.UpdateOrder(order); //validate order total var orderTotalSentToPaytm = _genericAttributeService.GetAttribute <decimal?>(order, PaytmHelper.OrderTotalSentToPaytm); if (orderTotalSentToPaytm.HasValue && mc_gross != orderTotalSentToPaytm.Value) { var errorStr = $"Paytm PDT. Returned order total {mc_gross} doesn't equal order total {order.OrderTotal}. Order# {order.Id}."; //log _logger.Error(errorStr); //order note //order.OrderNotes.Add(new OrderNote //{ // Note = errorStr, // DisplayToCustomer = false, // CreatedOnUtc = DateTime.UtcNow //}); //_orderService.UpdateOrder(order); _orderService.InsertOrderNote(new OrderNote { OrderId = order.Id, Note = sb.ToString(), DisplayToCustomer = false, CreatedOnUtc = DateTime.UtcNow }); return(RedirectToAction("Index", "Home", new { area = "" })); } //clear attribute if (orderTotalSentToPaytm.HasValue) { _genericAttributeService.SaveAttribute <decimal?>(order, PaytmHelper.OrderTotalSentToPaytm, null); } //mark order as paid if (newPaymentStatus == PaymentStatus.Paid) { if (_orderProcessingService.CanMarkOrderAsPaid(order)) { order.AuthorizationTransactionId = txn_id; _orderService.UpdateOrder(order); _orderProcessingService.MarkOrderAsPaid(order); } } } return(RedirectToRoute("CheckoutCompleted", new { orderId = order.Id })); } else { var orderNumber = string.Empty; values.TryGetValue("custom", out orderNumber); var orderNumberGuid = Guid.Empty; try { orderNumberGuid = new Guid(orderNumber); } catch { } var order = _orderService.GetOrderByGuid(orderNumberGuid); if (order != null) { //order note //order.OrderNotes.Add(new OrderNote //{ // Note = "Paytm PDT failed. " + response, // DisplayToCustomer = false, // CreatedOnUtc = DateTime.UtcNow //}); //_orderService.UpdateOrder(order); _orderService.InsertOrderNote(new OrderNote { OrderId = order.Id, Note = "Paytm PDT failed. " + response, DisplayToCustomer = false, CreatedOnUtc = DateTime.UtcNow }); } return(RedirectToAction("Index", "Home", new { area = "" })); } }
public ActionResult ReturnOLD(FormCollection form) { var processor = _paymentService.LoadPaymentMethodBySystemName("Payments.Paytm") as PaytmPaymentProcessor; if (processor == null || !processor.IsPaymentMethodActive(_paymentSettings) || !processor.PluginDescriptor.Installed) { throw new NopException("Paytm module cannot be loaded"); } var myUtility = new PaytmHelper(); string orderId, Amount, AuthDesc, ResCode; bool checkSumMatch = false; //Assign following values to send it to verifychecksum function. if (String.IsNullOrWhiteSpace(_PaytmPaymentSettings.MerchantKey)) { throw new NopException("Paytm key is not set"); } string workingKey = _PaytmPaymentSettings.MerchantKey; Dictionary <string, string> parameters = new Dictionary <string, string>(); if (Request.Form.AllKeys.Length > 0) { string paytmChecksum = ""; foreach (string key in Request.Form.Keys) { parameters.Add(key.Trim(), Request.Form[key].Trim()); } if (parameters.ContainsKey("CHECKSUMHASH")) { paytmChecksum = parameters["CHECKSUMHASH"]; parameters.Remove("CHECKSUMHASH"); } if (CheckSum.verifyCheckSum(workingKey, parameters, paytmChecksum)) { checkSumMatch = true; } } orderId = parameters["ORDERID"]; Amount = parameters["TXNAMOUNT"]; ResCode = parameters["RESPCODE"]; AuthDesc = parameters["STATUS"]; if (checkSumMatch == true) { if (ResCode == "01" && AuthDesc == "TXN_SUCCESS") { var order = _orderService.GetOrderById(Convert.ToInt32(orderId)); if (_orderProcessingService.CanMarkOrderAsPaid(order)) { _orderProcessingService.MarkOrderAsPaid(order); } return(RedirectToRoute("CheckoutCompleted", new { orderId = order.Id })); } else if (AuthDesc == "TXN_FAILURE") { return(RedirectToRoute("ShoppingCart")); } else { return(Content("Security Error. Illegal access detected")); } } else { return(Content("Security Error. Illegal access detected, Checksum failed")); } }
public ActionResult Return(FormCollection form) { var processor = _paymentService.LoadPaymentMethodBySystemName("Payments.Paytm") as PaytmPaymentProcessor; if (processor == null || !processor.IsPaymentMethodActive(_paymentSettings) || !processor.PluginDescriptor.Installed) { throw new NopException("Paytm module cannot be loaded"); } var myUtility = new PaytmHelper(); string orderId, Amount, AuthDesc, ResCode; bool checkSumMatch = false; //Assign following values to send it to verifychecksum function. if (String.IsNullOrWhiteSpace(_PaytmPaymentSettings.MerchantKey)) { throw new NopException("Paytm key is not set"); } string workingKey = _PaytmPaymentSettings.MerchantKey; Dictionary <string, string> parameters = new Dictionary <string, string>(); if (Request.Form.AllKeys.Length > 0) { string paytmChecksum = ""; foreach (string key in Request.Form.Keys) { parameters.Add(key.Trim(), Request.Form[key].Trim()); } if (parameters.ContainsKey("CHECKSUMHASH")) { paytmChecksum = parameters["CHECKSUMHASH"]; parameters.Remove("CHECKSUMHASH"); } if (CheckSum.verifyCheckSum(workingKey, parameters, paytmChecksum)) { checkSumMatch = true; } } orderId = parameters["ORDERID"]; Amount = parameters["TXNAMOUNT"]; ResCode = parameters["RESPCODE"]; AuthDesc = parameters["STATUS"]; if (checkSumMatch == true) { var order = _orderService.GetOrderById(Convert.ToInt32(orderId)); if (ResCode == "01" && AuthDesc == "TXN_SUCCESS") { if (_orderProcessingService.CanMarkOrderAsPaid(order)) { _orderProcessingService.MarkOrderAsPaid(order); } return(RedirectToRoute("CheckoutCompleted", new { orderId = order.Id })); } else if (AuthDesc == "TXN_FAILURE") { var p = new PayModel(); p.RespMsg = parameters["RESPMSG"].ToString(); return(View("~/Plugins/Payments.Paytm/Views/PaymentPaytm/Pay.cshtml", p)); //Response.Write("<script> $(document).ready(function(){ $(\"#submitButton\").on(\"click\",function() {alert('"+parameters["RESPMSG"].ToString()+"');});});<script>"); //alert('@TempData["alertMessage"]'); //return Response.Write(parameters["RESPMSG"].ToString() + "< /br>" + "<a href=\"/Home/Index\">Click here to continue..</a>"); //return red //return RedirectToRoute("ShoppingCart"); //return Content(parameters["RESPMSG"].ToString() + " < /br>" + "Html.ActionLink(\"Click here to continue..\",\"Index\", \"Home\")"); //return RedirectToAction("Index", "Home", new { area = "" }); } else { return(Content("Security Error. Illegal access detected")); } } else { return(Content("Security Error. Illegal access detected, Checksum failed")); } }
public ActionResult Return(FormCollection form) { var processor = _paymentService.LoadPaymentMethodBySystemName("Payments.Paytm") as PaytmPaymentProcessor; if (processor == null || !processor.IsPaymentMethodActive(_paymentSettings) || !processor.PluginDescriptor.Installed) throw new NopException("Paytm module cannot be loaded"); var myUtility = new PaytmHelper(); string orderId, Amount, AuthDesc, ResCode; bool checkSumMatch = false; //Assign following values to send it to verifychecksum function. if (String.IsNullOrWhiteSpace(_PaytmPaymentSettings.MerchantKey)) throw new NopException("Paytm key is not set"); string workingKey = _PaytmPaymentSettings.MerchantKey; Dictionary<string, string> parameters = new Dictionary<string, string>(); if (Request.Form.AllKeys.Length > 0) { string paytmChecksum=""; foreach (string key in Request.Form.Keys){ parameters.Add(key.Trim(), Request.Form[key].Trim()); } if(parameters.ContainsKey("CHECKSUMHASH")){ paytmChecksum = parameters["CHECKSUMHASH"]; parameters.Remove("CHECKSUMHASH"); } if (CheckSum.verifyCheckSum(workingKey, parameters, paytmChecksum)) { checkSumMatch = true; } } orderId = parameters["ORDERID"]; Amount = parameters["TXNAMOUNT"]; ResCode = parameters["RESPCODE"]; AuthDesc = parameters["STATUS"]; if (checkSumMatch == true) { var order = _orderService.GetOrderById(Convert.ToInt32(orderId)); if (ResCode == "01" && AuthDesc == "TXN_SUCCESS") { if (_orderProcessingService.CanMarkOrderAsPaid(order)) { _orderProcessingService.MarkOrderAsPaid(order); } return RedirectToRoute("CheckoutCompleted", new { orderId = order.Id }); } else if (AuthDesc == "TXN_FAILURE") { var p = new PayModel(); p.RespMsg = parameters["RESPMSG"].ToString(); return View("~/Plugins/Payments.Paytm/Views/PaymentPaytm/Pay.cshtml", p); //Response.Write("<script> $(document).ready(function(){ $(\"#submitButton\").on(\"click\",function() {alert('"+parameters["RESPMSG"].ToString()+"');});});<script>"); //alert('@TempData["alertMessage"]'); //return Response.Write(parameters["RESPMSG"].ToString() + "< /br>" + "<a href=\"/Home/Index\">Click here to continue..</a>"); //return red //return RedirectToRoute("ShoppingCart"); //return Content(parameters["RESPMSG"].ToString() + " < /br>" + "Html.ActionLink(\"Click here to continue..\",\"Index\", \"Home\")"); //return RedirectToAction("Index", "Home", new { area = "" }); } else { return Content("Security Error. Illegal access detected"); } } else { return Content("Security Error. Illegal access detected, Checksum failed"); } }
public ActionResult ReturnOLD(FormCollection form) { var processor = _paymentService.LoadPaymentMethodBySystemName("Payments.Paytm") as PaytmPaymentProcessor; if (processor == null || !processor.IsPaymentMethodActive(_paymentSettings) || !processor.PluginDescriptor.Installed) throw new NopException("Paytm module cannot be loaded"); var myUtility = new PaytmHelper(); string orderId, Amount, AuthDesc, ResCode; bool checkSumMatch = false; //Assign following values to send it to verifychecksum function. if (String.IsNullOrWhiteSpace(_PaytmPaymentSettings.MerchantKey)) throw new NopException("Paytm key is not set"); string workingKey = _PaytmPaymentSettings.MerchantKey; Dictionary<string, string> parameters = new Dictionary<string, string>(); if (Request.Form.AllKeys.Length > 0) { string paytmChecksum=""; foreach (string key in Request.Form.Keys){ parameters.Add(key.Trim(), Request.Form[key].Trim()); } if(parameters.ContainsKey("CHECKSUMHASH")){ paytmChecksum = parameters["CHECKSUMHASH"]; parameters.Remove("CHECKSUMHASH"); } if (CheckSum.verifyCheckSum(workingKey, parameters, paytmChecksum)) { checkSumMatch = true; } } orderId = parameters["ORDERID"]; Amount = parameters["TXNAMOUNT"]; ResCode = parameters["RESPCODE"]; AuthDesc = parameters["STATUS"]; if (checkSumMatch == true) { if (ResCode == "01" && AuthDesc == "TXN_SUCCESS") { var order = _orderService.GetOrderById(Convert.ToInt32(orderId)); if (_orderProcessingService.CanMarkOrderAsPaid(order)) { _orderProcessingService.MarkOrderAsPaid(order); } return RedirectToRoute("CheckoutCompleted", new { orderId = order.Id }); } else if (AuthDesc == "TXN_FAILURE") { return RedirectToRoute("ShoppingCart"); } else { return Content("Security Error. Illegal access detected"); } } else { return Content("Security Error. Illegal access detected, Checksum failed"); } }
public async Task <IActionResult> PDTHandler() { var tx = _webHelper.QueryString <string>("tx"); if (await _paymentPluginManager.LoadPluginBySystemNameAsync("Payments.Paytm") is not PaytmPaymentProcessor processor || !_paymentPluginManager.IsPluginActive(processor)) { throw new NopException("Paytm module cannot be loaded"); } var(result, values, response) = await processor.GetPdtDetailsAsync(tx); if (result) { values.TryGetValue("custom", out var orderNumber); var orderNumberGuid = Guid.Empty; try { orderNumberGuid = new Guid(orderNumber); } catch { // ignored } var order = await _orderService.GetOrderByGuidAsync(orderNumberGuid); if (order == null) { return(RedirectToAction("Index", "Home", new { area = string.Empty })); } var mcGross = decimal.Zero; try { mcGross = decimal.Parse(values["mc_gross"], new CultureInfo("en-US")); } catch (Exception exc) { await _logger.ErrorAsync("Paytm PDT. Error getting mc_gross", exc); } values.TryGetValue("payer_status", out var payerStatus); values.TryGetValue("payment_status", out var paymentStatus); values.TryGetValue("pending_reason", out var pendingReason); values.TryGetValue("mc_currency", out var mcCurrency); values.TryGetValue("txn_id", out var txnId); values.TryGetValue("payment_type", out var paymentType); values.TryGetValue("payer_id", out var payerId); values.TryGetValue("receiver_id", out var receiverId); values.TryGetValue("invoice", out var invoice); values.TryGetValue("mc_fee", out var mcFee); var sb = new StringBuilder(); sb.AppendLine("Paytm PDT:"); sb.AppendLine("mc_gross: " + mcGross); sb.AppendLine("Payer status: " + payerStatus); sb.AppendLine("Payment status: " + paymentStatus); sb.AppendLine("Pending reason: " + pendingReason); sb.AppendLine("mc_currency: " + mcCurrency); sb.AppendLine("txn_id: " + txnId); sb.AppendLine("payment_type: " + paymentType); sb.AppendLine("payer_id: " + payerId); sb.AppendLine("receiver_id: " + receiverId); sb.AppendLine("invoice: " + invoice); sb.AppendLine("mc_fee: " + mcFee); var newPaymentStatus = PaytmHelper.GetPaymentStatus(paymentStatus, string.Empty); sb.AppendLine("New payment status: " + newPaymentStatus); //order note await _orderService.InsertOrderNoteAsync(new OrderNote { OrderId = order.Id, Note = sb.ToString(), DisplayToCustomer = false, CreatedOnUtc = DateTime.UtcNow }); //validate order total var orderTotalSentToPaytm = await _genericAttributeService.GetAttributeAsync <decimal?>(order, PaytmHelper.OrderTotalSentToPaytm); if (orderTotalSentToPaytm.HasValue && mcGross != orderTotalSentToPaytm.Value) { var errorStr = $"Paytm PDT. Returned order total {mcGross} doesn't equal order total {order.OrderTotal}. Order# {order.Id}."; //log await _logger.ErrorAsync(errorStr); //order note await _orderService.InsertOrderNoteAsync(new OrderNote { OrderId = order.Id, Note = errorStr, DisplayToCustomer = false, CreatedOnUtc = DateTime.UtcNow }); return(RedirectToAction("Index", "Home", new { area = string.Empty })); } //clear attribute if (orderTotalSentToPaytm.HasValue) { await _genericAttributeService.SaveAttributeAsync <decimal?>(order, PaytmHelper.OrderTotalSentToPaytm, null); } if (newPaymentStatus != PaymentStatus.Paid) { return(RedirectToRoute("CheckoutCompleted", new { orderId = order.Id })); } if (!_orderProcessingService.CanMarkOrderAsPaid(order)) { return(RedirectToRoute("CheckoutCompleted", new { orderId = order.Id })); } //mark order as paid order.AuthorizationTransactionId = txnId; await _orderService.UpdateOrderAsync(order); await _orderProcessingService.MarkOrderAsPaidAsync(order); return(RedirectToRoute("CheckoutCompleted", new { orderId = order.Id })); } else { if (!values.TryGetValue("custom", out var orderNumber)) { orderNumber = _webHelper.QueryString <string>("cm"); } var orderNumberGuid = Guid.Empty; try { orderNumberGuid = new Guid(orderNumber); } catch { // ignored } var order = await _orderService.GetOrderByGuidAsync(orderNumberGuid); if (order == null) { return(RedirectToAction("Index", "Home", new { area = string.Empty })); } //order note await _orderService.InsertOrderNoteAsync(new OrderNote { OrderId = order.Id, Note = "Paytm PDT failed. " + response, DisplayToCustomer = false, CreatedOnUtc = DateTime.UtcNow }); return(RedirectToRoute("CheckoutCompleted", new { orderId = order.Id })); } }