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
相关产品推荐
相关产品推荐

