商城8

問題

TP內部的錯誤機制

昨天在TP裏面,對於若是memcache沒有啓動的狀況下,不會進行報錯。php

 

1.若是memcache沒有啓動進行connet的時候報的是一個noticewarning級別的錯誤。這種提示信息在TP裏面是不會自動報出來(TP裏面使用本身定義的錯誤處理進行處理的)html

 

 

效果: TP裏面開啓show_page_trace能夠查看mysql

 

 

在沒喲使用TP以前,若是鏈接不成功,則提示什麼信息?ajax

 

 

若是咱們要捕獲這個提示信息,則該如何處理?redis

答:用用戶本身編寫錯誤處理函數進行處理。(意思就是咱們本身寫一個處理函數,來捕獲notice級別的錯誤)sql

http://blog.csdn.net/e421083458/article/details/8157154數據庫

 

 

效果瀏覽器

 

 

 

TP 內部的錯誤處理機制服務器

 

 

 

昨天代碼修改

 

 

最終處理代碼微信

 

 

 

QQ互聯

QQ互聯這種技術通常也叫做第三方登陸。

好處:減小用戶的記憶成本(一個帳號能夠通用的登陸不少系統)。

弊端:用戶是受限於接口提供方(騰訊的限制、百度接口)因此通常的第三方接口在必定時間以後,都是把用戶想辦法拉回來(用戶本身的會員系統,作個活動,送東西。例如 招商銀行,最早是 微信公招號可使用,可是有些一些功能,必須去APP可使用。)

環境準備

  1. 去騰訊開發者中心進行實名認證

網站:http://open.qq.com/

 

 

 

  1. 去騰訊的QQ互聯申請應用(AKSK

網站:https://connect.qq.com/manage.html

 

 

 

應用建立

1. 建立一個應用

 

 

 

2. 信息填寫

 

 

回調地址傳遞

注意:若是審覈經過,則騰訊會提供用戶一個AK和一個SK

 

 

須要注意:若是申請沒有經過,則只能使用當前登陸的QQ號做爲測試帳號使用。

APP ID101417330

APP Keyb41ebc1f9f00675309b28cbbc7054397

 

下載SDK開發包

網站:http://wiki.connect.qq.com/sdk%E4%B8%8B%E8%BD%BD

 

 

 

 

QQ互聯集成到TP項目

QQ 登陸的業務邏輯

  1. QQ用戶點擊QQ登陸的圖標
  2. 跳轉到QQ登陸頁面(騰訊提供的頁面)
  3. QQ用戶成功登陸以後,騰訊那邊會把用戶的信息經過咱們建立應用時候定義的回調地址傳遞過來,將用戶的openid保存到session裏面
  4. 咱們網站根據openid作本身的業務

a) 根據openid去會員表裏面查看當前的openid是否存在和本身網站會員的綁定信息,若是存在,則直接將用戶的信息保存在session裏面,則表明登陸

b) 根據openid查不到用戶的信息,則沒有綁定,提示用戶綁定以後,只要綁定一次,之後都不用在綁定,之後可使用QQ能夠進行登陸(接觸全部的業務都是要用戶本身的綁定)

 

QQ 登陸實操

1. QQ開發包複製到網站根目錄的qq文件夾下

 

 

 

2. config中去配置qq互聯的idkey

 

 

 

3. 將項目代碼上傳到服務器上(線上服務器)(域名: http://shop.sinsea.cn

 

 

 

  1. login.html頁面,爲QQ圖標綁定點擊事件

 

 

定義點擊事件的回調函數

 

 

效果

 

 

 

 

  1. qq_callback.php文件,定義一個跳轉地址,完成QQ登陸業務處理

 

 

 

  1. Home模塊的MemberController.class.php控制器文件定義一個qqcheck方法,完成QQ業務處理

 

 

 

6. Home模塊的MemberController.class.php控制器文件定義一個bingding方法【註冊過的會員】

 

 

 

 

  1. 增長一個bangding.html視圖頁面

 

 

 

效果

 

 


綁定界面

 

 

 

 

額外信息

1. 騰訊在用戶成功登陸後的回跳信息

 

 

2. QQ用戶成功登陸後的回跳地址

 

 

 

 

購物車

單選信息展現

 

 

 

  1. Home模塊的IndexController.class.php控制器的detail方法裏面獲取當前商品的單選屬性,並把相同的單選屬性放置在一塊兒【構建連表sql語句】

 

 

執行$rs = array();
foreach ($radioData as $k=>$v){
    $rs[$v['attr_id']][] = $v;
}

效果:

 

 

 

  1. detail.html頁面顯示對應的單選信息

 

 

效果

 

 

 

單選信息獲取的原生sql操做:

 

 

mysql> select a.*,b.attr_name from sh_goods_attr a left join sh_attribute b on a.attr_id = b.attr_id where a.goods_id = 15 and b.attr_type = 0;

獲取商品id15的單選信息

 

購物車簡介

考慮以下幾個問題:

  1. 用戶購買的數據存在哪裏?(用什麼存儲介質)(mysql memcache redis cookie session

答:注意:

實現購物車的時候應該是有區分對待:

  1. 登陸(用戶id)通常是單獨的設計一張購物車的表,表裏面保存用戶的購買信息

 

  1. 沒有登陸(沒有用戶id)通常是將用戶的購買信息保存在cookie裏面,須要注意,若是用戶在沒有登陸的狀況下商品信息加入購物車後,在用戶登陸以後咱們應該把購物車裏面的新轉存到購物車表,同時把cookie裏面的購物車的數據要清空

 

參考一下京東(登陸和沒登陸均可以加入購物車)、淘寶(必須登陸後才能夠加入購物車)。

比較:對於淘寶來講,是登陸後才能夠加入購物車(好處: 只要加入購物車的數據到時候能夠在什麼時候何地均可以查看 弊端: 用戶體驗很差)對於京東(好處: 用戶體驗好 弊端: 若是更換瀏覽器,則購物車的數據就沒有了)

 

  1. 到底要存在哪些信息?(商品id  商品屬性id 商品數量 用戶ID

答:

通常若是是登陸了, 則須要保存 商品id、商品屬性id、商品數量、用戶id

若是是沒有登陸,則須要保存 商品id、商品屬性id、商品數量

 

問題:對於商品的價格是千萬不能保存(由於價格是有可能會變,價格須要去數據庫實時的獲取)

 

  1. 以什麼樣的數據結構進行存儲?

答:

數據表:

id

goods_id

goods_attr_id

goods_number

user_id

1

15

18,23

123

2

3

16

45

45

2

 

 

 

 

cookie:因爲咱們要保存的信息偏多(不是單獨的字符串)

數據結構:

array(

'goods_id-goods_attr_id' => goods_number,

'goods_id-goods_attr_id' => goods_number

 

)

表明用戶購買了兩類商品

array(

'15-18,23' => 123,

'16-45' => 45

)

存儲:

setcookie('cart', '序列化的字符串', time, '/');

 

加入購物車

  1. detail.html頁面爲加入購物車增長提交地址

 

 

效果

 

 

 

  1. Home模塊的的CartController.class.php控制器文件增長一個addToCart方法,完成購物車添加功能

因爲單選屬性是存在不肯定性的(有多是多個,有可能沒有,取決於後臺添加的商品類型下的屬性)unset()

 

 

 

  1. Home模塊的CartModel.class.php模型文件增長一個addToCart方法將用戶購買的商品加入購物車

 

 

 

 

 

購物車展現

1. Home模塊的CartController.class.php控制器文件增長一個cartList方法,展現購物車數據

 

 

 

2. 增長一個cartList.html視圖頁面,展現購物車數據

 

 

效果

 

 

 

  1. Home模塊的CartModel.class.php模型文件增長一個cartList方法獲取購物車數據

 

 

 

 

單選屬性獲取原生SQL

 

 

mysql> select group_concat( concat(b.attr_name,':',a.goods_attr_values) separator '<br/>' ) as ga from sh_goods_attr a left join sh_attribute b on a.attr_id = b.attr_id where a.id in (17,21);

 

 

ajax更新購物車數據

 

 

  1. cartList.html購物車展現頁面定義一個全局變量保存ajax更新地址

 

 

  1. cartList.html頁面,在展現購物車數據的時候,在tr定義goods_idgoods_attr_id方便在ajax更新的時候獲取

 

 

 

  1. cart1.js完成ajax更新購物車的操做

 

 

 

  1. Home模塊的CartController.class.php控制器文件增長一個ajaxUpdate方法,完成ajax更新操做

 

 

 

購物車轉存

在用戶成功登陸後,須要將沒有登陸前的購物車的信息轉存到數據庫的購物車表裏面

 

  1. Home模塊的CartModel.class.php模型文件增長一個moveCookiToDb方法,完成cookie購物數據的轉存操做

 

 

  1. Home模塊的MemberController.class.php控制器文件的login方法裏面,在用戶成功登陸後,完成轉存操做

 

 

 

結算中心

 

 

 在用戶點擊結算中心的時候,須要判斷用戶是否登陸。由於結算中心是必須登陸以後才能夠訪問,而且,若是用戶沒有登陸,在跳轉到登陸頁面進行進行成功登陸後,還須要跳到結算中心。

 

1. cartList.html頁面爲定義結算提交地址

 

 

 

  1. Home模塊建立一個OrderController.class.php控制器文件,增長一個order1方法

 

 

 

  1. Home模塊的MemberController.class.php控制器文件的login方法裏面完成回跳處理

 

 

 

 

 

訂單中心

  1. 訂單的信息如何保存?

答:設計訂單表來保存這次訂單信息。

 

  1. 保存完畢後,須要進行支付(前往支付寶付款)

答:集成支付寶

 

表設計

完成訂單功能通常須要設計兩張表

第一張表:訂單信息表 保存這次的訂單的詳情(訂單id 下單人、下單收貨地址、手機號碼、郵編、總價、....

第二張表:訂單商品表 保存這次訂單的商品的詳情信息(訂單id 商品ID、商品價格、商品的庫存....

 

訂單信息表

id 主鍵

order_id 訂單號 注意: 通常訂單號是這樣生成,date('YmdHis'). uniqid()

user_id 表明是哪一個用戶下的訂單

shr 收貨人姓名(人看)

address 收貨地址

phone 手機號碼

zcode 郵編

total_price 總價

add_time 下單時間

pay_status 支付狀態,默認是0表明沒有支付,1表明已經支付(用戶使用支付寶付款,咱們要修改其狀態)

delivery_status 表明是投遞狀態 是否返回 默認是0表明沒有發貨,1表明已經發貨,2表明已經收貨

trade_number 表明是使用支付寶付款後,支付寶那邊傳遞過來的一個交易訂單號(支付寶那邊進行一次交易),到時候若是用戶須要退款,則可使用該訂單號進行退款。

 

 

訂單商品表

id 主鍵id

order_id 所屬訂單

goods_id 商品的主鍵

goods_attr_id 表明是商品屬性值主鍵id

good_number 商品數量

goods_price 商品單價

.....

 

 

 

 

create table tableName like tableName 快速複製一個表結構

 

 

 

下訂單

  1. order1.html頁面爲提交訂單綁定點擊事件,完成訂單提交

 

 

事件綁定

 

 

 

效果

 

 

 

  1. Home模塊的OrderController.class.php控制器文件的order2方法裏面完成訂單處理
  2. 收貨信息監測

 

 

  1. 購物車檢測

 

 

  1. 庫存檢測

 

 

  1. 生成訂單

 

 

 

 

效果

 

 


支付寶

簡介

目前支付寶只支持企業(我的已經不能在使用了)之前存在一個叫作擔保交易。如今統一都是即時到帳(買家買完東西,付款後,支付寶會立馬把錢轉給商家)

 

文檔:https://cshall.alipay.com/enterprise/knowledgeDetail.htm?knowledgeId=201602148574

在支付寶提交營業許可證以後,在經過審覈以後,會商家一個帳號和一個密鑰。

 

 

 

 

下載SDK

 

 

項目集成

  1. 將支付寶接口放置在Vendor目錄下

 

 

2. Home模塊的Model目錄建立一個PayModel.class.php模型文件

 

 

  1. 將支付寶的配置信息加入config.php文件

 

 

4. Home模塊裏面的OrderController.class.php控制器文件的order2方法裏面完成支付寶的集成

 

 

 

 

 

 

  1. Home模塊的CartModel.class.php增長一個clearData方法,完成購物車清空

 

 

 

6. Home模塊裏面的OrderController.class.php控制器文件的定義order3order4方法完成同步和異步的通知處理

 

 

 

  1. 支付完成後效果

 

相關文章
相關標籤/搜索