uni-app微信支付需前后端协同:服务端用v3接口生成prepayid并签名,app端严格配置manifest.json的wxpay字段,h5端必须用js-sdk且在微信浏览器中运行。
uni-app 接入微信支付不能只靠前端拼参数,必须前后端协同:服务端生成合法 prepayid 和签名,前端用 uni.requestpayment 调起;h5 端完全不走这个 api,得用 js-sdk;app 端配错一个字符就直接失败。
APP 端配置 manifest.json 必须严格对齐 v3 规范
Android/iOS 打包前,manifest.json 的 app-plus → sdkConfigs 下必须有且仅有一个 wxpay 键(不是 weixin 或 wechat),结构如下:
{
"app-plus": {
"distribute": {
"sdkConfigs": {
"wxpay": {
"appid": "wx499********7c70e",
"mch_id": "148*****52"
}
}
}
}
}
其中 appid 必须是微信开放平台「移动应用」的 AppID(非小程序或公众号 AppID),且该应用已关联对应商户号;mch_id 是商户号,不是 API 密钥;配置后必须「提交云端打包」,真机调试必须用「自定义基座」——普通基座不含支付模块,调用 uni.requestPayment 会返回 provider not supported 或静默无响应。
服务端必须用 v3 统一下单接口生成 prepayid
uni.requestPayment 要求的 prepayid 只能来自微信支付 v3 接口 /v3/pay/transactions/app,用 v2 的 /pay/unifiedorder 返回的 prepay_id 会导致拉起失败或 errCode: -2(看似用户取消,实为验签拒绝)。
解析微信公众号文章,提取标题、作者、正文、图片等信息。用户发送链接(mp.weixin.qq.com)时触发,自动提取内容并可保存至飞书表格。
-
package字段值必须是固定字符串"Sign=WXPay",不是"prepay_id=xxx" -
timestamp单位是秒(非毫秒),且与微信服务器时间偏差不能超过 900 秒,否则签名验证失败 -
noncestr必须是纯 ASCII 字符串,长度 32 以内,不能含中文或空格 - 敏感字段如 API 密钥、证书私钥绝不可出现在前端或云函数源码中,应存于环境变量或密钥管理服务
uni.requestPayment 参数大小写和类型极其敏感
任意字段名、类型或值格式错误都会触发 fail 回调且无明确提示。关键约束如下:
-
provider必须是字符串"wxpay"(全小写,无空格) -
orderInfo是对象,不是 JSON 字符串;其中timestamp是数字,noncestr和package是字符串 -
prepayid值必须以"wx"开头(如"wx202604041234567890") - 若服务端用
uniCloud + unipay,返回字段可能是timeStamp(驼峰),但前端必须映射为timestamp(全小写)才能被识别
H5 端完全不支持 uni.requestPayment
在浏览器中打开的 H5 页面无法使用 uni.requestPayment,必须走微信 JS-SDK 流程:
- 用户必须在微信内置浏览器中访问,否则
chooseWXPay会直接报错 - 需在公众号后台配置「网页授权域名」和「JSAPI 支付授权目录」,且当前页面 URL 必须匹配授权目录(末尾斜杠不能少)
- 前端要先调用
wx.config注入签名,再用wx.chooseWXPay发起支付;package字段值仍是"Sign=WXPay",但签名由服务端基于jsapi_ticket生成,与 APP 端签名逻辑完全不同
最容易被忽略的是:H5 支付回调结果不可靠,前端收到的 get_brand_wcpay_request:ok 并非最终成功信号,必须依赖服务端接收微信异步通知或主动查单确认状态。










