pay · Onboarding

支付宝密钥申请与备案依赖关系

沙箱 vs 生产两阶段分别需要什么、密钥怎么拿、备案到底卡在哪一步。配套独立支付服务 pay(PC 网页支付 alipay.trade.page.pay)。

一、两阶段总览

沙箱(现在就能做)生产(收真钱)
企业实名不需要需要(营业执照/对公/法人)
产品签约不需要需签约「电脑网站支付」
域名不需要签约审核基本要备案域名
ICP 备案不需要基本绕不开(见第二节)
HTTPS不需要(localhost 即可)需要(域名证书)
能验证什么下单→跳收银台→扫码付→(查单兜底)全链路真实到账 + 异步回调 notify

二、不用域名 = 不用备案?

技术层面:不绑域名就不触发 ICP 备案(备案=域名+大陆服务器对外提供服务)。而且有个对支付宝有利的事实:

支付宝电脑网站支付的 notify_url / return_url 支付宝不校验是否备案——只要能 POST 回调到你的地址就行。这点和微信不同(微信 JSAPI/H5 要在后台填「已备案授权域名」)。所以单从回调技术看,甚至能用服务器公网 IP 当 notify_url 把真实支付跑通。

但「想正经收真钱」时,备案基本还是绕不开,卡在这三处:

卡点说明
商户签约审核申请生产「电脑网站支付」要提交网站地址,支付宝审核要求网站可正常访问且合规,实践中基本要备案域名(裸 IP 网站过审很难)
HTTPS给纯 IP 签受信任 HTTPS 证书极难(Let's Encrypt 不给 IP 发证),无 HTTPS 收款页显示「不安全」
微信支付微信必须填备案授权域名,完全绕不开
结论:沙箱阶段不用域名/备案/实名;真实收款备案是刚需。但你不必等备案就能先把支付宝沙箱联调全做完,备案/签约和联调可并行。
完全不备案也想收真钱的旁路:支付宝「当面付」(扫码)签约不依赖网站,或用收款链接 / 第三方托管收银台——但那不是自研网页收款页这条路。

三、沙箱密钥获取(4 步 · 现在就能做)

1

进沙箱控制台

支付宝账号登录 → https://open.alipay.com/develop/sandbox/app。页面直接给你 沙箱 APPID(形如 9021000xxxxxxxxx)。

2

选「公钥模式」+ 生成密钥

加签方式选 公钥模式(对应代码 LoadAliPayPublicKey)。下载官方密钥生成工具(有 Mac 版)→ 格式 PKCS8、长度 2048 → 生成得到 应用私钥应用公钥

3

上传应用公钥 → 换回支付宝公钥

应用公钥粘贴到沙箱「公钥模式」处保存,页面会生成一串 支付宝公钥

别搞混:你上传的是「应用公钥」;要复制回配置的是支付宝生成的「支付宝公钥」。
4

拿沙箱买家账号

沙箱页「沙箱账号」标签提供买家账号(邮箱)+ 登录密码 + 支付密码(假钱)。扫码付需装沙箱版支付宝 App(同页二维码),或用沙箱网页登录买家付款。

四、生产密钥申请(5 步 · 收真钱)

1

企业实名

登录 open.alipay.com → 用企业支付宝账号完成企业实名认证(营业执照、法人/对公信息)。个体户用对应类型亦可。

2

创建生产应用

控制台 → 创建应用 → 选「网页 & 移动应用」→ 得到 正式 APPID

3

签约「电脑网站支付」

应用里「添加能力/产品签约」→ 签约「电脑网站支付」(对应 alipay.trade.page.pay)。需提交企业资质、网站地址(基本要备案域名)、经营信息。审核约 1–3 个工作日。

4

配置生产密钥(同沙箱操作)

密钥工具生成应用私钥/公钥 → 应用「接口加签方式 → 公钥模式」上传应用公钥 → 复制返回的「支付宝公钥」。

5

切到生产

把正式 APPID/应用私钥/支付宝公钥写入商户配置,production: true(代码走正式网关),base_url 用正式 HTTPS 备案域名。

五、三样东西 → 配置对应

拿到的来源填到哪
APPID沙箱页面 / 生产应用页直接给config.yaml → alipay_sandbox.app_id(或 merchants 表)
应用私钥你用密钥工具生成,自己保管环境变量 ALIPAY_APP_PRIVATE_KEY
支付宝公钥上传应用公钥后支付宝生成环境变量 ALIPAY_PUBLIC_KEY
cd /Users/wangjia/code/pay
export ALIPAY_APP_PRIVATE_KEY="MIIEv...应用私钥..."
export ALIPAY_PUBLIC_KEY="MIIBIj...支付宝公钥..."
# config.yaml 里 alipay_sandbox.enabled=true、填上 app_id
go run .
# 浏览器开 http://localhost:8080 选套餐 → 跳沙箱收银台 → 沙箱买家账号付款
本机能测「下单 → 跳收银台 → 扫码付成功」整条链路;唯一测不到的是异步回调 notify(支付宝回调不到本机)。但服务内置的 query_sync 主动查单兜底会在 30 秒内把订单补成「已支付」,结果页照样变 ✅。要完整验证 notify 需内网穿透或部署到公网服务器。

六、推进路线(两线并行,互不等待)

A · 联调线(现在) 拿沙箱密钥 本机跑通支付宝沙箱 代码就绪 · 等生产 B · 上线线(并行) 域名转入 ICP 备案 企业实名+签约 生产密钥 换密钥+域名→ 上线收真钱

两条线独立推进:A 线现在就能把代码全跑通,B 线(域名/备案/签约)慢慢走;B 线齐了,只需「换生产密钥 + 换备案域名」即可上线,主流程一行不改(Merchant.Production + base_url)。