You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Prestashop 库存数量更新时调用自定义函数的实现方案咨询

针对PrestaShop 1.7.7.6版本,最简便且无侵入的方案是通过自定义模块挂载原生钩子 actionObjectStockAvailableUpdateAfter 实现,该钩子会在所有库存更新场景触发,可完全覆盖用户下单扣库存、后台手动修改、订单退款回补库存、第三方库存调整等全量场景,不需要修改核心代码。

具体实现步骤

1. 创建自定义模块基础结构

新建模块目录 /modules/stock_webhook,在目录下创建主文件 stock_webhook.php,基础代码如下:

<?php
if (!defined('_PS_VERSION_')) {
    exit;
}

class Stock_webhook extends Module
{
    public function __construct()
    {
        $this->name = 'stock_webhook';
        $this->tab = 'administration';
        $this->version = '1.0.0';
        $this->author = 'your name';
        $this->need_instance = 0;
        $this->bootstrap = true;

        parent::__construct();

        $this->displayName = $this->l('Stock Update Webhook');
        $this->description = $this->l('Send POST request to external API when stock quantity updates');
        $this->ps_versions_compliancy = [
            'min' => '1.7.7.0',
            'max' => _PS_VERSION_
        ];
    }

    // 模块安装逻辑
    public function install()
    {
        return parent::install() && $this->registerHook('actionObjectStockAvailableUpdateAfter');
    }

    // 库存更新钩子回调
    public function hookActionObjectStockAvailableUpdateAfter($params)
    {
        // 库存变动相关数据
        $stockAvailable = $params['object']; // 新的库存对象
        $oldStock = $params['old_object']; // 变动前的库存对象

        $postData = [
            'product_id' => $stockAvailable->id_product,
            'combination_id' => $stockAvailable->id_product_attribute,
            'old_quantity' => $oldStock->quantity,
            'new_quantity' => $stockAvailable->quantity,
            'shop_id' => $stockAvailable->id_shop
        ];

        // 此处写调用外部API的POST请求逻辑即可
        // 示例:使用curl发送请求
        $ch = curl_init('你的外部API地址');
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postData));
        curl_setopt($ch, CURLOPT_HTTPHEADER, [
            'Content-Type: application/json'
        ]);
        $response = curl_exec($ch);
        curl_close($ch);
    }
}

2. 启用模块

代码编写完成后,登录后台到「模块管理」页面,找到该模块点击安装启用即可,后续所有库存变动都会自动触发回调内的自定义逻辑。

注意事项
  • 若需要过滤不需要触发的场景,可在回调函数内通过上下文判断过滤,比如排除特定ID的商品、排除库存变动小于指定阈值的场景等
  • 建议对API请求做异步处理,避免外部API超时阻塞原有业务流程:可以先将库存变动数据存入自定义数据表,再通过定时任务批量发送请求,不影响前台下单、后台操作的响应速度
  • 不要直接修改PrestaShop核心文件实现该功能,避免后续版本升级时自定义代码被覆盖

内容的提问来源于stack exchange,提问作者gorny-dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 19:42:03