欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。
这个错误 requestPayment:fail [payment微信:-1]General errors 是微信支付 SDK 返回的通用错误,结合你描述的"重装微信后第一次可以支付,后续都失败"的现象,通常不是订单信息重复的问题,而是微信客户端的缓存或授权状态异常导致的。
可能的原因及排查步骤
1. 微信客户端缓存问题(最可能)
微信在首次支付后会缓存一些支付环境信息,如果缓存损坏,会导致后续支付失败。
验证方法:
- 进入微信 → 我 → 设置 → 通用 → 存储空间 → 清理缓存(不要清理聊天记录)
- 或者尝试退出微信账号重新登录(比重装微信更彻底的缓存清理)
2. App 端配置问题
确保你的 uni-app 项目配置正确:
manifest.json 配置检查:
{
"app-plus": {
"distribute": {
"sdkConfigs": {
"payment": {
"weixin": {
"appid": "你的微信开放平台AppID",
"universalLinks": "https://你的域名/universal-links/" // iOS 需要
}
}
}
}
}
}
本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent
注意: 微信 App 支付需要使用微信开放平台的 AppID(不是小程序 AppID),且该 AppID 必须与你的应用包名(Android)/ Bundle ID(iOS)绑定。
3. 订单参数问题
虽然你排除了订单重复,但请检查参数格式:
uni.requestPayment({
provider: 'wxpay',
orderInfo: {
"appid": "wx1234567890abcdef", // 微信开放平台 AppID
"noncestr": "随机字符串",
"package": "Sign=WXPay", // 固定值
"partnerid": "1234567890", // 商户号
"prepayid": "wx1234567890abcdef", // 预支付交易会话ID
"timestamp": 1234567890, // 时间戳(秒)
"sign": "签名" // 签名
},
success: (res) => {
console.log('支付成功', res);
},
fail: (err) => {
console.error('支付失败', err);
}
});
本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent
关键点:
timestamp 必须是秒级时间戳(不是毫秒)
sign 签名必须使用微信支付 API v2 的签名算法(MD5 或 HMAC-SHA256)
- 所有参数名必须全小写(如
noncestr 不是 nonceStr)
4. 微信开放平台配置检查
- 确保在微信开放平台(open.weixin.qq.com)已创建移动应用,并审核通过
- 确保已开通微信支付功能,且商户号与 AppID 已绑定
- 检查 Android 应用的包名和签名是否与开放平台配置一致(签名需使用微信官方签名工具生成)
5. 调试建议
如果上述检查都正常,建议:
- 使用微信官方 Demo 测试:下载微信官方的 Android/iOS SDK Demo,使用相同的参数测试,确认是否为微信客户端问题
- 查看微信日志:在微信支付失败页面,通常会有"查看详情"或日志入口,查看具体错误码
- 联系微信支付技术支持:提供
prepay_id 和错误时间,查询具体失败原因
6. 临时解决方案
如果急需上线,可以考虑:
- 使用 uni-pay 插件(官方推荐的云端统一支付服务),它封装了微信支付,可能规避一些客户端兼容问题:uni-pay 插件
总结
"重装微信后第一次可以,后续失败"这个特征 strongly suggests 微信客户端的本地缓存或授权状态异常。建议先尝试清理微信缓存或退出账号重新登录,如果问题解决,说明是微信客户端的 bug,需要用户侧操作或等待微信修复。如果清理缓存无效,再重点检查 App 的签名配置和订单参数格式。