uni-app微信支付必须前后端协同:前端用uni.requestPayment调起,服务端需基于v3接口生成prepayid及正确签名,manifest.json须严格配置wxpay插件与移动应用AppID,真机调试须用自定义基座,H5端则依赖JS-SDK。

uni-app 调起微信支付不能只靠前端拼参数,uni.requestPayment 必须配合服务端生成的合法预支付订单才能成功。直接在前端硬编码 sign 或伪造 prepayid 会返回 errCode: -1 或静默失败。
manifest.json 配置错一个字符就调不起支付
APP 端(Android/iOS)必须在 manifest.json 中正确声明微信支付插件和 AppID,否则 uni.requestPayment 会直接报错 "provider not supported" 或无响应。
-
"app-plus"下的"sdkConfigs"结构必须严格匹配官方格式,"wxpay"是固定键名,不是"weixin"或"wechat" - 填入的
appid必须是微信开放平台「移动应用」的 AppID(非小程序 AppID),且该应用已关联对应商户号 - 配置修改后必须「提交云端打包」,真机调试务必使用「自定义基座」,普通基座不包含支付模块
- H5 端不走此配置,而是依赖微信 JS-SDK,需单独引入
jweixin-module并调用chooseWXPay
服务端必须生成 v3 接口的 prepayid + 正确签名
微信支付 v3 API 已全面替代 v2,uni.requestPayment 要求的 prepayid 必须来自 v3 的「统一下单」接口(/v3/pay/transactions/app),用 v2 接口返回的 prepay_id 会导致拉起失败或 errCode: -2(用户取消假象)。
- v3 签名基于请求体、HTTP 方法、路径、时间戳、随机串生成,不能简单拼接字符串 MD5
- 服务端返回给前端的
orderInfo中,package字段值必须是"Sign=WXPay"(固定字符串),不是 v2 的"prepay_id=xxx" -
timestamp单位是秒(不是毫秒),且与微信服务器时间偏差不能超过 900 秒,否则验签失败 - 敏感字段如
key、证书私钥绝不能出现在前端代码或云函数源码中,应存于环境变量或密钥管理服务
uni.requestPayment 参数顺序和类型必须精确匹配
uni.requestPayment 对字段名、类型、大小写极其敏感,任意一项不符就会触发 fail 回调且无明确错误提示。
-
provider必须为字符串"wxpay"(全小写,不可加空格) -
orderInfo是对象,不是 JSON 字符串;其中noncestr和package是字符串,timestamp是数字,prepayid值必须以"wx"开头(如"wx202604041234567890") - 若使用 uniCloud + unipay,云函数返回的字段名可能为
timeStamp(驼峰),但uni.requestPayment要求的是timestamp(全小写),必须做字段映射转换 - 支付宝支付用
"alipay",不能混用;H5 端完全不支持uni.requestPayment,必须走 JS-SDK
真机调试时收不到回调或支付页空白
这个问题八成出在环境或权限链路上,和代码逻辑关系不大。
- 检查手机微信是否为最新版,旧版微信(如 8.0.22 以下)对 v3 支付支持不稳定
- 确认 APP 打包时勾选了「微信支付」模块,且自定义基座是用同一份
manifest.json生成的 - 安卓设备需开启「允许后台弹出界面」权限,否则支付页可能被系统拦截
- iOS 设备需确保
universalLink配置正确并能被苹果验证(apple-app-site-association文件可访问且格式合法) - 服务端
notifyUrl必须是 HTTPS、已备案域名,且能被微信服务器主动 POST 访问(常被防火墙或 Nginx 拦截)
最易被忽略的是时间戳精度和签名密钥版本——v3 要求用商户平台「APIv3 密钥」(32 字节随机字符串),不是「APIv2 密钥」(32 位 MD5),两者混用会导致签名永远不通过。











