public IActionResult TopupQuery(long id) { var currentUser = _partnerManager.GetPartnerById(this.HttpContext.User.Identity.Name); var collection = new RechargeRepo(_db, _partnerManager).GetRechargeByApiTransaction(id, currentUser.Account); if (collection == null) { return(Ok(new { resultCode = 0, resultDesc = "OK", success = "no", status = "notFound", queryTime = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") })); } if (collection.Status == 0) { return(Ok(new { resultCode = 0, resultDesc = "OK", success = "no", status = "pending", queryTime = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") })); } if (collection.Status > 1) { return(Ok(new { resultCode = 0, resultDesc = "OK", success = "no", status = "failed", queryTime = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") })); } return(Ok(new { resultCode = 0, resultDesc = "OK", success = "yes", status = "done", data = new { subsNo = collection.SubsNo, amt = collection.Amount, seq = collection.ApiTransaction }, queryTime = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") })); }
public async Task <RechargeResponseDto> DoRecharge(GrappedRecharge recharge) { //Thread.Sleep(2000); #region Local test var result = new RechargeResponseDto(); var watch = System.Diagnostics.Stopwatch.StartNew(); BasicHttpBinding httpBinding = new BasicHttpBinding(); EndpointAddress p = new EndpointAddress(SharedParams.OCSEndpoint); //Start Send Request------------------------------ - var payService = new CBSService.CBSInterfaceAccountMgrClient(httpBinding, p); { /// payService = SharedParams.OCSEndpoint; CBSService.PaymentRequestMsg msg = new CBSService.PaymentRequestMsg(); CBSService.RequestHeader reqheader = new CBSService.RequestHeader(); reqheader.SessionEntity = new CBSService.SessionEntityType(); reqheader.SessionEntity.Name = SharedParams.OCSApiUser; reqheader.SessionEntity.Password = SharedParams.OCSApiPassword; reqheader.TransactionId = ""; reqheader.SequenceId = "1"; reqheader.CommandId = "Payment"; reqheader.Version = "1"; reqheader.SerialNo = ""; reqheader.RequestType = CBSService.RequestHeaderRequestType.Event; reqheader.SessionEntity.RemoteAddress = SharedParams.PaymentRemoteAddress; msg.RequestHeader = reqheader; msg.PaymentRequest = new CBSService.PaymentRequest(); msg.PaymentRequest.SubscriberNo = recharge.SubscriberNo; msg.PaymentRequest.PaymentAmt = Convert.ToInt64(recharge.Amount) * 100; msg.PaymentRequest.PaymentMode = "1000"; msg.PaymentRequest.TransactionCode = $"VTU{recharge.Id}"; msg.PaymentRequest.RefillProfileID = recharge.Amount.ToString(); try { var requestResult = await payService.PaymentAsync(msg); if (requestResult != null) { result.ResultCode = requestResult.PaymentResultMsg.ResultHeader.ResultCode; result.ResultDesc = requestResult.PaymentResultMsg.ResultHeader.ResultDesc; result.TransNo = requestResult.PaymentResultMsg.PaymentResult.InternalSerialNo; } else { result.ResultCode = "-1001"; result.ResultDesc = "OCS return null"; } } catch (Exception ex) { result.ResultCode = "-1000"; result.ResultDesc = ex.GetType().Name + "-" + ex.Message; } } //} // End Send Request ------------------------------- //await HTTPClientWrapper<RechargeResponseDto>.Get(""); watch.Stop(); double elapsedMs = watch.ElapsedMilliseconds; var collection = new RechargeCollection(); collection.Id = recharge.MasterId; collection.Status.Id = result.ResultCode == SharedParams.SuccessPaymentCode ? 1 : 2; collection.RefNo = result.ResultCode.ToString(); collection.RefMessage = result.ResultDesc; collection.RefTransNo = result.TransNo; collection.RefTime = DateTime.Now; collection.DebugInfo = result.ResultDesc + " OCS(" + elapsedMs + ")"; resultDisplayMsg = collection.DebugInfo; elapsedMs = 0; watch = System.Diagnostics.Stopwatch.StartNew(); var dbResult = new RechargeRepo(db, null).UpdateWithBalance(collection); watch.Stop(); elapsedMs = watch.ElapsedMilliseconds; resultDisplayMsg += " DB(" + elapsedMs + ")"; return(result); #endregion }
public async Task <IActionResult> Pay(TopupDto topup) { if (!Utility.ValidYMobileNo(topup.subsNo)) { return(BadRequest(new ApiResponse(-3000, "Sorry, the target mobile was wrong"))); } var currentUser = _partnerManager.GetPartnerById(this.HttpContext.User.Identity.Name); var recharge = new RechargeCollection(); recharge.SubscriberNo = topup.subsNo; recharge.Amount = topup.amt; recharge.PointOfSale = currentUser; recharge.QueueNo = 0; recharge.AccessChannel.Id = "api"; recharge.ApiTransaction = topup.seq; var result = new RechargeRepo(_db, _partnerManager).Create(recharge); if (!result.Success) { if (result.AffectedCount == -513) { return(Unauthorized(new ApiResponse(-3003, "Sorry, undefined rule"))); } if (result.AffectedCount == -501) { return(BadRequest(new ApiResponse(-3004, $"Sorry, your balance was not enough {(currentUser.Balance - currentUser.Reserved).ToString("N0")}"))); } if (result.AffectedCount == -502) { return(BadRequest(new ApiResponse(-3005, $"Sorry, amount less than min limit"))); } if (result.AffectedCount == -503) { return(BadRequest(new ApiResponse(-3006, "Sorry, amount more than max limit"))); } if (result.AffectedCount == -511) { return(BadRequest(new ApiResponse(-3007, "Sorry, your account was invalid"))); } if (result.AffectedCount == -512) { return(BadRequest(new ApiResponse(-3008, "Sorry, inconsistent data"))); } if (result.AffectedCount == -514) { return(BadRequest(new ApiResponse(-3009, $"Sorry, duplicated sequence {topup.seq}"))); } if (result.AffectedCount == -515) { return(BadRequest(new ApiResponse(-3010, $"Sorry, amount not allowed"))); } return(BadRequest(new ApiResponse(500, $"Sorry, {result.Error}"))); } recharge.Id = result.AffectedCount; // call web service var endpoint = _config["OCS:Endpoint"]; var apiUser = _config["OCS:User"]; var apiPassword = _config["OCS:Password"]; var remoteAddress = _config["OCS:RemoteAddress"]; var successCode = _config["OCS:SuccessCode"]; var watch = System.Diagnostics.Stopwatch.StartNew(); var payResult = await new TopupService(_db, _partnerManager).DoRecharge(recharge, endpoint, apiUser, apiPassword, remoteAddress, successCode); watch.Stop(); double elapsedMs = watch.ElapsedMilliseconds; payResult.DebugInfo = payResult.RefMessage + " OCS(" + elapsedMs + ")"; var dbResult = new RechargeRepo(_db, null).UpdateWithBalance(payResult); if (!dbResult.Success) { _logger.LogError($"EMERGENCY-CHECk PayId={payResult.Id} {dbResult.Error}"); } if (payResult.Status.Id == 1) { new NotificationRepo(_db, _partnerManager).SendNotification("Recharge.Create", payResult.Id, payResult, 1); } var finalResult = JsonSerializer.Serialize(new { resultCode = payResult.Status.Id == 1 ? 0 : payResult.Status.Id, resultDesc = payResult.RefMessage, sequence = payResult.ApiTransaction, payId = recharge.Id, duration = elapsedMs }); return(Ok(finalResult)); }
public IActionResult Index(RechargeQuery model, [FromQuery(Name = "direction")] string direction) { model.Error = string.Empty; var currUserId = partner.GetCurrentUserId(this.HttpContext); var currRoleId = partner.GetCurrentUserRole(this.HttpContext); var currAccountId = partner.GetCurrentUserAccount(this.HttpContext); var permission = partnerActivity.GetPartAct("Recharge.Query", currRoleId); if (permission == null || permission.Details == null) { toastNotification.AddErrorToastMessage("ليس لديك الصلاحية الكافية", new ToastrOptions { Title = "" }); model.Statuses = new CommonCodeRepo(db).GetCodesByType("Collection.Status"); model.AccessChannel = new CommonCodeRepo(db).GetCodesByType("access.channel"); return(View(model)); } if (permission.Scope.Id == "CurOpOnly") { if (!string.IsNullOrEmpty(model.QPosId) && model.QPosId != currUserId) { toastNotification.AddErrorToastMessage("ليس لديك الصلاحيات الكافية للاستعلام عن هذا الرقم", new ToastrOptions { Title = "" }); model.Statuses = new CommonCodeRepo(db).GetCodesByType("Collection.Status"); model.AccessChannel = new CommonCodeRepo(db).GetCodesByType("access.channel"); return(View(model)); } else if (model.QPosAccount > 0 && model.QPosAccount != currAccountId) { toastNotification.AddErrorToastMessage("ليس لديك الصلاحيات الكافية للاستعلام عن هذا الحساب", new ToastrOptions { Title = "" }); model.Statuses = new CommonCodeRepo(db).GetCodesByType("Collection.Status"); model.AccessChannel = new CommonCodeRepo(db).GetCodesByType("access.channel"); return(View(model)); } } ModelState.Clear(); if (direction == "pre" && model.Paging.PageNo > 1) { model.Paging.PageNo -= 1; } if (direction == "next") { model.Paging.PageNo += 1; } model.QueryScope = permission.Scope.Id; model.CurrentUserId = currUserId; model.CurrentUserAccount = currAccountId; var result = new RechargeQuery(); result = new RechargeRepo(db, partner).QueryWithPaging(model); result.Statuses = new CommonCodeRepo(db).GetCodesByType("Collection.Status"); result.AccessChannel = new CommonCodeRepo(db).GetCodesByType("access.channel"); if (result.Results == null) { toastNotification.AddInfoToastMessage("عذرا لا توجد بيانات", new ToastrOptions { Title = "" }); } if (result != null && result.Results != null) { model.Paging.Count = new RechargeRepo(db, partner).GetCount(model); } else { model.Paging.Count = 0; } return(View(result)); }
public IActionResult Detail(int id) { var model = new RechargeRepo(db, partner).GetRecharge(id); return(View(model)); }