一、方案说明:支付宝当面付条码支付
本项目采用支付宝当面付—条码支付(付款码支付)方式。用户打开支付宝并出示付款码;Android 消费机通过扫码枪、摄像头或设备扫码模块识别付款码,取得一次性的 auth_code,再把订单号、金额和 auth_code 提交给我方后端。后端使用应用私钥签名并调用支付宝 alipay.trade.pay 发起扣款。
后端根据支付宝返回结果处理订单;遇到用户支付中、网络超时或状态不明确时,通过 alipay.trade.query 主动查询,必要时执行撤销。异步通知到达时,后端仍需完成 RSA2 验签、商户与金额核对及订单幂等更新。Android 只向我方后端查询最终状态,不保存应用私钥,也不直接请求支付宝网关。
方式边界:本文是“用户出示付款码、设备识别后发起支付”。它不同于“设备展示动态二维码、用户扫码”的
alipay.trade.precreate 模式。付款码是支付凭证,应作为不透明敏感值处理,禁止解析业务含义、完整展示、写入普通日志或长期保存。二、付款码支付业务流程
- Android 消费机确认菜品、商户订单号和应付金额,并锁定本次结算订单。
- 用户打开支付宝,向设备出示付款码。
- 设备识别付款码取得
auth_code,进行防重复扫描,且不完整显示或记录付款码。 - Android 把订单号、金额、
auth_code、终端标识和幂等请求标识提交给我方后端。 - 后端使用应用私钥进行 RSA2 签名,调用
alipay.trade.pay发起支付。 - 后端验签并核对返回结果;支付中、超时或状态不明时调用
alipay.trade.query主动查询,必要时撤销。 - 异步通知到达时,后端再次验签、核对并幂等更新订单。
- Android 查询我方后端最终状态,支付成功后完成订单并打印或展示明细。
用户打开支付宝,向设备出示付款码
↓
Android识别付款码取得 auth_code,执行防重复扫描
↓
Android向我方后端提交订单号、金额、auth_code、终端标识
↓
我方后端创建待支付订单,RSA2 签名调用 alipay.trade.pay
↓
支付宝返回受理或支付结果
↓
我方后端验签、核对并幂等更新;支付中或状态不明时主动查询,必要时撤销
↓
支付宝异步通知到达时,由后端再次验签并幂等更新
↓
Android查询后端最终状态,展示结果并完成订单
三、应用创建目标
准备正式 Android 应用信息 → 登录支付宝开放平台 → 创建移动应用 → 获取 AppID → 复核包名与签名 → 配置 RSA2 → 生成并上传应用公钥 → 保存支付宝公钥 → 提交审核 → 审核通过后交接联调
安全前置要求:源笔记中出现过真实登录凭据和应用私钥。公开文档、聊天、代码仓库和 Android 安装包中不得保留这些值;已经公开过的密码和密钥必须立即更换。本文仅保留字段名称和填写规则。
四、开始前准备
| 准备项 | 需要提供的内容 | 产出/用途 |
|---|---|---|
| 开放平台账号 | 主体账号、登录密码、验证码接收方式 | 登录及敏感操作验证 |
| 应用基础资料 | 应用名称、简介、图标 | 创建应用和提交审核 |
| 付款码采集能力 | 扫码枪、摄像头或设备扫码模块;扫码回调与防重复触发机制 | 识别用户付款码并取得 auth_code |
| Android 正式信息 | 正式包名、正式发布签名 | 平台识别 Android 应用身份 |
| 密钥工具 | 支付宝开放平台密钥工具 | 生成 RSA2 应用密钥对 |
| 安全存储位置 | 服务端密钥系统或受控配置中心 | 保存应用私钥 |
| 责任人 | 账号、Android、后端负责人 | 完成验证、确认和密钥交接 |
五、支付宝开放平台应用创建主流程
1
登录支付宝开放平台
需要输入
- 支付宝开放平台主体账号
- 登录密码
- 邮箱、短信或其他验证码
产出
- 已登录的平台会话
- 与项目签约主体一致、具备创建应用、配置密钥和提交审核权限的控制台访问权限
2
进入 Android 应用创建入口
需要选择
- 控制台
- 网页/移动应用
- 创建网页/移动应用
产出
- 正确打开“网页/移动应用”的移动应用创建表单,不是小程序或其他应用类型页面
3
填写 Android 应用基础信息
| 输入字段 | 填写要求 |
|---|---|
| 应用名称 | 使用可识别的正式业务名称 |
| 应用图标 | jpg、jpeg 或 png;笔记截图建议 320×320 像素且小于 3 MB |
| 应用简介 | 简要说明应用用途及支付场景 |
| 应用类型 | 移动应用;创建后通常不能修改,提交前必须确认 |
| 应用平台 | Android;创建后通常不能修改,提交前必须确认 |
| 应用签名 | 从正式发布 APK 或已安装正式应用中提取;不得使用 Debug 签名 |
| 应用包名 | 正式 applicationId,必须与清单及发布包完全一致 |
产出
- 信息完整、包名与正式 applicationId 一致、使用正式发布签名的 Android 应用创建表单
- 如果暂用临时签名,表单必须标记“审核前替换”,并在提交审核前改为真实正式签名
4
创建应用并记录 AppID
需要输入/确认
- 填写完成的应用表单
- “立即创建”确认操作
- AppID 的受控配置记录位置;公开文档中不得填写真实 AppID
产出
- 支付宝开放平台应用记录
- 与应用名称一一对应并进入集中配置清单的唯一 AppID
- “开发中”等初始状态
5
复核并修正应用信息
需要输入
- 正式应用名称、图标和简介
- 正式 Android 包名
- 正式发布应用签名
产出
- 平台登记的包名、应用签名与最终生产 APK 完全一致的应用信息
- 经 Android、后端和项目负责人共同确认,可进入开发设置和审核的应用记录
6
选择接口加签方式
需要输入/选择
- 开发设置
- 接口加签方式:密钥
- 加签算法:RSA2,不使用 MD5 或 RSA1
- 支付密码、短信验证码等安全验证
- 已有生产调用时,提前准备密钥切换和回滚方案
产出
- 待上传应用公钥的接口加签流程
- 已确认不会误覆盖生产配置,或已具备切换与回滚方案的 RSA2 配置任务
7
生成 RSA2 应用密钥对
需要输入/选择
- 支付宝密钥工具
- 加签方式:密钥
- 加签算法:RSA2
- 受控的临时或密钥管理目录,不使用自动同步到普通网盘的目录
产出
- 应用公钥:上传支付宝
- 应用私钥:仅供商户后端签名
- 属于同一密钥对的密钥文件或字符串
- 已进入受控密钥系统的正式私钥;私钥不得进入 Android、Git、日志、截图或公开笔记
- 安全交接后已清理的临时目录
8
上传应用公钥并保存支付宝公钥
需要输入
- 应用公钥
- 平台要求的安全验证码
- 应用公钥与支付宝公钥的用途说明,避免混用
产出
- 平台已登记的应用公钥
- 用于后端验签的支付宝公钥
- “接口加签方式:已设置”状态
- 通过最小测试数据验证的签名、验签自检结果
9
形成安全配置交接包
需要输入
- AppID
- 应用私钥
- 支付宝公钥
- 支付宝网关地址
- 签名算法、字符集、异步通知地址
- 彼此隔离的沙箱与正式环境配置,以及禁止打印私钥和完整付款码的日志规则
产出
- 可用于后端联调的支付宝配置
- 密钥责任人、保存位置和轮换记录
- Android 不保存私钥、不直接调用需商户签名接口的职责边界
- 隔离的沙箱与正式环境配置,以及不会打印私钥或完整付款码的日志配置
10
提交审核并等待通过
需要输入/确认
- 已确认的应用基础信息
- 已完成的接口加签配置
- 平台要求的审核材料和主体验证
- 当面付权限、通知、查询、退款、撤销、对账与异常场景联调计划
产出
- 应用审核记录
- 审核中、驳回或通过状态
- 审核通过后的产品申请和联调待办
- 需覆盖成功、失败、超时、重复请求、断网和回调重试的验证清单;审核通过不等于支付链路已上线
六、最终产出清单
- 支付宝开放平台 Android 应用记录。
- 已确认的应用名称、图标、简介、包名和正式签名。
- AppID 配置记录。
- RSA2 应用公钥和受控保存的应用私钥。
- 支付宝公钥及后端验签配置。
- “接口加签方式:已设置”的平台状态。
- 应用审核记录及最终审核状态。
- 密钥交接、保存位置、责任人和轮换记录。
- Android 与后端配置边界说明。
- 当面付产品开通及支付联调待办清单。
七、角色分工
| 角色 | 主要输入 | 负责产出 |
|---|---|---|
| 支付宝账号负责人 | 主账号、验证码、主体信息 | 应用创建、敏感操作验证、审核提交 |
| Android 负责人 | 正式包名、正式签名、应用资料 | 正确的平台信息和客户端配置边界 |
| 后端负责人 | AppID、应用私钥、支付宝公钥、回调地址 | 签名、验签、查询、退款与对账能力 |
| 项目负责人 | 应用命名、上线范围、责任人 | 信息确认、审核跟踪、联调和上线验收 |
八、安全红线
- 禁止在公开文档中填写真实账号密码、应用私钥或完整付款码。
- 禁止把应用私钥打包进 Android APK。
- 禁止提交私钥到 Git、IM 群聊、工单附件或普通网盘。
- 已经公开过的密码和密钥必须视为泄露并立即轮换。
- 支付最终状态由后端异步通知验签和主动查询共同确认,不能只依赖 Android 页面提示。
内容依据公开共享笔记第五部分整理;真实凭据、AppID、密钥和本机路径均已省略。HTML 版本适合浏览、打印和转 PDF,Markdown 版本适合后续维护。