支付宝开放平台「接口内容加密方式」设置指南
一、这个东西是干嘛的
它和你已经配好的「接口加签方式(RSA2 公私钥)」不是一回事,别混了:
表格
| 配置项 | 作用 | 是否必填 |
|---|---|---|
| 接口加签方式(RSA2 / 公钥证书) | 给报文做签名 / 验签,防止内容被篡改 | 必填,所有应用都要 |
| 接口内容加密方式(AES) | 把 bizContent 里的请求 / 响应正文对称加密成密文,防止敏感字段在传输中被偷看 | 选填,默认不开 |
简单说:加签管 "内容有没有被篡改",内容加密管 "内容有没有被人偷看"。
二、设置入口
登录 open.alipay.com 开放平台控制台。
进入你的商城应用 → 左侧菜单 「开发设置」。
往下翻,在「接口加签方式」那一块下面,就能看到 「接口内容加密方式」。
点 「设置」/「启用」,有两个选项:
不加密(默认):报文里的 bizContent 是 JSON 明文。
启用加密:点启用后,支付宝会随机生成一串 AES 密钥(Base64 字符串,长约 32 位),同时把支付宝公钥也给你。
三、你是商城做支付,到底要不要开?
结论:普通商城接支付宝 APP 支付 / 手机网站支付 / 电脑网站支付 / 当面付,默认选「不加密」就能跑通。 不用特意去开。
只有下面这些情况才必须开:
你要用「获取会员手机号」能力(用户一键授权拿支付宝绑定的手机号做注册 / 登录)—— 这个接口强制要求加密,不开直接报错
isv.missing-encrypt-key。你要用运动数据、实名信息、身份证号等敏感信息类 OpenAPI。
你公司内部安全规范要求所有出站报文必须加密。
审核时支付宝运营同学主动通知你要加。
如果你只是做商城交易闭环(下单 → 支付宝支付 → 回调通知),保持默认「不加密」即可,不要手贱去开 —— 开了之后你服务端发请求、收异步通知都要自己写 AES 加解密逻辑,多一层出错点,没必要。
四、如果确实要开,后续怎么用
点启用后,页面会显示:
接口内容加密密钥(AES 密钥):一串 Base64 字符串,比如
Ab12Xy...==支付宝公钥(如果你之前用的是公钥模式,会和这个一起给)
这串 AES 密钥你要存到自己服务端配置里,和应用私钥一样重要,泄露了等于报文门大开。
代码层面的影响:
请求方向:你调用支付宝 OpenAPI 时,把原来的 JSON
bizContent用 AES 加密成密文,放到biz_content字段里传过去(SDK 一般有现成方法,比如 Java SDK 的AlipayClient在配置了 AES 密钥后会自动加解密,不用自己拼)。响应方向:支付宝返回的
response也是密文,SDK 自动解密成 JSON 对象给你。异步通知:支付宝异步通知你支付结果时,
async_notify里的报文也会用同一个 AES 密钥加密,你的通知验签逻辑要改成 "先验签 → 再 AES 解密 → 再解析 JSON"。沙箱和线上是两套密钥:沙箱控制台也要单独配一遍,不然本地调试会报
isv.missing-encrypt-key。
五、常见报错对应
isv.missing-encrypt-key(缺少加密配置):你调的那个接口要求加密,但后台没开接口内容加密方式。去「开发设置」启用即可。开了加密后支付回调验签失败:你服务端的 SDK 没把 AES 密钥配进去,导致密文没解开,自然验签不过。检查 SDK 初始化时有没有传
encryptKey参数。开了加密后想关掉:在「开发设置」里点「关闭加密」即可,但已经在用加密的接口会立刻报错,确认所有接口都切回明文再关。
六、给你的建议
你现在是商城刚申请应用阶段:
先去「开发设置」看一眼,如果没报错、没强制要求,就保持 "不加密" 别动。
等后面真的要做 "支付宝一键授权手机号登录" 这个功能时,再回来启用加密、把 AES 密钥配到服务端 SDK 里。
启用后那串 AES 密钥,和应用私钥一起存到服务器配置中心,别写死在代码里、别提交到 Git。
