Magento 1.9 如何在下单后跳转支付网关前执行自定义JavaScript
Magento 单页结账订单跟踪代码注入实现方案
因为你使用的是Magento单页结账功能,我们可以通过监听下单事件、绑定订单创建成功回调的方式实现需求,确保跟踪代码仅在符合触发条件时执行:
实现步骤
- 第一步:在自定义模块或当前主题目录下新建JS混入文件,路径为
view/frontend/web/js/view/payment/default-mixin.js,用来覆写原生下单逻辑 - 第二步:在混入文件中扩展
placeOrder方法,在订单受理成功的回调中插入你的跟踪代码,示例代码如下:
define( [ 'jquery', 'Magento_Checkout/js/model/quote' ], function ($, quote) { 'use strict'; return function (originalComponent) { return originalComponent.extend({ placeOrder: function (data, event) { const self = this; // 调用原生下单逻辑,保留原有校验规则 const placeOrderResult = this._super(data, event); // 仅在订单后台受理成功后执行跟踪逻辑 placeOrderResult.done(function () { // 按业务需求替换为实际的shop_id、订单金额取值逻辑 const shopId = quote.getQuoteId(); const orderValue = quote.totals().grand_total; window.webOrder = { "id": shopId, "sum": orderValue }; // 动态加载第三方跟踪脚本 $.getScript('//serivce_address/before.js'); }); return placeOrderResult; } }); }; } );
- 第三步:在自定义模块或当前主题的
view/frontend/requirejs-config.js中注册上述混入,让Magento加载时自动注入逻辑:
var config = { config: { mixins: { 'Magento_Checkout/js/view/payment/default': { 'Your_Module/js/view/payment/default-mixin': true } } } };
触发条件说明
上述逻辑天然满足你要求的触发前提:
- 用户同意相关协议:Magento原生下单逻辑会优先校验服务协议勾选状态,未勾选时直接阻止下单,不会进入成功回调
- 点击下单按钮:只有用户主动触发下单动作才会调用
placeOrder方法 - 订单被系统受理:
done回调仅在后端返回订单创建成功的响应后触发,订单校验失败、库存不足等异常场景不会执行跟踪代码
注意事项
- 代码中的
Your_Module需要替换为你自定义模块的实际名称 - shop_id、订单金额的取值规则请根据你的业务需求调整,避免传递错误数据
- 若你自定义过下单按钮逻辑,可对应调整事件监听的绑定位置
内容的提问来源于stack exchange,提问作者kathdroid
相关产品推荐
相关产品推荐

