public int ApiRefundPayment(long OprId = 0) { int Response = -1; if (TempData["TutorModel"] != null) { Operation op = PaymentDB.GetOprDetails(OprId, GetConfiguration().GetConnectionString(DEFAULT_CONNECTION)); if (op.Captured == 0 || op.Auto == 1 || op.PaymentMethodId != LkpDetails["Card"] || DateTime.Compare(DateTime.Now, op.CancelationDate) > 0) { return(0); } UserCache userCache = JsonConvert.DeserializeObject <UserCache>(TempData["TutorModel"].ToString()); string Learner = String.Concat(userCache.FirstName, userCache.LastName); object jsonParameters = new { reference = "REFUND-" + op.RelationId }; Console.WriteLine(op.ApiReference); var requestUrl = "https://api.sandbox.checkout.com/payments/" + op.ApiReference + "/refunds"; string responseString = ApiRequest(jsonParameters, requestUrl); dynamic jObj = (JObject)JsonConvert.DeserializeObject(responseString); if (jObj != null) { op.RespDate = DateTime.Now; op.RespDetails = responseString.Replace("\"", string.Empty); op.RespId = jObj.id; op.Auto = 0; op.Captured = 1; op.OprTypeId = LkpDetails["Refund"]; op.SerialId = Serials["RF"]; op.LinkedOprId = OprId; op.UID = userCache.UserId; op.ObjEntityId = 1;//Nabih get user Entity id Response = PaymentDB.CancelOperation(OprId, GetConfiguration().GetConnectionString(DEFAULT_CONNECTION)); Response = PaymentDB.SubmitOperation(op, GetConfiguration().GetConnectionString(DEFAULT_CONNECTION)); if (Response != 0) { op.LinkedOprId = Response; SendNotification(DateTime.Now, Learner, "Refund Pymt", op.Amount, op.Captured); //Operation 2 : Substract tutor Revenue decimal revenue = 1 - Convert.ToDecimal(Perc["TutorPercentage"]); SubtractTutorFees(op, op.TutorId, op.TutorName, revenue); //Operation 3 : Cancel Checkout Fees decimal fee = Convert.ToDecimal(Perc["CheckoutFees"]); decimal Per = Convert.ToDecimal(Perc["CheckoutPercentage"]); CancelFees(op, "Refund Checkout Fees", fee, Per, Serials["FC"]); } } } return(Response); }
public IActionResult Invoice(int OprId) { if (TempData["TutorModel"] != null) { UserCache userCache = JsonConvert.DeserializeObject <UserCache>(TempData["TutorModel"].ToString()); PaymentModel paymentModel = new PaymentModel { User = userCache.Extract(), operation = PaymentDB.GetOprDetails(OprId, GetConfiguration().GetConnectionString(DEFAULT_CONNECTION)) }; TempData.Keep("TutorModel"); return(PartialView(paymentModel)); } return(PartialView(new PaymentModel())); }
//Open Opr Details : Show Opr details and Refund if possible public IActionResult OprDetails(int OprId) { if (TempData["TutorModel"] != null) { UserCache userCache = JsonConvert.DeserializeObject <UserCache>(TempData["TutorModel"].ToString()); PaymentModel paymentModel = new PaymentModel { User = userCache.Extract(), operation = PaymentDB.GetOprDetails(OprId, GetConfiguration().GetConnectionString(DEFAULT_CONNECTION)) }; if (paymentModel.operation == null) { return(PartialView(new PaymentModel())); } Console.WriteLine(paymentModel.operation.Auto); Console.WriteLine(paymentModel.operation.PaymentMethodId); Console.WriteLine(DateTime.Compare(DateTime.Now, paymentModel.operation.CancelationDate) < 0); Console.WriteLine(paymentModel.operation.Captured); //if payment is not returned before && not auto payment && made by card && before cancelation Date -> THEN CAN BE REFUND if (paymentModel.operation.Canceled == 0 && paymentModel.operation.Auto == 0 && paymentModel.operation.PaymentMethodId == LkpDetails["Card"] && DateTime.Compare(DateTime.Now, paymentModel.operation.CancelationDate) < 0) { //refund if opr is captured if (paymentModel.operation.Captured == 1) { paymentModel.operation.Action = "RefundPayment"; paymentModel.operation.CanRefund = true; } //Void if opr is not captured yet else { paymentModel.operation.Action = "VoidPayment"; paymentModel.operation.CanVoid = true; } } else if (paymentModel.operation.Canceled == 1) { paymentModel.operation.Action = "Canceled"; } else { paymentModel.operation.Action = "NoAction"; } TempData.Keep("TutorModel"); return(PartialView(paymentModel)); } return(PartialView(new PaymentModel())); }
public int ApiVoidPayment(long OprId = 0) { int Response = -1; if (TempData["TutorModel"] != null) { Operation op = PaymentDB.GetOprDetails(OprId, GetConfiguration().GetConnectionString(DEFAULT_CONNECTION)); if (op.Captured == 0 || op.Auto == 1 || op.PaymentMethodId != LkpDetails["Card"]) { return(0); } UserCache userCache = JsonConvert.DeserializeObject <UserCache>(TempData["TutorModel"].ToString()); string Learner = String.Concat(userCache.FirstName, userCache.LastName); object jsonParameters = new { reference = "VOID-" + op.RelationId }; Console.WriteLine(op.ApiReference); var requestUrl = "https://api.sandbox.checkout.com/payments/" + op.ApiReference + "/captures"; string responseString = ApiRequest(jsonParameters, requestUrl); dynamic jObj = (JObject)JsonConvert.DeserializeObject(responseString); if (jObj != null) { op.RespDate = (DateTime)jObj.processed_on; op.RespDetails = responseString.Replace("\"", string.Empty); op.RespId = jObj.id; op.Auto = 0; op.Captured = 1; op.OprTypeId = LkpDetails["Void"]; op.SerialId = Serials["PB"]; op.LinkedOprId = OprId; op.UID = userCache.UserId; op.ObjEntityId = 1;//Nabih get user Entity id Response = PaymentDB.CancelOperation(OprId, GetConfiguration().GetConnectionString(DEFAULT_CONNECTION)); Response = PaymentDB.SubmitOperation(op, GetConfiguration().GetConnectionString(DEFAULT_CONNECTION)); if (Response != 0) { SendNotification(DateTime.Now, Learner, "Void Pymt", op.Amount, op.Captured); } } } return(Response); }