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

Mastercard支付网关AfterRedirect回调失效,无法获取传递数据求助

Mastercard支付网关afterRedirect回调失效及数据传递解决方案

核心问题分析

你的代码里没有在Checkout.configure中注册beforeRedirect和afterRedirect回调,这是导致回调不生效的直接原因。另外,全局变量resultIndicator在页面跳转后会丢失,无法用于后续校验。

分步解决方案

1. 正确配置Checkout回调

必须将beforeRedirect和afterRedirect作为参数传入Checkout.configure,Mastercard Hosted Checkout才会触发这两个回调:

Checkout.configure({
    session: {
        id: sessionId
    },
    beforeRedirect: function() {
        return {
            successIndicator: successIndicator,
            orderId: orderId,
            sessionId: sessionId,
            sessionVersion: sessionVersion,
            merchantId: merchantId
        };
    },
    afterRedirect: function(data) {
        // 从sessionStorage读取之前存储的resultIndicator
        const savedResultIndicator = sessionStorage.getItem('resultIndicator');
        
        if (savedResultIndicator) {
            const result = (savedResultIndicator === data.successIndicator) ? "SUCCESS" : "ERROR";
            window.location.href = `payment-complete.php/${data.orderId}/${result}`;
        } else {
            // 按需保存数据到sessionStorage供后续页面使用
            sessionStorage.setItem('successIndicator', data.successIndicator);
            sessionStorage.setItem('orderId', data.orderId);
            sessionStorage.setItem('sessionId', data.sessionId);
            
            window.location.href = `payment-complete.php/${data.orderId}/${data.successIndicator}/${data.sessionId}`;
        }
    },
    completeCallback: function(response) {
        console.log("completeCallback response:", response);
        // 将resultIndicator存入sessionStorage,避免页面跳转后丢失
        sessionStorage.setItem('resultIndicator', response);
        
        const result = (response === successIndicator) ? "SUCCESS" : "ERROR";
        window.location.href = `payment-complete.php/${orderId}/${result}`;
    }
});

2. 解决数据持久化问题

  • 全局变量在页面跳转后会被清空,改用sessionStorage存储需要跨页面保留的数据(如resultIndicator),它会在同会话的页面间保持有效。
  • beforeRedirect返回的数据会被Mastercard网关自动存入sessionStorage,afterRedirect触发时会自动将这些数据作为参数传入,无需手动存储。

3. 额外注意事项

  • 确保页面与Mastercard支付网关的跳转符合同源策略,跨域场景下Mastercard Hosted Checkout会通过安全机制传递数据,但必须正确配置回调才能接收。
  • 打开浏览器控制台排查是否有报错(如Checkout未定义、权限限制),确认脚本加载顺序无误。
  • 避免在afterRedirect中使用alert()等阻塞式弹窗,可能干扰后续跳转逻辑,建议用console.log()调试。

验证步骤

  1. 在浏览器开发者工具的Application标签下查看sessionStorage,确认beforeRedirect返回的数据在跳转前已被存储。
  2. 支付完成跳转回页面时,查看控制台是否打印afterRedirect的参数data,确认数据是否正常传递。
  3. 检查payment-complete.php是否能正确接收URL中的参数。

内容的提问来源于stack exchange,提问作者Galaxylokka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 12:57:39