uni-app H5调起微信JSSDK支付需确保公众号JSAPI权限开通、域名白名单配置正确(仅支持https且须与访问域名完全一致),后端统一下单返回的appId必须为公众号AppID,timeStamp须为十位字符串,paySign签名URL须与location.href去hash后一致,字段名及类型须严格匹配微信要求,真机调试需通过微信开发者工具查看JSSDK日志定位问题。
uni-app H5调起微信JSSDK支付前,必须确认公众号JSAPI权限已开通且域名白名单配置正确
很多开发者卡在“点击没反应”或 config:invalid signature,根本原因不是代码写错,而是微信后台没配好。jssdk支付依赖公众号的js接口安全域名,且该域名必须和你实际访问h5页面的域名完全一致(包括协议、子域、端口)。比如你在本地 http://localhost:8080 调试,微信不认;上线后用了 https://m.example.com,但后台只填了 example.com,也会失败。
- 登录公众号后台 → 「公众号设置」→ 「功能设置」→ 「JS接口安全域名」,添加你的H5线上域名(仅支持
https,不支持http、localhost、IP) - 确保公众号已开通「微信支付」功能,并在商户平台开通「JSAPI支付」权限
- 后端统一下单接口返回的
appId必须是该公众号的 AppID,不是商户号,也不是小程序的 AppID - 前端调用
uni.requestPayment时传入的timeStamp必须是字符串类型(微信校验严格),常见坑是后端返回数字,前端没转成字符串
uni.requestPayment 在 H5 环境下实际走的是微信 JSSDK 的 chooseWXPay,不是原生支付
uni-app 的 uni.requestPayment 是跨端统一 API,但在 H5 上它内部会自动注入微信 JSSDK 并调用 chooseWXPay。这意味着你不能跳过 JSSDK 初始化步骤——即使没手动调 wx.config,uni-app 也会帮你做,但前提是它能拿到正确的签名参数。
- 签名必须由后端生成,前端不能自己拼
jsapi_ticket和nonceStr,否则必然invalid signature - 后端签名时用的 URL 必须和当前页面完整 URL 完全一致(含 hash 后面的参数?不,微信签名 URL 不带
#及之后内容,但必须和 location.href 去 hash 后一致) - 如果页面是 Vue Router 的 history 模式,URL 无
.html后缀,签名 URL 就不能带后缀;如果是 hash 模式,签名 URL 就是https://m.example.com/#/pay去掉#后的https://m.example.com/ -
uni.requestPayment的provider参数在 H5 下固定为weixin,写别的(如alipay)会静默失败
后端返回的支付参数字段名和类型必须严格匹配微信要求,uni-app 不做转换
uni-app 的 uni.requestPayment 在 H5 下会把传入对象原样透传给 chooseWXPay,字段名一个字母都不能错,类型也必须是字符串。常见错误是后端返回 timestamp(小写 t),而微信要求 timeStamp(大写 S);或返回 paySign,但微信要的是 paySign(没错,这个是对的),但很多人误写成 sign 或 packageSign。
- 必需字段(全部为字符串):
appId、timeStamp、nonceStr、package、signType、paySign -
package字段值必须是prepay_id=开头的字符串,不能是整个 JSON 或空格包裹的字符串 -
timeStamp是十位时间戳字符串,例如"1715234567",不是毫秒,也不能是数字类型 - 后端生成
paySign时,参与签名的字段顺序必须严格按文档:appId、nonceStr、package、signType、timeStamp(注意没有 key)
真机调试时看不到控制台报错?用微信开发者工具的「调试」面板看 JSSDK 日志
H5 支付流程中,很多错误(比如签名失败、参数缺失)不会抛到 uni.requestPayment 的 fail 回调里,而是直接在微信 JSSDK 内部静默失败,或者弹出“系统错误”。这时候光看前端 console 没用,得打开微信内置浏览器的调试能力。
- 安卓微信:打开「微信开发者工具」→ 连接手机 → 选择对应网页 → 切到「Console」或「Network」看
https://mp.weixin.qq.com/mp/jsapi/jsapi_open请求响应 - iOS 微信:需 macOS + Safari → 开发菜单 → 选择「iPhone 微信」→ 实时查看 JS 错误和 network
- 关键日志关键词:
config ok表示 JSSDK 初始化成功;chooseWXPay:fail config: invalid signature表示签名错;chooseWXPay:fail invalid parameters表示字段缺失或类型不对 - 别依赖
uni.getProvider判断是否支持微信支付——H5 下它永远返回weixin,但实际能否调起,只取决于 JSSDK 加载和配置结果










