TP6商城开发

本文详细介绍了电商系统的核心模块设计,包括商城登录、购物车、订单管理和支付流程。购物车使用Redis哈希存储,订单模块涉及两个表,实现了延迟队列处理订单失效。支付模块通过SDK调用API,确保订单安全。同时,文章涵盖了无限级分类、商品SKU管理等关键功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

商城登录

写两个base控制器。一页用来购物车支付个人信息 另一个用来非必要登录继承
token传值:键=>token 值=>用户id 用户名

分类管理

无限极分类数组循环

public static function getTree($data)
    {
        $items = [];
        foreach ($data as $v) {
            $items[$v['category_id']] = $v;
        }
        $tree = [];
        foreach ($items as $id => $item) {
            if (isset($items[$item['pid']])) {
                $items[$item['pid']]['list'][] = &$items[$id];
            } else {
                $tree[] = &$items[$id];
            }
        }
        return $tree;
 
    }
商品添加sku

建表(4个):属性表(存放商品属性:颜色/尺码/大小…)属性值(属性id 属性值)sku(商品id 属值表ids 原价 售价 库存 状态)商品表()
前端传递详情页两种模式:传递sku表id(推荐)传递商品表id sku_id

购物车:

用redis的哈希来存储数据。hset() 格式(’键【前缀字符+用户id】‘=>[‘键(skuid)’=>值(商品个数、title、img、时间、goodsid)])
获取数据:hMget() 用skuid获取现在的单价、总价…
删除购物车:hdel()
获取购物车条数:hlen()

订单模块:

分两个表一个是订单主表(id、user_id、order_id、total_price、logistics(物流名称,比如顺丰快递)、logistics_order(物流订单号)、message(留言信息)、邮寄地址()、cerate_time(订单创建时间)、update_time()、pay_time(支付时间)、consignment_time(发货时间)、end_time(交易结束时间)、close_time(关闭订单时间)、status())
第二个表:(id、order_id、sku_id、num、price、goods_id、title、image)
购物车生成订单。一定要做好判断 如:库存空 商品不存在 只需要传递sku_ids 数量 地址id (减库存/删除购物车数据/新增order/新增order_goods)
订单失效的实现(延迟队列):
1.生成订单时添加队列参数:有序集合命令zadd(keyname,time()+20*60,订单号)
2.tp6自带的:php think make:command appindexCommand second 生成自定义指令
3.worker定时请求命令。循环取出键值最大的第一条判断是否超时。超时修改goos 和sku_goods 的商品数量$result = Cache::store(‘redis’)->zRangeByScore(“order_status”, 0, time(), [‘limit’ => [0, 1]]);

支付模块:

可以用微服务架构来实现 封装成sdk
1.下单调用支付Api 并传递 appid(例如:‘pipi_shop’)丶业务订单号丶商品id丶价格丶支付类型丶token丶time(用来校验token是否过期)
2.时间校验(传过来的time+设置的秒 < time() 就过期) token校验(安全防护:1.将token时间调短 2.设置同一token只能用一次)
3.用redis哈希类型存储订单基本信息 appid:[‘订单号’:{状态丶token…}]
4.并发起支付
队列:用worker定时读取redis内容。如果支付状态成功 修改mysql订单表数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值