uni-app uni-pay 支付结果通知处理参数bug

uni-app uni-pay 支付结果通知处理参数bug

示例代码:

try { verifyRes = await unipayIns.verifyPaymentNotify(event); console.log(“1. 签名验证成功,解密数据:”, JSON.stringify(verifyRes)); } catch (e) { console.error(‘签名校验失败:’, e.message); return { code: ‘FAIL’, message: ‘签名校验失败’ }; }


## 操作步骤:


try {
verifyRes = await unipayIns.verifyPaymentNotify(event);
console.log("1. 签名验证成功,解密数据:", JSON.stringify(verifyRes));
} catch (e) {
console.error('签名校验失败:', e.message);
return { code: 'FAIL', message: '签名校验失败' };
}

预期结果:

“returnCode”:“SUCCESS.”


## 实际结果:


"tradeState":"SUCCESS."

bug描述:

uni-pay官方文档这里返回值,returnCode返回SUCCESS,实际返回为"tradeState":“SUCCESS.”


![Image](https://www.itying.com/uniimg.php?url=https://img-cdn-tc.dcloud.net.cn/uploads/questions/20260103/52b78441fdd61108f80988933b26c497.png)

更多关于uni-app uni-pay 支付结果通知处理参数bug的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

文档已调整

更多关于uni-app uni-pay 支付结果通知处理参数bug的实战教程也可以访问 https://www.itying.com/category-93-b0.html


根据你提供的代码和截图,这是一个明确的参数命名不一致问题。

uni-pay 的支付结果通知验证中,verifyPaymentNotify 方法返回的对象结构与你预期的文档描述存在差异。

问题核心: 你期望的返回字段是 returnCode,但实际返回的字段是 tradeState。两者都用于表示交易状态,且值都为 "SUCCESS",但字段名不同。

当前情况分析:

  1. 你的代码逻辑是正确的,签名验证和解密已成功。
  2. 控制台打印的 verifyRes 对象中,表示支付成功的键名是 tradeState,而不是文档中可能提到的 returnCode
  3. 这通常是 SDK 内部实现或文档更新不同步导致的,tradeState 更符合微信/支付宝等支付平台回调的实际数据字段名。

解决方案: 在判断支付成功与否时,请使用实际返回的 tradeState 字段。

修改你的业务逻辑判断代码,示例如下:

if (verifyRes.tradeState === 'SUCCESS') {
    // 处理支付成功的业务逻辑,例如更新订单状态
    console.log('支付成功');
} else {
    // 处理支付失败或未支付
    console.log('支付未成功', verifyRes.tradeState);
}
回到顶部