黑马程序员_学习日记81_810图书商城项目纪要
2012-08-15 23:00
411 查看
一、购物车(购物表)
Cart表(Id UserId BookId Count)
1.新建BuyMaster.Master+Cart.aspx
2.在BookDetail.aspx中添加“购买”按钮
3.Cart.aspx:显示购物信息
3.1添加repeater,其中放买的东西。
3.2(1)在Page_Load中,判断用户是否登录(或者不在这里判断,付款时再判断,这里用cookie读取用户信息)
(2)添加AddCart()方法,将东西放入购物车
3.3在CartServices中添加GetCart方法,根据用户编号与书的编号在购物车中查找。
public Model.Cart GetCart(int bookId,int userId)
3.4绑定购物车中的商品项
4.更新购物车中商品数量,删除商品,计算更新总价,用jQueryUI代替alert显示提示信息
4.1Cart.aspx:
4.2CartProcess.ashx:
二、结算(将购物表中信息放入订单表)
Orders表
OrderBook表
1.订单的存储过程
2.订单确认页面OrderConfirm.aspx
3.支付流程
(1)下订单,得到订单号、总价格等信息
(2)按照支付宝要求的数据格式进行组织。并通过密钥(支付宝提供)将要发给支付宝的数据进行加密
(3)将加密好的数据以get方式发给支付宝(网银支付以post方式提交)
(4)支付宝接受发送过来的数据,进行校验。
(5)校验成功后出现支付宝登录界面,开始支付。
(6)无论支付成功与否,都会返回给网站一个信息。
(7)接收从支付宝返回的数据,进行校验,如果成功,修改订单状态。
订单号对支付宝来说没有意义,支付宝会将订单号原样返回,我们接收后,就知道哪个订单支付了。
4.
5.在Common文件夹中建Pay.cs文件
三、互联网调优
缓存、CDN加速、多服务器文件同步
Cart表(Id UserId BookId Count)
1.新建BuyMaster.Master+Cart.aspx
2.在BookDetail.aspx中添加“购买”按钮
3.Cart.aspx:显示购物信息
3.1添加repeater,其中放买的东西。
3.2(1)在Page_Load中,判断用户是否登录(或者不在这里判断,付款时再判断,这里用cookie读取用户信息)
protected void Page_Load(object sender, EventArgs e) { if (Common.Common.CheckSession())//判断用户是否登录 { AddCart();//将想买的东西放入购物车 BindRepeater();//绑定购物车(Cart表)中的商品到Repeater控件 } else { Common.Common.GotoPage();//没登录,返回登录页面 } }
(2)添加AddCart()方法,将东西放入购物车
private void AddCart() { //判断bookId有没有传过来。如果用户直接点击“购物车”导航进入该页面,则没有id if (!string.IsNullOrEmpty(Request.QueryString["id"])) { int id = 0; //检验id是否符合规范,因为url地址可能是用户手写的 if (!int.TryParse(Request.QueryString["id"],out id)) { Response.Redirect("/BookList.aspx"); } BLL.BookManager bll = new BLL.BookManager(); Model.Book bookModel = bll.GetModel(id); if (bookModel != null)//判断这本书是否存在,因为如果用户手动输入url可能输入的id不存在 { BLL.CartManager cartBll = new BLL.CartManager(); int userId = ((Model.User)Session["UserName"]).Id;//用户已登录,从Session中得到用户Id //根据用户Id和书的Id从Cart表中查找对应的数据 Model.Cart cartModel = cartBll.GetCart(id, userId); if (cartModel != null)//当前用户的购物车中已经存在该书,将其数量加1 { cartModel.Count = cartModel.Count + 1; cartBll.Update(cartModel); } else//向购物车中添加一本新书 { Model.Cart modelCart = new Model.Cart(); modelCart.Count = 1; modelCart.User = (Model.User)Session["UserName"]; modelCart.Book = bookModel; cartBll.Add(cartModel); } } else//用户手动修改了url,使id不存在 { Response.Redirect("/BookList.aspx"); } } }
3.3在CartServices中添加GetCart方法,根据用户编号与书的编号在购物车中查找。
public Model.Cart GetCart(int bookId,int userId)
3.4绑定购物车中的商品项
4.更新购物车中商品数量,删除商品,计算更新总价,用jQueryUI代替alert显示提示信息
4.1Cart.aspx:
//引用jQueryUI $(fucntion(){ $("#dialog-message").dialog({ autoOpen:false, }); }); function changeBar(operation,pkId,bookId){ var $control = $("#txtCount"+bookId); if(operation == '-'){ var count = $control.val(); count = parseInt(count) - 1; if(count <= 0){ //alert("数量至少为1"); $("#errorMessage").dialog("数量至少为1"); ShowMessage(); return; } } else if(operation == '+'){ count = parseInt(count)+1; if(count >= 999){ alert("最多买999本");//其实是要查库存 return; } } $.post("/ashx/CartProcess.ashx",{"action":"change","count":count,"pkId":pkId,}) if(data == "yes"){ $control.val(count);//更新文本框数量 } else if(data == "no"){ alert("修改失败"); } else{ alert("出现异常"); } },"text") //当图书数量文本框失去焦点时,更新文本框中的图书数量 function changeTextOnBlur(pkId,bookId,control){ var count = $(control).val();//获得文本框的值 var reg = /^\d{1,3}$/; if(reg.test(count)){ $.post("/ashx/CartProcess.ashx",{"action":"change","count":count,"pkId":pkId,}) if(data == "yes"){ $control.val(count);//更新文本框数量 } else if(data == "no"){ alert("修改失败"); } else{ alert("出现异常"); } },"text") } else{ alert("请输入数字"); $(control).val(inputText);//将之前的数字放回去 } } var inputText; //当图书数量文本框获取焦点时,得到文本框的值 function changeTextOnTocus(control) { inputText = $(control).val(); } function removeProductOnShoppingCart(pkId,control){ if(confirm("确定删除?")){ $.post("/ashx/CartProcess.ashx",{"action":"del","id":pkId},function(data){ if(data == "yes"){ $(control).parent().parent().remove();//移除当前tr //更新商品总价 GetTotalMoney(); } }) } } function GetTotalMoney(){ var tMoney = 0;//总价 $(".align_Center:gt(0)").each(function(){ var price = $(this).find("price").text();//单价 var count = $(this).find("input").val();//数量 tMoney += price*count; }); $("#totleMoney").Text(tMoney); } }
<!--图书数量文本框获得和失去焦点事件--> onfocus='changeTextOnFocus(this)' onblur="changeTextOnBlur(<%#Eval("Id")%>,<%#Eval("Book.Id")%>,this);" <!--删除链接点击事件--> onclick="removeProductOnShoppingCart(<%#Eval("Id")%>,this)"
4.2CartProcess.ashx:
string action = context.Request.QueryString["action"]; if(action = "change") { int count=Convert.ToInt32(context.Request.Form["count"]); int pkId=Convert.ToInt32(context.Request.Form["pkId"]); int bookId=Convert.ToInt32(context.Request.Form["bookId"]); Bll.BookManager bll = new BookShop.Bll.BookManager(); Model.Book bookModel = bll. } else if(action = "del") { int id = Convert.ToInt32(); cartBll. }
二、结算(将购物表中信息放入订单表)
Orders表
OrderBook表
1.订单的存储过程
create proc crate_orderConfirm @number nvarchar(50), @userId int, @address nvarchar(255), @totalMoney money output as declare @error int set @error=0--记录错误 --计算总价 select @totalMoney = sum([count]*UnitPrice) from Cart inner join Books on Cart.BookId=Books.Id begin transaction --向订单主表中插入数据 insert into Orders(OrderId,OrderDate,UserId,TotalPrice,PostAddress,state) values(@number,getdate()) set @error=@error+@@error insert into OrderBook(OrderID,) delete from Cart where UserId=@userId--删除购物车表中的数据 set @error=@error+@@error if @error>0 begin rollback transaction end else begin commit transaction end
2.订单确认页面OrderConfirm.aspx
protected decimal totalPrice=0; protected Model.User currUser = null; protected string strHtml = null; Page_Load() { if(Common.Common.CheckSession()) { currUser = (Model.User)Session["UserName"]; } else { Common.Common.GotoPage(); } if(!IsPostBack) { BindCartItem();//绑定商品 } if(IsPostBack) { CreateOrder();//创建订单 } } void CreateOrder() { if(CheckAddress()) { //1、调用存储过程,下订单 int userId = currUser.Id; string orderNum = DateTime.Now.ToString("yyyyMMddHHmmssfff")+userId;//订单号 string address = string.Format("收货人:{0},地址:{1},电话:{2}",Request.Form["txtName"]...);//地址 BLL.OrderManager bll = new BookShop.BLL.OrderManager(); decimal totalMoney = bll.CreateOrders(userId,ordernum,address);//调用存储过程,下订单 //2、向支付宝发送数据 if(!string.IsNullOrEmpty(Request.Form["zfPay"])) { Common.Pay pay = new BookShop.Web.Common.Pay("商城","图书商城",ordernum,totalMoney); Response.Redirect(pay.PayUrl());//构建支付宝的URL参数 } } } //用户是否填了收货人地址 bool CheckAddress() { if(!string.IsNullOrEmpty(Request.Form("txtName"))&&!string.IsNullOrEmpty(Request.Form["txtAddress"])) { } } //绑定商品 void BindCartItem() { BLL.CartManager bll = new BookShop.BLL.CartManager(); //查该用户在购物车中是否有商品 List<Model.Cart> list = bll.GetModelList("UserId"+["UserName"]).Id) if(list != null) { //拼接字符串,显示用户订单 totalPrice += } }
3.支付流程
(1)下订单,得到订单号、总价格等信息
(2)按照支付宝要求的数据格式进行组织。并通过密钥(支付宝提供)将要发给支付宝的数据进行加密
(3)将加密好的数据以get方式发给支付宝(网银支付以post方式提交)
(4)支付宝接受发送过来的数据,进行校验。
(5)校验成功后出现支付宝登录界面,开始支付。
(6)无论支付成功与否,都会返回给网站一个信息。
(7)接收从支付宝返回的数据,进行校验,如果成功,修改订单状态。
订单号对支付宝来说没有意义,支付宝会将订单号原样返回,我们接收后,就知道哪个订单支付了。
4.
<appSettings> <add key="partner" value="1"/> <add key="return_url" value="http://localhost:8899/ashx/GetPay.ashx"/> <add key="seller_email" value="zhangsan@126.com"/> <add key="key" value="mk@2$z"/> <add key="payGetUrl" value="zhangsan@126.com"/> </appSettings>
5.在Common文件夹中建Pay.cs文件
public class Pay { public Pay(string subject,string body,string out_trade_no,decimal total_fee) { this.subject = subject; ... this.return_url = ConfigurationManager.appSetting[""] //数字签名 this.sign = Common.CreateMd5(total_fee.ToString()+partner+out_trade_no+subject+key).ToLower(); } protected string PayUrl() { return string.Format("{0}?partner={1}&return_url={2}&...",payGetUrl,partner,return_url,...); } }
三、互联网调优
缓存、CDN加速、多服务器文件同步
相关文章推荐
- 黑马程序员_学习日记80_808图书商城项目纪要
- 黑马程序员_学习日记82_811图书商城项目纪要
- 黑马程序员_学习日记78_806图书商城项目纪要
- 黑马程序员_学习日记79_807图书商城项目纪要
- 黑马程序员_学习日记83_812图书商城项目小结
- 网上图书商城项目学习笔记-007登录功能实现
- 黑马程序员_学习日记55_628三层项目(用类封装用于拼接的where条件语句、写代码生成器)
- 网上图书商城项目学习笔记-014购物车模块页面javascrip
- 黑马程序员_学习日记56_629三层项目(邮件收发、三层总结、HTML)
- 网上图书商城项目学习笔记-012BOOK模块查询2
- 网上图书商城项目学习笔记-019我的订单
- 网上图书商城项目学习笔记-036工具类之CommonUtils及日期转换器
- 黑马程序员_学习日记30_winphone7开发_项目的基本档案结构
- 网上图书商城项目学习笔记-033删除图书
- 网上图书商城项目学习笔记-002登录页面的静态设计
- 网上图书商城项目学习笔记-025分类管理模块分析及查询所有分类实现
- 网上图书商城项目学习笔记-015删除和批量删除购物车条目
- 网上图书商城项目学习笔记-020订单详情
- 网上图书商城项目学习笔记-026添加一级分类
- 网上图书商城项目学习笔记-030删除二级分类