uni-app H5端不支持微信支付,必须用JS-SDK的chooseWXPay;需后端生成签名、域名备案、OAuth2获取openid,且URL需去除hash后签名。
uni-app H5 调起微信支付为什么总是失败?
直接告诉你结论:uni-app 官方 uni.requestpayment 在 h5 端**不支持微信支付**,只支持支付宝 h5 支付。h5 页面调起微信支付必须走微信 js-sdk 的 choosewxpay,且前提是你的域名已配置在公众号 js 接口安全域名中,并完成授权(oauth2 获取 access_token 和 jsapi_ticket)。
怎么让 H5 页面拿到有效的 wx.config 配置?
微信 JS-SDK 不是前端自己能“配好就用”的,wx.config 所需的签名(signature)必须由后端生成,前端只负责传参并调用。常见错误是前端试图用前端时间戳/随机串自己算 signature —— 这必然失败,微信校验通不过。
- 后端需用
appid+appsecret先获取access_token,再用它换取jsapi_ticket - 签名算法必须严格按微信文档:对
jsapi_ticket、nonceStr、timestamp、url(注意是当前页面完整 URL,含 hash 前的部分,且不能带参数)做 SHA1 - uni-app 中建议在
onLoad或onShow里发起请求获取签名配置,避免页面跳转后 url 变化导致签名失效 - 务必确认当前页面域名已在公众号「公众号设置 → 功能设置 → JS 接口安全域名」中备案
uni-app 中如何正确调用 chooseWXPay?
不能直接写 wx.chooseWXPay(...) 就完事。JS-SDK 必须先成功执行 wx.config,且 wx.ready 触发后才能调用支付接口,否则报错 config:invalid signature 或 invoke:fail configError。
将产业文章整理为适合微信公众号/服务号发布的研究型草稿,支持原文读取、分层摘要、产业链标的梳理、image2 海报与封面生成、正文排版、微信草稿保存、回读校验和发布前确认。适用于鹊桥产业等服务号的半导体、AI 算力、先进封装、光通信、新能源、机器人等产业链研究内容。
- 引入微信 JS-SDK:
https://res.wx.qq.com/open/js/jweixin-1.6.0.js(推荐 1.6.0,兼容性更稳) -
wx.config的debug设为true,真机调试时看控制台报错详情(H5 在微信内置浏览器中打开才有效) - 支付参数中的
timeStamp是字符串类型(不是数字),package字段值必须是prepay_id=xxx格式,不能漏掉prepay_id= - 别在
uni.requestPayment失败回调里直接 fallback 到chooseWXPay—— 两者参数结构完全不同,必须单独构造
wx.chooseWXPay({
timestamp: '1712345678', // 字符串
nonceStr: 'abc123',
package: 'prepay_id=wx1234567890',
signType: 'SHA256',
paySign: 'xxx', // 后端用 key 签名生成
success(res) {
console.log('支付成功', res)
},
fail(err) {
console.error('支付失败', err)
}
})
为什么真机测试时提示 “当前页面不在白名单中”?
这个错误和「JS 接口安全域名」配置强相关,但容易被忽略的点是:微信会校验你调用 wx.config 时传入的 url 是否与当前浏览器地址栏 URL **完全一致(协议+域名+path,不含 query 和 hash)**。uni-app 的 H5 路由(如使用 hash 模式)会导致实际页面 URL 带 #/pages/pay/index,而你传给后端签名的 url 如果是带 hash 的,签名就会失效。
- 后端生成签名时,
url参数必须取window.location.href.split('#')[0],即去除 hash 部分 - 确保 uni-app 的 H5 模式为
history(在vue.config.js或manifest.json中配置),否则路由变化不会触发popstate,也难以同步更新签名所需 url - 如果用了 Nginx 代理或 CDN,注意不要把原始
Referer或Host头改掉,否则微信可能拒绝回调
微信 H5 支付本质是公众号场景下的能力,和 APP 支付、小程序支付完全隔离。没备案域名、没后端参与签名、没走 OAuth2 获取用户 openid,这三个环节缺一不可。别指望前端绕过。










