430 likes | 604 Views
第 15 章 建立網路商店. 15-1 網路商店的基礎 15-2 網路商店的信用卡檢查 15-3 網路商店的廣告管理 15-4 網路商店的系統架構 15-5 網路商店的產品目錄 15-6 網路商店的購物車 15-7 網路商店的訂單處理. 15-1網路商店的基礎. 15-1-1 什麼是網路商店 15-1-2 網路上的付錢方式. 15-1-1 什麼是網路商店 - 說明. 網路商店是在 Internet 開設的虛擬店面,它的目的和一般實體商店相同,都是開店作生意。不過,網路商店並沒有實際店面,只是模擬現實生活方式,讓使用者在網頁選購商品。
E N D
第15章 建立網路商店 • 15-1 網路商店的基礎 • 15-2 網路商店的信用卡檢查 • 15-3 網路商店的廣告管理 • 15-4 網路商店的系統架構 • 15-5 網路商店的產品目錄 • 15-6 網路商店的購物車 • 15-7 網路商店的訂單處理
15-1網路商店的基礎 • 15-1-1 什麼是網路商店 • 15-1-2 網路上的付錢方式
15-1-1 什麼是網路商店-說明 • 網路商店是在Internet開設的虛擬店面,它的目的和一般實體商店相同,都是開店作生意。不過,網路商店並沒有實際店面,只是模擬現實生活方式,讓使用者在網頁選購商品。 • 網路商店是模擬現實生活的賣場,讓消費者在虛擬商店推著虛擬購物車,輕鬆在商品目錄採購所需的商品。
15-1-1 什麼是網路商店-商品目錄(Catalog) • 網路商店沒有實際賣場架位,也不會將商品實際上架,它提供的是商品目錄,讓消費者瀏覽商品分類或快速查詢商品,並且提供產品詳細資料來模擬賣場架上的商品。 • 當然網路商店並不能將商品真的放上網頁,取而代之的是顯示銷售商品的圖片,並且提供快速的商品查詢功能,擁有商品分類目錄和關鍵字搜尋功能,可以讓消費者快速瀏覽或找到所需的商品。
15-1-1 什麼是網路商店-購物車(Shopping Cart) • 購物車的英文為Shopping Cart,有些國內網站稱為購物袋,也就是實體賣場或超級市場採購時,方便儲存選購商品的哪輛推車,通常我們是推著購物車逛著賣場,看到有意購買的商品,就將它放入購物車,在採購完成後才去結帳櫃台結帳。 • 同樣的採購流程轉換到Web舞台,網路商店依然保留現實生活中的哪輛車,可以讓消費者在網路商店將選購商品丟入車中,只是並非將商品拿起來放入購物車,而是將商品資料和數量記錄下來,並且提供功能隨時可以檢示選購商品的清單,這個功能稱為網路商店的購物車。
15-1-2 網路上的付錢方式-SET電子交易1 • 在談到網路SET(Secure Electronic Transactions)電子交易前,我們必須看看現實生活是如何使用信用卡刷卡付帳。首先信用卡特約商店需要與收單銀行簽約,才能擁有刷卡機和簽單,開始接受顧客的信用卡付帳。 • 在信用卡實際交易過程中,授權階段是最重要的部分,它可以保證特約商店收到錢。轉換到網路舞台的信用卡交易,最大的差別是無法真的將信用卡刷過刷卡機以取得授權,此時的方法是使用SET。SET是網路上進行交易授權格式,這和銀行間金融業跨行交易的標準ISO8583格式並不相同。
15-1-2 網路上的付錢方式-SET電子交易2 • 整個網路的授權過程比較複雜,如下圖所示:
15-1-2 網路上的付錢方式-SSL(Secure Socket Layer)交易方式 • SSL電子交易缺乏消費者認證,所以,網路商店需要使消費者加入會員來作把關。不過,只需擁有別人信用卡資料,就可以在網路上進行消費,雖然傳送信用卡的資料有加密保護,但是比起SET機制的複雜認證,其交易風險就大的多。 • 因為SSL只是將網頁加密傳送來保護信用卡資料不被竊取,Web伺服器需要指定加密保護的目錄來使用SSL,不同於SET機制需要開發相關程式進行線上交易,SSL相對來說,在實作上就簡單的多。
15-2 網路商店的信用卡檢查-信用卡的基礎 • 信用卡的卡號並不是流水號碼,而是暗藏玄機,它是採用特殊規則和演算法產生的一組號碼。事實上,從卡號組合就可以判斷信用卡種類,數學公式可以檢查卡號是否為合法卡號。信用卡的相關資料,如下所示: • 信用卡種類:卡號前四碼可以判斷是Visa、Master Card、Discovery或American Express等不同種類的信用卡。 • 信用卡卡號:數學公式可以檢查16碼卡號是否為合法卡號。 • 有效期限:信用卡上有發卡銀行授予的有效期限,即GOOD THRU字串後的日期,一張有效的信用卡其刷卡日期不能超過卡上的日期。
15-2 網路商店的信用卡檢查-信用卡檢查函式庫:CreditCardLib.inc • 在ASP.NET程式輸入16碼信用卡卡號後,就可以使用CreditCardLib.inc函式庫的函數來執行信用卡檢查。函數說明如下所示: • checkCardType()函數:檢查信用卡種類。 • validCardNumber()函數:使用數學公式判斷是否為合法卡號,因為數學公式有些敏感,所以筆者並不打算詳細說明,有興趣的讀者請自行研究此函數的程式碼。
15-3 網路商店的廣告管理 • 15-3-1 AdRotator控制項的網頁廣告 • 15-3-2 資料庫監控的網路廣告
15-3-1 AdRotator控制項的網頁廣告-說明 • ASP.NET的AdRotator控制項是一個橫幅廣告管理元件,屬於System.Web.UI.WebControls名稱空間。AdRotator控制項使用亂數隨機選擇顯示的廣告圖片,每一張圖片都是圖片超連結可以連接目的網址。
15-3-1 AdRotator控制項的網頁廣告-XML文件的設定檔 • AdRotator控制項是使用XML文件來記錄顯示圖片和超連結等相關資訊,其內容如下所示: <?xml version="1.0" encoding="Big5"?> <Advertisements> <Ad> <ImageUrl>images/banner1.gif</ImageUrl> <NavigateUrl>http://www.hinet.net</NavigateUrl> <AlternateText>中華電信</AlternateText> <Keyword>ISP</Keyword> <Impressions>5</Impressions> <Caption>中華電信</Caption> </Ad> …………………… </Advertisements>
15-3-1 AdRotator控制項的網頁廣告-標籤 • 在ASP.NET程式可以新增AdRotator控制項來顯示網頁廣告,如下所示: <asp:AdRotator Id="banner" Runat="server" KeywordFilter="ISP" AdvertisementFile="Ch15-3-1.xml" OnAdCreated="AdCreated_Event" BorderWidth="2"/>
15-3-1 AdRotator控制項的網頁廣告-事件處理程序 • AdRotator控制項提供AdCreated事件,可以在標籤使用OnAdCreated屬性指定事件處理程序,傳入參數是AdCreatedEventArgs物件。例如:AdCreated_Event()程序,如下所示: Sub AdCreated_Event(Sender As Object, _ E As AdCreatedEventArgs) msg.Text = "連結網址: " & E.NavigateUrl title.Text = E.AdProperties("Caption") End Sub
15-3-2 資料庫監控的網路廣告-說明 • AdRotator控制項是使用亂數隨機選擇顯示的廣告圖片,並沒有辦法記錄顯示廣告圖片的次數,或是有多少位使用者曾按下圖片超連結,和限制廣告圖片的顯示期限。 • 在本節的ASP.NET程式範例是使用資料表儲存廣告圖片資料,提供欄位記錄圖片顯示和按下次數,屬於資料庫監控的廣告圖片管理。
15-3-2 資料庫監控的網路廣告-Banners資料表 • Access資料庫【Banners.mdb】擁有Banners資料表,可以儲存廣告圖片的相關資訊,如下表所示:
15-4 網路商店的系統架構 • 15-4-1 網路商店的檔案清單與架構 • 15-4-2 網路商店的資料庫 • 15-4-3 網路商店的主版頁面
15-4-1 網路商店的檔案清單與架構 • 在網路商店主目錄「Ch15」下,擁有3個子目錄App_Data、App_Code和images,其說明如右表所示:
15-4-2 網路商店的資料庫-Publishers資料表 • 在網路商店產品目錄可以使用出版商來進行分類,也就是Publishers資料表,其欄位如下表所示:
15-4-2 網路商店的資料庫-Orders資料表 • 在Products.mdb資料庫的Orders資料表儲存訂單資料,其欄位如下表所示:
15-4-2 網路商店的資料庫-OrderItems資料表 • 在Products.mdb資料庫的OrderItems資料表儲存訂單的商品項目,其欄位如下表所示:
15-4-3 網路商店的主版頁面-主選單 • 網路商店的主選單是使用SiteMapDataSource和Menu控制項所建立,如下所示: <asp:SiteMapDataSource Id="menu" Runat="server" ShowStartingNode="False"/> <asp:Menu Id="site" Runat="server" DataSourceID="menu" Width="130" StaticMenuItemStyle-ForeColor="#6B696B" StaticHoverStyle-ForeColor="white" StaticHoverStyle-BackColor="black"/>
15-4-3 網路商店的主版頁面-圖書目錄 • 網路商店圖書目錄可以使用分類、種類和關鍵字方式來搜尋圖書資料,如下圖所示:
15-4-3 網路商店的主版頁面-事件處理程序 Sub SearchClick(Sender As Object, E As EventArgs) Response.Redirect("Products.aspx?Filter=" & _ search.Text) End Sub Sub PublisherClick(Sender As Object, _ E As EventArgs) Response.Redirect("Products.aspx?Publisher=" & _ dropList2.SelectedItem.Value & "&Name=" & _ dropList2.SelectedItem.Text) End Sub Sub TypeClick(Sender As Object, E As EventArgs) Response.Redirect("Products.aspx?Type=" & _ dropList1.SelectedItem.Text) End Sub
15-5 網路商店的產品目錄 • 15-5-1 顯示產品目錄 • 15-5-2 產品的詳細資料
15-5-1 顯示產品目錄 • 產品目錄ASP.NET程式Products.asp是套用BookStore.master主版頁面,使用GridView控制項來顯示圖書資料,如下圖所示:
15-5-2 產品的詳細資料 • 產品詳細資料的ASP.NET程式是ProductDetails.aspx,它是套用BookStore.master主版頁面,使用DetailsView控制項顯示圖書的詳細資料,如右圖所示:
15-6 網路商店的購物車 • 15-6-1 ShoppingCart與CartItem類別宣告 • 15-6-2 將選購的商品存入購物車 • 15-6-3 檢視購物車的內容 • 15-6-4 刪除購物車的商品數量
15-6 網路商店的購物車 • 網路商店的購物車是使用匿名個人化的Profile物件來儲存購物車內容。在web.config檔案啟用Web應用程式的匿名個人化和新增Profile物件的Cart屬性,如下所示: <system.web> <roleManager enabled="true"/> <authentication mode="Forms"/> <anonymousIdentification enabled="true"/> <profile> <properties> <add name="Cart" allowAnonymous="true" serializeAs="Binary" type="ShoppingCart"/> </properties> </profile> </system.web>
15-6-1 ShoppingCart與CartItem類別宣告 • 購物車清單是儲存在Profile物件的Cart屬性,其資料型態ShoppingCart類別宣告是位在「App_Code」目錄的Visual Basic類別檔案。在此目錄的程式碼檔案在執行時會自動進行編譯。 • ShoppingCart類別使用Hashtable集合物件儲存購物車的商品清單,每一個商品是一個CartItem物件。對於儲存在Profile物件的類別來說,類別需要使用<Serializable()>進行宣告,如下所示: <Serializable()> _ Public Class ShoppingCart ……… End Class
15-6-2 將選購的商品存入購物車-說明 • 在ASP.NET程式ProductDetails.aspx顯示產品詳細資料時,DetailsView控制項上方提供TextBox和Button控制項,可以輸入購買數量來將產品加入購物車,如下圖所示:
15-6-2 將選購的商品存入購物車-AddCart()事件處理程序 Sub AddCart(Sender As Object, E As EventArgs) Dim name, price As String Dim label As Label Dim quantity As Integer If Profile.Cart Is Nothing Then Profile.Cart = New ShoppingCart() End If label = ProductDetail.FindControl("itemName") name = label.Text ' 書名 label = ProductDetail.FindControl("itemPrice") price = label.Text ' 書價 If itemQuantity.Text <> "" Then ' 數量 quantity = CInt(itemQuantity.Text) Else quantity = 1 ' 預設值為1 End If Profile.Cart.AddItem(no, name, CDec(price), quantity) Response.Redirect("ShoppingCart.aspx") End Sub
15-6-3 檢視購物車的內容-說明 • 當消費者將選購商品加入購物車後,網路商店提供功能可以檢視購物車內容,也就是執行ShoppingCart.aspx的ASP.NET程式。不只如此,在主選單選【檢視購物車】也一樣可以檢視購物車內容,如下圖所示:
15-6-3 檢視購物車的內容-建立資料繫結 • ASP.NET程式是使用GridView控制項,以表格方式顯示購物車內容,其資料來源是ShoppingCart物件,也就是Profile物件的Cart屬性。 • 程序BindShoppingCart()可以建立GridView控制項CartGrid的資料繫結,如下所示: Sub BindShoppingCart() If Profile.Cart IsNot Nothing Then If Profile.Cart.Count <> 0 Then View.Visible = True CartGrid.DataSource = Profile.Cart.CartItems CartGrid.DataBind() Else ……… End Sub
15-6-4 刪除購物車的商品數量-說明 • 在購物車顯示的選購商品,如果不想購買,只需按前方的【刪除】鈕,就可以刪除選購商品,如下圖所示:
15-6-4 刪除購物車的商品數量- RemoveItem()事件處理程序 • 按F5474書號前的【刪除】鈕,就可以刪除此項目,也就是執行RemoveItem()事件處理程序,如下所示: Sub RemoveItem(Sender As Object, _ E As EventArgs) Dim no As String = _ CartGrid.SelectedDataKey.Value Profile.Cart.RemoveItem(no) BindShoppingCart() End Sub
15-7 網路商店的訂單處理 • 15-7-1 會員管理 • 15-7-2 訂單處理
15-7-1 會員管理-登入網站1 • 當在購物車按【結帳】鈕,如果尚未登入,就會轉址至Login.aspx的登入網站表單,如下圖所示:
15-7-1 會員管理-登入網站2 • 至於為什麼會轉址至Login.aspx,因為CheckOut.aspx程式的Page_Load()程序有檢查使用者是否已經登入網站,如下所示: If Not User.Identity.IsAuthenticated Then Response.Redirect("Login.aspx") End If
15-7-1 會員管理-合併匿名使用者的Profile物件 • 當使用者登入網站再次檢視購物車內容時,其內容是合併匿名使用者的Profile物件所取得的商品項目。 • 簡單的說,匿名使用者和會員都擁有自己專屬的Profile物件,當登入後,我們需要將匿名使用者的Profile物件複製給登入會員。
15-7-2 訂單處理-產生訂單網頁 • 當消費者在購物車上方按下【結帳】鈕後,表示準備下訂單後,也就是執行CheckOut.aspx程式產生訂單網頁,如下圖所示:
15-7-2 訂單處理-事件處理程序CheckOut() • 在CheckOut()事件處理程序首先執行SQL指令在Orders資料表新增一筆訂單記錄,然後在OrderItems資料表新增商品項目的記錄資料,如下所示: Dim enum1 As IEnumerator = Profile.Cart.CartEnums Do While enum1.MoveNext() strSQL = "INSERT INTO OrderItems (OrderNo, " & _ "ItemID, ItemName, ItemPrice, ItemQuantity) " strSQL &= "VALUES ('" & lblNo.Text & "','" strSQL &= enum1.Current.Key & "','" strSQL &= enum1.Current.Value.Title & "'," strSQL &= enum1.Current.Value.Price & "," strSQL &= enum1.Current.Value.Quantity & ")" objCmd = New OleDbCommand(strSQL, objCon) objCmd.ExecuteNonQuery() Loop