商城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. 支付完成后效果

 

相关文章
相关标签/搜索