예제 #1
0
        public IActionResult VerifyPayment(string Authority, string Status)
        {
            try
            {
                var orderpeymnt = _repository.CustomerOrderPayment.FindByCondition(c => c.TraceNo == Authority)
                                  .FirstOrDefault();
                var CustomerOrderId = orderpeymnt.CustomerOrderId;
                if (orderpeymnt == null)
                {
                    return(NotFound());
                }

                ZarinPalVerifyRequest zarinPalVerifyRequest = new ZarinPalVerifyRequest();
                zarinPalVerifyRequest.authority = Authority;
                zarinPalVerifyRequest.amount    = (int)orderpeymnt.TransactionPrice.Value;

                Tools.ZarinPal.ZarinPal zarinPal = new Tools.ZarinPal.ZarinPal();
                var result = zarinPal.VerifyPayment(zarinPalVerifyRequest);
                if (result.code == 100 || result.code == 101)
                {
                    orderpeymnt.FinalStatusId   = 100;
                    orderpeymnt.RefNum          = result.ref_id.ToString();
                    orderpeymnt.TransactionDate = timeTick;
                    orderpeymnt.CardPan         = result.card_pan;
                    _repository.CustomerOrderPayment.Update(orderpeymnt);
                    _repository.Save();
                    SendSMS sendSMS = new SendSMS();

                    var mobileNo = User.Claims.Where(c => c.Type == "mobile").Select(x => x.Value).SingleOrDefault();
                    sendSMS.SendSuccessOrderPayment(mobileNo, orderpeymnt.OrderNo, CustomerOrderId.Value);
                    SendEmail sendEmail = new SendEmail();
                    var       email     = User.Claims.Where(c => c.Type == ClaimTypes.Name).Select(x => x.Value).SingleOrDefault();
                    sendEmail.SendSuccessOrderPayment(email, orderpeymnt.OrderNo, CustomerOrderId.Value);
                    return(Ok("success"));
                }
                else
                {
                    orderpeymnt.FinalStatusId   = result.code;
                    orderpeymnt.TransactionDate = timeTick;
                    _repository.CustomerOrderPayment.Update(orderpeymnt);
                    _repository.Save();
                    return(Ok("error"));
                }
            }
            catch (Exception e)
            {
                _logger.LogError($"Something went wrong inside GetCustomerOrderListByCustomerId: {e.Message}");
                return(BadRequest("Internal server error"));
            }
        }
예제 #2
0
        public ZarinPalVerifyResponse VerifyPayment(ZarinPalVerifyRequest verifyRequest)
        {
            verifyRequest.merchant_id = merchant_id;
            var body    = JsonSerializer.Serialize(verifyRequest);
            var client  = new RestClient("https://api.zarinpal.com/pg/v4/payment/verify.json");
            var request = new RestRequest(Method.POST);

            request.AddJsonBody(body);

            IRestResponse response = client.Execute(request);
            var           data     = ((Newtonsoft.Json.Linq.JContainer)JObject.Parse(response.Content).First).First.ToString();
            var           error    = ((Newtonsoft.Json.Linq.JContainer)JObject.Parse(response.Content).First).Next.First.ToString();

            if (data == "[]")
            {
                var result = JsonSerializer.Deserialize <ZarinPalVerifyResponse>(error);
                return(result);
            }
            else
            {
                var result = JsonSerializer.Deserialize <ZarinPalVerifyResponse>(data);
                return(result);
            }
        }
예제 #3
0
        public SingleResult <string> VerifyPayment(string authority, string status)
        {
            try
            {
                var orderpeymnt = _repository.CustomerOrderPayment.FindByCondition(c => c.TraceNo == authority)
                                  .FirstOrDefault();
                if (orderpeymnt == null)
                {
                    throw new BusinessException(XError.BusinessErrors.PaymentInfoNotFound());
                }


                var customerOrderId = orderpeymnt.CustomerOrderId;
                var customer        = _repository.CustomerOrder.FindByCondition(c => c.Id == customerOrderId)
                                      .Include(c => c.Customer).Select(c => c.Customer).First();

                var zarinPalVerifyRequest = new ZarinPalVerifyRequest
                {
                    authority = authority,
                    amount    = (int)orderpeymnt.TransactionPrice.Value * 10
                };

                var zarinPal = new ZarinPal();
                var result   = zarinPal.VerifyPayment(zarinPalVerifyRequest);
                if (result.code == 100 || result.code == 101)
                {
                    orderpeymnt.FinalStatusId   = 24;
                    orderpeymnt.RefNum          = result.ref_id.ToString();
                    orderpeymnt.TransactionDate = DateTime.Now.Ticks;
                    orderpeymnt.CardPan         = result.card_pan;
                    _repository.CustomerOrderPayment.Update(orderpeymnt);

                    var sendSms = new SendSMS();
                    sendSms.SendSuccessOrderPayment(customer.Mobile.Value, orderpeymnt.OrderNo, orderpeymnt.PaymentPrice.Value);

                    var sendEmail = new SendEmail();
                    var email     = customer.Email;
                    sendEmail.SendSuccessOrderPayment(email, orderpeymnt.OrderNo, customerOrderId.Value);



                    var productist = _repository.CustomerOrderProduct.FindByCondition(c => c.CustomerOrderId == customerOrderId).Select(c => c.Product).ToList();
                    productist.ForEach(c =>
                    {
                        c.Count = c.Count--;
                        _repository.Product.Update(c);
                    });


                    var sellerList = _repository.CustomerOrderProduct.FindByCondition(c => c.CustomerOrderId == customerOrderId).Select(c => c.Seller.Mobile).ToList();

                    sellerList.ForEach(c =>
                    {
                        if (c == null)
                        {
                            return;
                        }
                        var sendSms = new SendSMS();
                        sendSms.SendOrderSmsForSeller(c.Value);
                    });


                    _repository.Save();

                    var finalres = SingleResult <string> .GetSuccessfulResult("عملیات پرداخت با موفقیت انجام شد.");

                    _logger.LogData(MethodBase.GetCurrentMethod(), finalres, null, customerOrderId);
                    return(finalres);
                }
                else
                {
                    orderpeymnt.FinalStatusId   = 25;
                    orderpeymnt.TransactionDate = DateTime.Now.Ticks;
                    _repository.CustomerOrderPayment.Update(orderpeymnt);
                    _repository.Save();

                    throw new BusinessException(XError.BusinessErrors.FailedPayment());
                }
            }
            catch (Exception e)
            {
                _logger.LogError(e, MethodBase.GetCurrentMethod(), authority, status);

                return(SingleResult <string> .GetFailResult("خطا در سامانه"));
            }
        }
예제 #4
0
        public SingleResult <string> VerifyWalletCharge(string authority, string status)
        {
            try
            {
                var wallet = _repository.CustomerWalletCharge.FindByCondition(c => c.TraceNo == authority)
                             .FirstOrDefault();
                if (wallet == null)
                {
                    throw new BusinessException(XError.BusinessErrors.PaymentInfoNotFound());
                }



                var customer = _repository.CustomerOrder.FindByCondition(c => c.Id == wallet.CustomerId)
                               .Include(c => c.Customer).Select(c => c.Customer).First();

                var zarinPalVerifyRequest = new ZarinPalVerifyRequest
                {
                    authority = authority,
                    amount    = (int)wallet.ChargePrice.Value * 10
                };

                var zarinPal = new ZarinPal();
                var result   = zarinPal.VerifyPayment(zarinPalVerifyRequest);
                if (result.code == 100 || result.code == 101)
                {
                    wallet.FinalStatusId = 40;
                    wallet.RefNum        = result.ref_id.ToString();
                    wallet.ChargeDate    = DateTime.Now.Ticks;
                    wallet.BankCard      = result.card_pan;
                    _repository.CustomerWalletCharge.Update(wallet);



                    customer.WalletFinalPrice += wallet.ChargePrice;
                    _repository.Customer.Update(customer);
                    _repository.Save();

                    var sendSms = new SendSMS();
                    sendSms.SendWalletSuccessChargeSms(customer.Mobile.Value, wallet.ChargePrice.ToString(), customer.Name + " " + customer.Name);

                    var finalres = SingleResult <string> .GetSuccessfulResult("عملیات پرداخت با موفقیت انجام شد.");

                    _logger.LogData(MethodBase.GetCurrentMethod(), finalres, null, authority, status);
                    return(finalres);
                }
                else
                {
                    wallet.FinalStatusId = 41;
                    wallet.ChargeDate    = DateTime.Now.Ticks;
                    _repository.CustomerWalletCharge.Update(wallet);
                    _repository.Save();

                    throw new BusinessException(XError.BusinessErrors.FailedPayment());
                }
            }
            catch (Exception e)
            {
                _logger.LogError(e, MethodBase.GetCurrentMethod(), authority, status);

                return(SingleResult <string> .GetFailResult(e.Message));
            }
        }