React Native集成Paytm支付成功后.then(result)代码块不执行问题求助
问题排查与修复方案
1. 修复then回调内的语法问题
你当前startTransaction的then回调中第一行仅定义了匿名箭头函数未执行,虽然不影响后续代码逻辑,但建议修正为直接打印日志:
// 原错误写法 .then((result) => { () => console.log(result); this.props.navigation.navigate("MyDrawerRP"); }) // 修正后 .then((result) => { console.log(result); //AsyncStorage.setItem("is_payment_done", "Y"); this.props.navigation.navigate("MyDrawerRP"); })
2. 修复异步setState的时序问题
setState是异步API,你连续两次调用setState后立刻执行handleTransaction,可能出现state还未更新就传参给Paytm SDK的情况,建议合并setState操作,在回调中触发交易,确保参数正确:
// 原写法 this.setState({ order_id: response[0].data.order_id }); this.setState({ tranxToken: response[0].data.txnToken }); this.handleTransaction(); // 修正后 this.setState({ order_id: response[0].data.order_id, tranxToken: response[0].data.txnToken }, () => this.handleTransaction());
3. 修复回调地址响应格式问题
Paytm SDK要求交易完成后,回调接口必须返回状态码200且响应体为SUCCESS字符串,你当前返回的"[{\"message\":\"success\",\"is_payment_done\":\"Y\"}]"不符合SDK要求,会导致SDK无法识别交易完成状态,不会触发then回调,调整回调接口的返回值即可。
4. 调整SDK参数排查兼容性问题
你当前设置的appInvokeRestricted: true会禁止唤起Paytm客户端,仅走网页支付流程,部分旧版本SDK的网页模式存在回调丢失的问题,可以先改为false测试是否能正常触发回调。如果还是无法触发,建议升级Paytm AllInOneSDK到最新稳定版,官方已修复多个版本的回调不触发问题。
5. 补充错误日志排查
可以在catch块中打印完整错误信息,确认是否是交易过程中抛出异常进入了catch分支而未走到then:
.catch((err) => { console.log("支付异常:", JSON.stringify(err)); Toast.show("Something went wrong"); });
内容的提问来源于stack exchange,提问作者user14877357
相关产品推荐
相关产品推荐

