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();
}
دوتا تیبل دارم بنام فاکتور و فاکتورآیتم.
در تیبل فاکتور این ایتمها رو ذخیره میکنم:
تاریخ خرید
کدرهگیری
نام خریدارثبتنام نکرده
ادرسش
موبایلش
و در تیبل فاکتور آیتم هم اینا رو دارم
کد محصول
قیمت محصول
کد فاکتور
حالا میخام اگر کاربری قبلن ثبتنام کرده و الان لاگین کرده دیگه صفحه بالا رو نبینه و فاکتور براش صادر بشه و مستقیم به درگاه پرداخت متصل بشه.برای اینکار باید یه اکشن جدا بسازم؟
کلا تو این فرایند موندم ممنون میشم راهنمایی کنید.
من برای خرید از فروشگاه اینترنتی در کدهام دو حالت در نظر گرفتم.یکی اینکه کاربر لاگین نکرده وثبتنام هم نکرده و فقط اومده در سایت خرید کنه که کدها بصورت زیر هست:
[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();
}
دوتا تیبل دارم بنام فاکتور و فاکتورآیتم.
در تیبل فاکتور این ایتمها رو ذخیره میکنم:
تاریخ خرید
کدرهگیری
نام خریدارثبتنام نکرده
ادرسش
موبایلش
و در تیبل فاکتور آیتم هم اینا رو دارم
کد محصول
قیمت محصول
کد فاکتور
حالا میخام اگر کاربری قبلن ثبتنام کرده و الان لاگین کرده دیگه صفحه بالا رو نبینه و فاکتور براش صادر بشه و مستقیم به درگاه پرداخت متصل بشه.برای اینکار باید یه اکشن جدا بسازم؟
کلا تو این فرایند موندم ممنون میشم راهنمایی کنید.