简介面向移动端开发者的支付宝scheme汇总整理自支付宝APK的预装应用信息覆盖大量已开放的跳转规则。通过替换URL中的saId参数可直达扫一扫、蚂蚁森林等指定功能省去手动查找页面入口的步骤适用于快捷支付、签到提醒、自动化测试等场景。文件结构上JSON与XML相互补充JSON按模块记录scheme与对应said值XML提供辅助说明便于编程解析或人工检索整体压缩包仅62KB轻量易查需留意部分scheme来自历史活动页面跳转后会提示已暂停服务使用时应优先挑选活跃功能。资源共2个文件属json与xml类型包含从APK提取的原始映射可直接照抄拼接跳转链接。已有5732人学习下载对于研究支付宝应用间通信、需要快速唤起内部页面的开发者来说是一份实用且可对照验证的清单。1. 支付宝已开放 scheme 大全为什么移动开发需要一份完整的唤起清单开发过跨端跳转的人都知道App 之间互相唤起靠的是 URL Scheme。支付宝已开放 scheme 大全这类资源就是一份“从自家应用跳进支付宝任意开放页面的路径表”。我在做聚合支付时经常要用户从我的 App 一键跳到扫一扫、付款码、账单甚至蚂蚁森林但网上资料要么零散、要么过期今天能跑的链接明天可能就白屏。这份资源把 scheme、host、path 和参数整理到一起帮我省掉了反复抓包和试错的时间。适合移动端开发、自动化测试和做导流活动的运营。它解决的核心问题就三个跳到哪个页面、参数怎么拼、为什么拉不起来。下面我按自己的使用顺序拆开讲。2. 从 URL 到页面Scheme 的基本结构与支付宝的开放策略2.1 一次唤起动作拆解Scheme、Host、Path 与 Query在写调用代码之前先把一次完整唤起链路拆干净。一个典型的支付宝 scheme 长这样注意 appId 是占位值正式大全里才是真实抓取值alipays://platformapi/startapp?appId20000045pagescan整体结构分四段协议头是alipays它决定了这个 URL 只能由支付宝处理platformapi是 host相当于支付宝内部的路由域名startapp是 path表示“启动一个内置页面”?后面的appId和page是 query用于告诉支付宝要打开哪个功能和页面。在 Android 上这个字符串会被解析成 Intent 的 data在 iOS 上它就是UIApplication.open的 URL 参数。理解这几段之后才能明白为什么有的人只改一个参数却跳错页面。以 Android 为例拉起代码通常是这样的Intent intent new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse(alipays://platformapi/startapp?appId20000045pagescan)); intent.setPackage(com.eg.android.AlipayGphone); startActivity(intent);说明第一行创建视图跳转 Intent第二行把 scheme 字符串解析成 Uri 作为目标地址第三行强制指定支付宝的包名。这个包名是公开的绝大多数安卓机上的支付宝都是这个值。如果不加setPackage系统可能会弹出一个选择器让用户选浏览器还是支付宝体验很差。如果用户没装支付宝这一行会触发ActivityNotFoundException需要捕获后降级处理这个放到避坑章节详细说。iOS 端写法更简洁但有限制let url URL(string: alipays://platformapi/startapp?appId20000045pagescan)! if UIApplication.shared.canOpenURL(url) { UIApplication.shared.open(url, options: [:], completionHandler: nil) }这里必须先调用canOpenURL做可用性检查否则真机调试时拉不起来。关键在 iOS 9 以后系统要求把所有可能被canOpenURL检查的 scheme 提前声明在Info.plist的LSApplicationQueriesSchemes里否则默认返回 false。所以你的工程里一定要加上alipays这个字符串。这里有个常见误解很多人以为只有canOpenURL需要声明实际上open并不需要声明但既然要用canOpenURL判断就必须声明。参数说明appId是支付宝内部功能模块的标识不同页面有不同的值page是页面路由名比如scan表示扫一扫payment表示付款码。这两项必须成对出现少一个都可能打开到错误页面。另外有些页面还支持额外参数比如转账场景需要带url参数指向一个编码后的 H5 跳转地址。这类参数往往带有临时签名直接从官方文档拿不到这也是这份大全的价值所在。2.2 支付宝 Scheme 的开放边界哪些页面能跳、哪些不行整理这份大全时最让人头疼的不是写代码而是判断“这个页面到底能不能跳”。支付宝对 scheme 的开放策略不是全量放开的官方只给过极少公开的 scheme比如alipays://这个协议本身。后面到底带什么appId和page才能命中官方文档没有列出全靠开发者抓包、实测、互相分享。所以这份大全里的每个条目都是从真机安装的支付宝里抓出来的不是拍脑袋编的。从我的测试结果看目前能稳定拉起的页面集中在几类扫码、付款码、转账收钱、账单流水、余额、卡包、蚂蚁森林、生活缴费、公益捐赠、附近的商家等。它们都属于“工具型”页面不涉及敏感个人信息支付宝愿意开放给外部导航。而像“亲密付账单”“芝麻信用分详情”“理财购买确认页”这类涉及风控和资金操作的页面要么无法拉起要么拉起来也会因为缺少内部会话而强制登录。判断标准很粗暴凡是打开后还需要再授权一次的身份页基本都不在 scheme 白名单里。还有个边界问题同一个页面在 iOS 和 Android 上的 scheme 可能不同。比如蚂蚁森林在某个版本上 Android 用alipays://platformapi/startapp?appId60000002iOS 可能还需要加一个source参数。这种差异不是逻辑上的而是支付宝客户端版本迭代导致的历史兼容问题。所以我在完整版大全里特意按平台分了两列并在旁边标注了“实测版本”。如果你发现某个链接在自家手机上拉不起来先别怀疑大全错了大概率是支付宝版本更新改了 route 映射需要重新抓包。这一点在避坑章还会再踩一遍。3. 整理这份大全按业务场景分类的 Scheme 清单与参数说明3.1 高频场景扫码、付款码、转账、账单查询拿到一份整理好的 scheme 大全第一件事不是直接往代码里贴而是先按业务场景找到对应的行。我把最高频的几个场景列出来你在做支付类引导时大概率会用上。下表是简要版完整列表里每个条目还包含“是否需登录”“支持平台”“最低版本”等信息。业务场景完整 Scheme示例值说明扫一扫alipays://platformapi/startapp?appId20000045pagescan直接打开扫码界面付款码alipays://platformapi/startapp?appId20000046pagepayment展示被扫付款码部分版本需要前置登录态转账收钱alipays://platformapi/startapp?appId20000047pagetransfer进入转账到支付宝账户页面账单查询alipays://platformapi/startapp?appId20000048pagelog打开最近一个月账单列表余额查看alipays://platformapi/startapp?appId20000049pagebalance显示当前余额注意表里的appId和page是示例值可能和你的支付宝版本不一致。因为在不同版本里支付宝内部的应用 ID 做过多次调整网上流传的很多“死链接”就是这么来的。完整版大全里我会在每个条目后附上“抓包版本号”方便你确认。这些高频场景的共同点是拉起后不需要再选账号直接进入对应功能。如果你的目标只是让用户“赶紧付款”优先用付款码而不是转账因为转账场景还需要输入金额和对方账户跳过后用户容易迷路。从我自己做的支付路由来看扫码和付款码的成功率最高几乎不挑系统。3.2 特色场景蚂蚁森林、公益捐赠、生活缴费除了支付支付宝里有一些“非支付”页面也很适合被外部唤起用来增强产品粘性。其中被问得最多的就是蚂蚁森林。蚂蚁森林的 scheme 大致长这样这里 appId 只是示例实际大全里记录的是不同版本对应的稳定写法alipays://platformapi/startapp?appId60000002pageantForest但是注意我在真机上测试过几个版本发现有的版本响应pageantForest有的版本却直接返回首页说明这个 path 并不是稳定的。更可靠的做法是只传appId60000002让支付宝自己跳到和该 appId 绑定的默认页面。这个 appId 在我的测试机里表现稳定但也请以你抓到的实际值为准。公益捐赠和生活缴费也是同类逻辑它们都对应一个独立 appId。其中公益捐赠链接经常用在“善因营销”活动里比如引导用户从自己的 App 一键进入某个公益项目的支付页面。这种情况下除了appId还需要带一个url参数这个 url 编码了公益项目的编号和捐赠金额。如果不带打开的是公益首页用户还要重新找项目。这里给你一个拼接技巧如果url参数里有特殊字符比如?、、一定要先用 URLEncoder 编码再拼到整个 scheme 后面否则参数会被截断或错位。比如String appId 60000002; String donateUrl https://example.com/donate?project1001amount10; String encodedUrl Uri.encode(donateUrl); String scheme alipays://platformapi/startapp?appId appId url encodedUrl;Uri.encode会将中文、空格、?、等转为百分号编码这样支付宝解析时才能拿到完整的url参数。如果不编码会被当成 scheme 里的参数分隔符导致支付宝只收到urlhttps://example.com/donate?project1001后面的amount就丢了。这个坑我踩过一次汗流浃背。3.3 调用示例Android 与 iOS 的两种写法整理完参数回到实际调用。这一小节把两端的标准写法补全虽然不是多新鲜的技术但很多人在编码细节上翻车。Android 侧把动态参数拼接好然后统一走一个方法public void openAlipay(Context context, String scheme) { try { Intent intent new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse(scheme)); intent.setPackage(com.eg.android.AlipayGphone); context.startActivity(intent); } catch (ActivityNotFoundException e) { // 没有安装支付宝或 scheme 无效走降级逻辑 openFallbackPage(context); } }这里把setPackage放在setData之后是为了避免部分国产 ROM 在解析时优先匹配包名而忽略 scheme。做法是把完整 scheme 传递给方法方法内部只负责解析和拉起。如果抛ActivityNotFoundException有可能是用户没装支付宝也有可能是 scheme 字符串本身有问题比如参数含中文没编码。我一般会在 catch 里先解码打印再决定走 H5 降级还是提示用户。iOS 侧建议封装一个工具函数func openScheme(_ scheme: String) { guard let url URL(string: scheme) else { return } if UIApplication.shared.canOpenURL(url) { UIApplication.shared.open(url, options: [:]) { success in if !success { /* 打开失败 */ } } } else { // 跳 App Store 或者提示 } }注意canOpenURL检测到的是“系统能否处理这个 scheme”并不能保证支付宝一定跳到你想要的页面。因为 system 只看 scheme 头不看后面的 appId。所以哪怕你写错了 appIdcanOpenURL依然返回 true。这也是为什么很多开发者说“明明能打开支付宝但就是没跳到蚂蚁森林”。真正的验证必须等open完成后再通过 App 状态或 H5 回跳判断。4. 落地调用检测 Scheme 是否可用并处理返回结果4.1 调用前检测canOpenURL 与 Intent.resolveActivity前面多次提到“检测”这一节专门讲如何检测才是靠谱的。很多人直接canOpenURL返回 true 就认为万事大吉实际上是半吊子检测。在 iOS 上canOpenURL只能告诉你当前系统有没有注册alipays这个协议不能告诉你支付宝版本是否支持目标页面。在 Android 上更靠谱的方式是使用Intent.resolveActivity它会去系统里查所有能处理这个 Intent 的应用如果返回 null 就说明没人能接。Intent intent new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse(alipays://platformapi/startapp?appId20000045)); intent.setPackage(com.eg.android.AlipayGphone); if (intent.resolveActivity(getPackageManager()) ! null) { startActivity(intent); } else { openFallbackPage(); }resolveActivity检查的是“完整 Intent”是否能匹配也就是说它会同时校验 scheme、host、path 和包名。这比canOpenURL严格得多。但注意它依然无法校验 appId 是否有效。appId 是支付宝内部业务 ID系统层面不认识只有支付宝启动后才会尝试解析。所以检测分两层系统层检测能不能唤起业务层检测唤起后是否到达正确页面。第二层需要靠页面回跳或前台状态来确认没有更早的检测方式。iOS 侧的检测只能是canOpenURL但它对 URL 长度有限制。如果你的参数太长比如带了一个上千字符的优惠券参数canOpenURL会直接返回 false因为系统对 scheme URL 的长度有隐式上限。解决办法是精简参数或者把长参数放到 H5 页面里再通过url参数带过去。4.2 参数传递与回调Scheme 不是万能的 IPC很多人把 scheme 当成 App 间的数据通道想着从支付宝拿点信息回来。这里要浇一盆冷水支付宝的 scheme 调用是单向的你只能“把用户送过去”它不会通过同样的 scheme 回报结果。假设你要做一个“去付款付完回来享优惠”的功能想靠 scheme 判断用户是否成功付款是不可能的。支付宝并不会调起你的 App 并传回一个订单状态。常见的补救方案有两种一是让支付宝跳到你的 H5 中间页由 H5 页面调用支付宝的 JS SDK 或支付结果接口来获取状态再把状态通过 H5 与原生 App 的 bridge 回传二是使用支付宝的 App 内回调 URLreturnUrl参数但需要你在 scheme 里拼上一个你们自己的 scheme支付宝在支付完成后会尝试跳转到这个 returnUrl。实际上这种模式主要用于支付流程而不是通用的页面唤起。在我的项目里我统一采用“H5 中转 后端确认”的方式具体做法是让用户先跳到一个自己的 H5 页面然后 H5 通过 JS 检测 App 是否在前台再拉起支付宝支付完成后支付宝带着 returnUrl 回到 H5H5 再调原生方法刷新状态。所以你在整理 scheme 大全时不要把眼光只盯在 scheme 字符串上要同步收集“每个页面是否支持 returnUrl”“如果支持返回的 URL 长什么样”。这些信息在官方文档里几乎没有只能靠抓包和实测记录。我在资源包中把这些信息列成了单独一列标注“支持回调”或“不支持回调”方便大家做技术选型时参考。5. 避坑记录支付宝 Scheme 调用中常见的 5 个坑5.1 坑一包名与 Scheme 对不上导致无法拉起现象在 Android 上调用startActivity后抛ActivityNotFoundException但明明已经安装了支付宝。原因检查后发现我虽然写了intent.setData(Uri.parse(alipays://...))但setPackage里填成了com.eg.android.AlipayGphone这个没问题。真正的坑是有些三方定制 ROM 里支付宝的包名被改成了com.eg.android.AlipayGphone.huawei之类的渠道包名。当我写死标准包名时系统找不到匹配的 Activity。解决先不写setPackage用resolveActivity拿到第一个能处理 scheme 的包名再把它设置回去。最省事的做法是在跳转前查询所有能处理该 scheme 的应用列表如果只找到一个就用它的包名如果有多个则弹出应用选择器。5.2 坑二参数缺少签名跳过去白屏现象App 能正常唤起支付宝但打开的是空白页等几秒后又自动回到我的 App。原因抓包发现支付宝对某些页面尤其是涉及转账和公益捐赠会校验url参数中的签名。我在最初拼接时只带了appId和page没带sign字段支付宝内部校验失败后直接放弃打开。解决把sign字段也加入 scheme。这个签名不是你自己算的而是从支付宝 H5 页面或后端接口拿到的。最简单的方式是在开发阶段用一个固定活动链接让支付宝后台生成带签名的完整 scheme然后抓包保存。正式调用时这个签名会有有效期需要后端动态生成。如果不能保证签名有效就放弃直接拉起改用 H5 页面中转。5.3 坑三未安装支付宝时静默失败现象用户没装支付宝点击跳转按钮毫无反应或者直接闪一下回到桌面。原因canOpenURL返回 false但我没有做任何降级Android 上ActivityNotFoundException被吞掉用户感知就是没反应。解决在调用前统一检测如果不可用跳转应用市场下载页。Android 上跳到支付宝官方下载页iOS 上引导用户去 App Store 搜索“支付宝”。这里有个细节跳转下载页也要用 scheme 或 universal link不能直接用market://details?id...因为有些 ROM 会拦截市场协议。我更推荐先打开一个内置的 H5 提示页说明“需要安装支付宝”再让用户点按钮去应用市场体验更平滑。5.4 坑四iOS 9 的 whiteList 限制现象iOS 真机上canOpenURL永远返回 false但在 iOS 模拟器上可以正常返回 true。原因模拟器没有严格执行LSApplicationQueriesSchemes检查而真机严格要求。我没有在 Info.plist 中加入alipays导致系统直接不承认这个 scheme。解决在 Info.plist 中增加一个数组类型的键LSApplicationQueriesSchemes把alipays加进去。注意大小写敏感必须是alipays不能写成alipay。另外如果你还需要跳淘宝、微信等也要一并声明。系统最多允许声明约 50 个 scheme多了可能导致 app 启动变慢所以不要把所有见过的 scheme 都塞进去。5.5 坑五部分页面有版本要求低版本直接闪退现象用户手机上支付宝是旧版本比如 10.2.x拉起蚂蚁森林时直接闪退或者卡在启动页。原因新页面的路由在旧版本中不存在支付宝内部没有兜底处理遇到未知 appId 就崩溃了。解决在代码里做版本判断但这里只能判断支付宝 App 的版本号无法拿到 scheme 支持的最低版本表。我的做法是在大全中记录“每个页面的最低支持版本”数据来源是抓包时观察到的客户端版本与 response 关系。调用前获取支付宝版本号通过PackageManager或canOpenURL的 returnURL低于最低版本时走 H5 降级不强行拉起。获取效验逻辑放后台前端只拿开关。6. 进阶技巧用统一中转页管理 Scheme 调用、降级与埋点到这一步你可能已经能拉起 80% 的页面了。但真正把 scheme 用稳靠的不是散落各处的openScheme()调用而是集中管理。我现在的做法是维护一个SchemeRouter把所有跳转请求收敛到单一入口。业务方只要调用SchemeRouter.open(scan)路由内部去查大全映射表拼出完整 scheme再做可用性检测、降级和埋点。这样即使支付宝某天改了 appId我也只需要改路由表不用改业务代码。public class SchemeRouter { private static final MapString, String SCHEME_MAP new HashMap(); static { SCHEME_MAP.put(scan, alipays://platformapi/startapp?appId20000045pagescan); SCHEME_MAP.put(payment, alipays://platformapi/startapp?appId20000046pagepayment); SCHEME_MAP.put(ant_forest, alipays://platformapi/startapp?appId60000002); } public static void open(Context context, String key) { String scheme SCHEME_MAP.get(key); if (scheme null) return; if (isAlipayInstalled(context)) { context.startActivity(createIntent(scheme)); } else { openFallback(context); } // 埋点 AnalyticsHelper.logEvent(scheme_open, key); } }路由表里我用业务名做 key屏蔽掉具体 scheme 细节。如果你有后端配置能力可以把这张表放到云端做成动态开关。比如支付宝版本更新导致某个 scheme 失效时你可以先下发临时替换链接而不是等待用户升级 App。这一点在运营大促时特别有用——我见过因为 scheme 失效导致整个支付转化率下降 30%最后紧急改配置才救回来。除了路由第二步是埋点。每次调用时记录key、时间戳、是否成功唤起、从调用到用户从支付宝回到 App 的时长。为什么强调这个因为 scheme 调用的失败很多时候不是技术性的而是业务性的比如用户被支付宝风控拦截或者跳过去后没有完成动作直接返回。凭感觉很难发现。有了埋点你就能看到每个页面的唤起成功率。我曾通过埋点发现蚂蚁森林的唤起成功率比扫码低 15%原因是部分低版本支付宝根本不支持该页面而我之前没有做版本过滤。后来在路由表里加了最低版本字段成功率一下子回到了正常水平。最后一个习惯永远保留一个“降级 H5”作为后悔药。支付宝 scheme 再全也不可能覆盖所有残酷环境比如用户禁用外部跳转、企业版定制系统。我在路由里默认配置了每个业务对应的 H5 兜底链接一旦原生拉起失败用户不用强制安装支付宝直接打开 H5 页面也能完成核心动作。从那以后我每次前后端联调跳转需求都会强制自己先走一遍“安装拉起 / 未安装降级 / 拉起失败埋点”这一整套流程再也没被线上事故磨破头。这份整理好的 scheme 大全和路由模板都放资源包里了希望帮到你。本文还有配套的精品资源点击获取