uni-app app端支付宝支付失败主因是原生sdk配置错误,需确保manifest.json中appid填在app-plus→modules→alipay节点、ios添加url scheme、android校验包名与sha1签名、手动集成sdk jar/aar、使用自定义基座及五处签名完全一致。

uni-app App端调不起支付宝支付,90%以上是原生SDK没配对——不是前端代码写错了,而是 manifest、插件、基座、签名这四样里至少有一样漏了或填错了。
manifest.json 里支付宝 APPID 必须填对位置
很多人在 manifest.json 里瞎找,最后填到 "mp-alipay" 节点下,结果安卓/iOS 都不生效。App 端支付的 APPID 只能填在 app-plus 下的 usingComponents 之外、modules 之内:
-
"Payment": {"alipay": true}—— 必须开启支付模块开关 -
"Alipay": {"appid": "2021000123456789"}—— 这个appid是沙箱/正式移动应用的 20 开头 ID,不是网页应用的 - iOS 还需额外检查
ios/entitlements.plist是否添加了ap2021000123456789(格式为ap + APPID)作为 URL Scheme - Android 不认这个 plist,但会校验包名 + 签名 SHA1,这两项必须和支付宝开放平台“移动应用”里填写的一致
Android 必须手动放 SDK jar/aar 到 nativeplugins
云打包默认基座不带支付宝 SDK,HBuilderX 不会自动注入。你看到的 “Alipay not installed” 或静默失败,基本都卡在这一步:
- 下载最新版
alipaySdk-15.8.0.20230915151555.jar(或新版 aar),放进nativeplugins/alipay/Android/libs/ - 确认
nativeplugins/alipay/Android/AndroidManifest.xml里声明了com.alipay.sdk.app.H5PayActivity和对应 intent-filter - 如果用的是 Android 12+,
targetSdkVersion暂时降到 30 测试——高版本对 activity 启动限制更严,容易闪退 - 别信“只要 manifest 配了就能用”,没这个 jar,
uni.requestPayment({provider: 'alipay', ...})直接返回payment not supported
orderInfo 字符串不能动、不能 decode、不能拼接
后端返回的 orderInfo 是一整段已签名的原始字符串,比如 app_id=2021000123456789&biz_content=%7B%22out_trade_no%22%3A%22xxx%22%7D&sign=xxx。前端只负责透传:
- 绝对不要
JSON.parse()它——它根本不是 JSON - 绝对不要
decodeURIComponent()或encodeURIComponent()二次编码——支付宝客户端会自己 decode,多编一次就验签失败 - 绝对不要拆开改字段再拼回去——签名立刻失效,返回
INVALID_PARAMETER - 真机调试时用
console.log(orderInfo)看一眼长度,正常应该 300~800 字符;如果只有几十字,说明后端没生成对
真机调试必须用自定义基座,且不能混用
云打包默认基座里没集成你放的支付宝 SDK,所以无论怎么配 manifest 都白搭:
- 在 HBuilderX 中执行「运行 → 运行到手机或模拟器 → 制作自定义基座」,选中 Android 或 iOS
- 制作完成后再「运行 → 运行到 Android App 基座」(注意不是“运行到手机”)
- 同一个自定义基座不能同时用于微信和支付宝调试——插件冲突会导致回调丢失,订单状态卡在「待支付」
- 回调失败时先查日志:Android 看 Logcat 过滤
Alipay,iOS 看 Xcode 控制台是否打印alipayURLScheme被唤起
最容易被忽略的其实是签名一致性:Android 包名 + 签名 SHA1、iOS Bundle ID + URL Scheme、后端配置的 APPID、前端 manifest 里的 APPID、支付宝后台填的 APPID——这五处必须完全一致,差一个字符,支付就起不来。











