PDA

View Full Version : فرایند خرید کاربرثبتنام کرده و غیر ثبتنامی



sara_t
شنبه 09 بهمن 1395, 10:25 صبح
سلام دوستان
من برای خرید از فروشگاه اینترنتی در کدهام دو حالت در نظر گرفتم.یکی اینکه کاربر لاگین نکرده وثبتنام هم نکرده و فقط اومده در سایت خرید کنه که کدها بصورت زیر هست:

[HttpPost]
public ActionResult Buy(Factor factor)
{
if (ModelState.IsValid)
{
FactorRepository blFactor = new FactorRepository();
FactorItemRepository blFactorItem = new FactorItemRepository();
ProductRepository blProduct = new ProductRepository();
List<BasketViewModel> listBasket = new List<BasketViewModel>();
List<HttpCookie> lst = new List<HttpCookie>();
for (int i = Request.Cookies.Count - 1; i >= 0; i--)
{
if (lst.Where(p => p.Name == Request.Cookies[i].Name).Any() == false)
lst.Add(Request.Cookies[i]);
}
foreach (var item in lst.Where(p => p.Name.StartsWith("Cart_")))
{
listBasket.Add(new BasketViewModel { Product = blProduct.Find(Convert.ToInt32(item.Name.Substring (5))), Count = Convert.ToInt32(item.Value) });
}
decimal price = 0;
foreach (var item in listBasket)
{
price += Convert.ToDecimal(item.Count * item.Product.Price);
}
factor.BuyDate = DateTime.Now;
factor.SumPrice = price;
factor.Description = "خرید توسط کاربر " + factor.Name + " در تاریخ " + DateTime.Now.ToPersianDate().ToString() + " به مبلغ" + factor.SumPrice.ToPrice() + " تومان انجام شد";
if (Session["UserId"] != null)
{
factor.UserId = Convert.ToInt32(Session["UserId"]);
}
factor.IsFinish = false;

if (blFactor.Add(factor))
{
int factorId = blFactor.GetLastIdentity();
foreach (var item in listBasket)
{
blFactorItem.Add(new FactorItem() { FactorId = factorId, ProductId = item.Product.Id, Qty = Convert.ToByte(item.Count) });
}
// redirect to ...
var zarinpal = new ZarinPal.PaymentGatewayImplementationServicePortTy peClient();
string result = "";
int code = zarinpal.PaymentRequest("Merchant Id", Convert.ToInt32(factor.SumPrice), factor.Description, factor.Email, factor.Mobile, "http://" + Request.Url.Authority + "/Home/Verify?Factor=" + factorId.ToString().Encrypt().UrlEncode(), out result);
if (code == 100)
{
return Redirect("https://www.zarinpal.com/pg/StartPay/" + result);
}
else
{
ViewBag.Message = "خطا هنگام اتصال به درگاه بانکی";
}
}
else
{
ViewBag.Message = "اطلاعات شما ثبت نشد";
}
}
else
{
ViewBag.Message = "اطلاعات خود را بدرستی وارد کنید";
}
return View();
}



دوتا تیبل دارم بنام فاکتور و فاکتورآیتم.
در تیبل فاکتور این ایتمها رو ذخیره میکنم:
تاریخ خرید
کدرهگیری
نام خریدارثبتنام نکرده
ادرسش
موبایلش
و در تیبل فاکتور آیتم هم اینا رو دارم
کد محصول
قیمت محصول
کد فاکتور
حالا میخام اگر کاربری قبلن ثبتنام کرده و الان لاگین کرده دیگه صفحه بالا رو نبینه و فاکتور براش صادر بشه و مستقیم به درگاه پرداخت متصل بشه.برای اینکار باید یه اکشن جدا بسازم؟
کلا تو این فرایند موندم ممنون میشم راهنمایی کنید.

faranakk
سه شنبه 12 بهمن 1395, 11:29 صبح
سلام
کلا وقتی میخوای چک کنی که یه اکشن رو فقط کاربری که لاگین کرده ببینه از اتریبیوت [Authorize] استفاده کن
و اگه میخوای ببنی که یه کاربری لاگین کرده هم از IsAuthorize استفاده کن و داخل شرط مدیریت کن کد هات رو