uni-app微信支付必须后端统一下单返回prepay_id及完整签名参数,前端仅透传调起;provider须为"wxpay",timestamp、package、noncestr、paysign等字段类型和格式须严格符合微信要求,小程序与h5流程不同且appid不可混用。

uni-app 实现微信支付不能靠前端拼参数,必须后端统一下单返回 prepay_id 和完整签名参数,前端只负责透传调起;否则必报 requestPayment:fail invalid sign 或 invalid appid。
uni.requestPayment 参数必须严格对齐微信原生要求
这个 API 是纯透传层,不校验、不补全、不转换类型。填错一个字段或类型不对,就会静默失败或报 jsapi error。
-
provider必须是字符串"wxpay"(不是"weixin"、"wechat"或空) -
timeStamp必须是字符串,例如"1725502345";后端若返回数字类型,前端需显式转成字符串:String(res.timeStamp) -
package值必须是完整字符串,格式为"prepay_id=wx1234567890",开头不能有空格,结尾不能换行,也不能漏掉prepay_id=前缀 -
nonceStr需由后端生成(推荐 16 位随机字符串),前端不能自己生成再拿去签名——因为签名用的nonceStr必须和后端下单时传给微信的一致 -
paySign完全由后端用商户密钥(APIv3 key或MD5 key)按微信规则拼接签名,前端禁止二次计算
小程序端和 H5 端走的是两套完全不同的流程
同一个 uni.requestPayment 调用,在小程序和 H5 下背后机制完全不同,不能复用同一套后端接口。
解析微信公众号文章,提取标题、作者、正文、图片等信息。用户发送链接(mp.weixin.qq.com)时触发,自动提取内容并可保存至飞书表格。
- 小程序端:依赖
openid,后端调用unifiedorder(JSAPI 支付),trade_type=JSAPI,必须传openid - H5 微信内(公众号/聊天页打开):同样用 JSAPI,但需先 OAuth2 获取
openid,且域名必须在公众号后台配置「网页授权域名」和「JSAPI 支付授权目录」 - H5 微信外(如 Safari 打开):必须走 H5 支付,
trade_type=MWEB,后端返回mweb_url,前端跳转该 URL 才能唤起微信内置浏览器支付页 - 没做环境判断就硬套一套参数,真机上大概率无反应或跳转白屏
真机调试无反应?90% 是配置或权限问题
代码跑通不代表能支付,微信对运行环境卡得极死,和逻辑无关的报错基本都出在这三处:
- 小程序管理后台「微信支付」模块里,确认该 AppID 已绑定对应商户号,且状态为「已开通」
- 测试机微信账号是否被添加为小程序「体验者」;非体验者真机上直接不触发
uni.requestPayment - H5 场景下,当前页面 URL 是否落在微信商户平台「开发配置 → JSAPI 支付授权目录」中(注意末尾斜杠);公众号后台「网页授权域名」是否与当前域名完全一致(不含
http://,不带路径) - 云函数或后端接口跨域未配好(尤其腾讯云),导致前端拿不到
prepay_id,后续自然无法调起
最容易被忽略的是:小程序端的 appid 来自小程序后台,H5 的 appid 来自公众号后台,两者不同;而 paySign 签名所用的 appId 字段,必须和下单时传给微信的那个 appid 完全一致——混用会导致签名始终校验失败。










