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()调试。
验证步骤
- 在浏览器开发者工具的
Application标签下查看sessionStorage,确认beforeRedirect返回的数据在跳转前已被存储。 - 支付完成跳转回页面时,查看控制台是否打印
afterRedirect的参数data,确认数据是否正常传递。 - 检查
payment-complete.php是否能正确接收URL中的参数。
内容的提问来源于stack exchange,提问作者Galaxylokka
相关产品推荐
相关产品推荐

