• bbs1org
    积分商城
    ID points_mall版本 2.8.5插件制作者 bbs1org免费3236 行 / 244.5 KBHook / 路由 / 后台页
    积分商城与论坛深度结合:商品发布到论坛主题,用户可用论坛积分兑换,每笔订单对应一件主题商品,支持收货地址、虚拟商品自动发货与订单管理。
    app/plugins/points_mall/plugin.php
    开发日志最新 10 条

    个人独立维护项目。

    • bbs1org
      bbs1org
      版本 2.8.5 07791b07453c 更新:用新hook显示主楼内容release
    • bbs1org
      bbs1org
      版本 2.8.4 9c5cd94a4dd3 更新:修复主题页不显示操作条的bug
    • bbs1org
      bbs1org
      版本 2.8.3 88bb6d6fb523 更新:优化细节
    • bbs1org
      bbs1org
      版本 2.8.0 3be666e64129 更新:优化布局
    • bbs1org
      bbs1org
      版本 2.7.2 c6e863571076 更新:优化UI细节
    • bbs1org
      bbs1org
      版本 2.7.2 81f166c4f20b 更新:添加发布商品的信任等级门控校验
    • bbs1org
      bbs1org
      版本 2.7.1 05ff5065a428 更新:商家押金支持关闭;虚拟商品发货后支持自动收货
    • bbs1org
      bbs1org
      版本 2.5.7 24247223afa7 更新:修正通知格式或者积分变动不进积分规则的问题
    • bbs1org
      bbs1org
      版本 2.5.6 2293557ba42d 更新:插件脚本中断报错
    • bbs1org
      bbs1org
      版本 2.5.5 723258421f4b 更新:预览图片
    主楼
  • 质量报告

    插件质量报告

    插件:points_mall

    Hook功能范围循环使用频率文件读写修改系统表读写系统表读写自己的表
    sidebar.feature_links首页/侧栏快捷功能否5----
    top.menu_links顶部版块导航/移动端版块列表,同一请求只执行一次(展示位置:顶部菜单)否5----
    topic.after_render首页/版块列表/主题查看逐条渲染是5--app_users 修正❗️读 plugin_points_mall_products 修正❗️
    topic.index_data.loaded首页/版块/用户主题列表查询后否5---读 plugin_points_mall_products
    user.menu_links个人卡片/移动端我的菜单(展示位置:个人卡片)否4----
    topic.after_save主题保存后回调内3读写app_usersapp_users写 plugin_points_mall_products, plugin_points_mall_deposits, plugin_points_mall_auto_delivery_shelves 修正❗️
    topic.before_save主题发布/编辑表单提交否3--app_users读 plugin_points_mall_products, plugin_points_mall_deposits
    topic.form_extra主题发布/编辑表单否2---读 plugin_points_mall_products, plugin_points_mall_auto_delivery_shelves
    topic.content_html非系统hook否1--app_users读 plugin_points_mall_products

    颜色说明:黄色表示有数据读写,红色表示 Hook 在系统循环中执行,浅蓝色表示有文件写入。“列表跳过”表示回调在列表路径会提前返回,“回调内”表示操作位于回调自身或其帮助函数的循环体内。“文件批处理”表示逐个处理用户一次提交的文件,属于必要操作,不标记修正。只有操作实际处于需要优化的循环路径时,才会标记“修正❗️”。

    数据字典

    plugin_points_mall_products

    字段类型可空默认值约束
    idid否-主键、自增
    forum_iduint否0-
    topic_iduint否0-
    user_iduint否0-
    namestring否--
    summarystring否''-
    detailtext否--
    priceuint否0-
    original_priceuint否0-
    discount_enduint否0-
    stockuint否0-
    cover_hashstring否''-
    cover_extstring否''-
    cover_thumb_hashstring否''-
    cover_thumb_extstring否''-
    statusINTEGER否1-
    virtual_deliveryINTEGER否0-
    auto_deliveryINTEGER否0-
    salesuint否0-
    created_atuint否--
    updated_atuint否--

    plugin_points_mall_addresses

    字段类型可空默认值约束
    idid否-主键、自增
    user_iduint否--
    receiverstring否--
    phonestring否''-
    addressstring否--
    is_defaultINTEGER否0-
    created_atuint否--
    updated_atuint否--

    plugin_points_mall_orders

    字段类型可空默认值约束
    idid否-主键、自增
    order_nokey否-唯一
    user_iduint否--
    total_priceuint否0-
    deposit_pointsuint否0-
    financial_statuskey否'held'-
    statuskey否'pending'-
    virtual_deliveryINTEGER否0-
    receiverstring否''-
    phonestring否''-
    addressstring否''-
    notestring否''-
    created_atuint否--
    paid_atuint否0-
    shipped_atuint否0-
    finished_atuint否0-
    cancel_reasonstring否''-

    plugin_points_mall_order_items

    字段类型可空默认值约束
    idid否-主键、自增
    order_iduint否-唯一
    product_iduint否--
    seller_iduint否0-
    product_namestring否--
    priceuint否0-
    cover_hashstring否''-
    cover_extstring否''-
    fulfillment_statuskey否'pending'-
    fulfillment_notetext否--
    fulfilled_atuint否0-

    plugin_points_mall_deposits

    字段类型可空默认值约束
    idid否-主键、自增
    product_iduint否--
    user_iduint否--
    priceuint否0-
    initial_stockuint否0-
    total_pointsuint否0-
    statuskey否'active'-
    created_atuint否--
    refunded_atuint否0-

    plugin_points_mall_auto_delivery_shelves

    字段类型可空默认值约束
    idid否-主键、自增
    product_iduint否--
    contenttext否--
    order_iduint否0-
    created_atuint否--
    delivered_atuint否0-
    #1
  • bbs1org

    版本 2.3.0 更新:
    积分商城功能列表:

    • 商品与论坛主题深度关联,发布主题时可直接设为商品帖。
    • 支持商品摘要、封面图与缩略图、兑换价格、库存、原价和限时折扣倒计时。
    • 支持实物商品与虚拟商品;实物商品可维护收货地址,虚拟商品无需地址。
    • 用户使用论坛积分兑换商品,支持填写购买数量和单笔兑换上限。
    • 商品发布按单价与库存冻结押金;下架、取消商品帖或售罄后可处理剩余押金退回。
    • 订单包含待兑换、待发货、待收货、异议处理、已完成、已取消等状态。
    • 支持买家取消订单、确认收货、修改收货地址和提交订单异议。
    • 取消订单自动恢复库存并退回积分;订单完成后自动向商品发布者结算积分。
    • 支持发货后自动确认收货,并向买卖双方发送订单状态通知。
    • 提供我的商品、卖家订单、我的订单、地址簿和订单详情页面。
    • 后台可配置商城开关、发布/购买用户组、允许发布的版块、自动确认收货天数及单笔兑换上限。
    • 后台支持商品筛选、商品下架、订单搜索、发货、退款、异议处理和订单状态调整。
    #2
  • 123456789

    这个有点牛逼吧🙄

    #3
  • 栀子花开

    授权码怎么弄嘞

    #4
  • bbs1org

    https://bbs1.org/topic/977

    #5
  • 栀子花开
    1. 编辑已有商品时押金调整金额计算错误,导致商家积分被错误扣减(资金损失)
    位置:plugin.php:1178-1187(配合 points_mall_deposit_refundable 定义于 315-320)
    
    类型:CWE-682 错误计算 / 业务逻辑漏洞
    
    数据流:
    
    php
    复制
    $new_deposit = $price * $stock;
    if ($deposit) {
        $delta = $new_deposit - points_mall_deposit_refundable($existing, $deposit);   // ← 错在这里
        if ($delta !== 0 && !points_mall_change_points($seller_id, -$delta, ...)) throw ...;
        q('UPDATE ... SET price=?, initial_stock=?, total_points=? WHERE id=?',
          [$price, $existing['sales'] + $stock, $new_deposit, $deposit['id']]);
    }
    points_mall_deposit_refundable 返回的是「当前剩余可退押金」= min((initial_stock - sales) × price, total_points),它已经扣除了已售出部分。
    
    而正确的对账基数应是「商家当前实际被冻结的总额」= total_points。正确公式应为:
    
    php
    复制
    $delta = $new_deposit - (int)$deposit['total_points'];
    触发条件:商品发布后被兑换(sales > 0),商家再编辑该商品(改价/改库存/改摘要等)。
    
    复现(概念 PoC):
    
    商家发布商品:price=100, stock=10 → 冻结押金 total_points=1000,商家被扣 1000。
    买家兑换 5 件 → sales=5。
    商家编辑商品:price=90, stock=5 → new_deposit=450。
    错误代码:refundable=(10-5)×100=500 → delta=450-500=-50 → 只退 50。
    正确行为:delta=450-1000=-550 → 应退 550。
    差异:商家被少退 500。
    之后下架退押金:refundable=(10-5)×90=450 → 再退 450。
    商家累计收回 50+450=500,但实际付出 1000 → 净损失 500(正好等于已售 5 件的收入 500,等于收入被吃光)。
    影响:只要对已产生销量的商品执行一次编辑,商家已结算的销售收入会被等额吞掉。由于 refundable ≤ total_points 恒成立,此偏差方向固定为「多扣/少退」,是稳定可复现的资金损失 bug(商家侧)。
    
    修复建议:
    
    php
    复制
    $delta = $new_deposit - (int)$deposit['total_points'];
    #6
  • bbs1org

    这玩意复杂,挺累ai的

    #7
  • 栀子花开

    确实 小型的交易平台了还要兼容论坛等

    #9
  • bbs1org

    版本 2.3.3 更新:
    优化界面

    #8
  • one

    干嘛用的?

    #10
  • bbs1org

    版本 2.3.5 更新:
    后台“订单管理”列表移除“发货”按钮,仅保留详情入口。
    商家只能在订单详情页更新履约状态。
    兑换码或交付说明改为必填,前端与服务端都会校验。
    旧的列表发货请求会被拒绝并提示到订单详情填写说明。

    #11
  • bbs1org

    版本 2.3.7 更新:
    修复会将发布者购买栏从固定比例网格改为可换行的弹性布局:空间足够时并排,空间不足时“订单管理”自然换到下一行;兑换表单自身也允许换行,避免任何控件相互覆盖

    #12
  • bbs1org

    版本 2.3.9 更新:
    优化布局

    #13
  • Moo

    为什么不能直接在线升级???用之前的码下载也下不了了🙄

    #15
  • bbs1org

    之前的码是一次性的😁

    #16
  • Moo

    行。这就是不让升级是吧,哈哈😂

    #17
  • bbs1org

    可用100次 PMR307F74612F219AB7688A9888

    #19
  • Maser

    来慢了,等下一波

    #14
  • bbs1org

    版本 2.3.11 更新:
    已修复押金调整金额错误。
    编辑已有商品时,押金调整现在以 deposit.total_points 作为实际冻结总额计算,不再错误使用已排除售出数量的“可退押金”。
    同时修复了提交前余额校验:扩容商品时不会再按可退余额错误要求商家补足已售部分的积分。
    下架、退押金场景仍保留按剩余可退金额计算。

    #18
  • Moo

    哈哈,这更新速度。。牛了

    #20
  • bbs1org

    版本 2.3.12 更新:
    更新版本

    #21
  • Moo

    你这是判断的是浏览器窗口的宽度???

    paste-20260827-210821.png
    paste-20260827-210849.png

    应该是判断的是这个吧???这样对于后面折腾的站长事半功倍。

    paste-20260827-211020.png

    #22
  • bbs1org

    太细了。后续再优化这个极个别情况

    #23
  • Moo

    我来优化,哈哈。。。

    #24
  • bbs1org

    这个插件有点大,先不对外开放维护

    #25
  • bbs1org

    版本 2.4.2 更新:
    虚拟商品开启“自动发货”后,商家在货架中每行填写一份内容;买家每次购买一件,系统会原子领取一行内容,写入订单的履约备注,将订单和履约状态改为“已发货”,并向买家发送订单发货通知。
    当前版本为 2.4.2。首次升级需在后台禁用再启用插件一次,以创建货架表并执行表结构更新。

    #26
  • bbs1org

    版本 2.4.3 更新:
    订单明细创建bug

    #27
  • Maser

    积分商城还可以更进一步,添加其它货币,然后这个只能充值,那完全就是一个商城了,也是发卡商城

    #28
  • Maser

    2536.jpg
    手机端看着没对齐,可以并排2个

    最后由 Maser 编辑于 2026-08-27 23:22
    #29
  • dasheyang

    是!再配个商家展示页就好了

    #30
  • ahfanxin

    授权码库存没了,再上点啊

    #31
  • bbs1org

    版本 2.4.7 更新:
    优化界面

    #32
  • bbs1org

    版本 2.4.10 更新:
    优化界面

    #33
  • bbs1org

    版本 2.4.12 更新:
    优化UI

    #34
  • 蓝太阳

    还有这个不协调吧
    paste-20260828-112445.png

    #35
  • bbs1org

    修正

    #36
  • bbs1org

    版本 2.5.4 更新:
    调整UI布局

    #37
  • bbs1org

    版本 2.5.5 更新:
    更新UI

    #38
  • 123456789

    bug:
    自动停用原因
    2026-08-28 14:59:42 PDOException: SQLSTATE[HY000]: General error: 1 no such column: auto_delivery (index.php:285)
    @bbs1org

    #39
  • bbs1org

    卸载重新安装

    #40
  • 123456789

    可以了👍

    #41
  • bbs1org

    版本 2.5.5 更新:
    预览图片

    #42
  • bbs1org

    版本 2.5.6 更新:
    插件脚本中断报错

    #43
  • webmaster

    授权码是什么?

    #44
  • bbs1org

    https://bbs1.org/topic/977

    #45
  • bbs1org

    版本 2.5.7 更新:
    修正通知格式或者积分变动不进积分规则的问题

    #46
  • Maser

    商城自动发货只能一行一条码,如果都是发的同一个码或者同一个链接,只能复制多份。另外发布商品为什么一定需要押金?

    #47
  • bbs1org

    多复制一下不麻烦。一个订单对应一个押金,完成收货,自动退回,作为约束

    #48
  • bbs1org

    版本 2.7.1 更新:
    商家押金支持关闭;虚拟商品发货后支持自动收货

    #49
  • bbs1org

    版本 2.7.2 更新:
    添加发布商品的信任等级门控校验

    #50
  • elm

    希望可以增加两个功能

    1. 用户可以保存自己的listing,方便重复上架,也节省论坛资源。
    2. 一个listing里面,可以选择不同的商品,其实就是增加属性,比如鞋子就是尺寸大小颜色,如果是大模型的话就是模型名称啥的。
    #51
  • bbs1org

    没明白,让ai仔细描述下

    #52
  • elm
    1. 作为商品页发布过的信息,可以选择保存下来。下一次发布的时候,可以直接选择这个商品并且还可以修改,然后再发布。
    2. 一个商品页面,不要只有一个产品一个货号,各样自行增加不同的属性,然后客户就可以选择不同的产品,在一个商品详情页里面。
    #53
  • bbs1org

    ok

    #54
  • bbs1org

    版本 2.7.2 更新:
    优化UI细节

    #55
  • karnoo

    👏

    #56
  • huaxiaoji

    @bbs1org 老大 刚买的激活码不能用呀

    #57
  • bbs1org

    版本 2.8.0 更新:
    优化页面布局

    #58
  • bbs1org

    版本 2.8.0 更新:
    优化布局

    #59
  • bbs1org

    版本 2.8.3 更新:
    优化细节

    #60

发表回复

登录后回复