支付宝H5支付的商户私钥在哪里获取?
明确结论
支付宝 H5 支付中的”商户私钥”,指的是商户为支付宝开放平台应用自行生成并保存在本地的应用私钥。这个私钥不是支付宝提供的,也无法从支付宝开放平台下载。
使用支付宝开放平台密钥工具时,通常会同时生成两份密钥:
- 应用私钥:由商户保管,用来为请求签名。
- 应用公钥:上传至支付宝开放平台,用来验证商户签名。
应用公钥上传后,平台会提供支付宝公钥,用于验证支付宝返回的数据和异步通知签名。支付宝公钥与应用私钥并不配对,两者不能互相替代。
为什么找不到商户私钥
私钥只能由商户持有。如果平台支持重新下载私钥,私钥可能在传输或平台存储过程中泄露。因此,支付宝不会替商户生成私钥,也不会提供私钥下载。
实际配置时,最容易混淆的是以下三个概念:
| 密钥 | 来源 | 用途 |
|---|---|---|
| 应用私钥(商户私钥) | 商户本地生成 | 对支付请求签名 |
| 应用公钥 | 与应用私钥同时生成 | 上传至支付宝开放平台 |
| 支付宝公钥 | 支付宝开放平台提供 | 验证支付宝响应和通知签名 |
如果密钥工具界面显示”支付宝公钥”,一般说明应用公钥已经配置完成,页面当前展示的是支付宝一侧的验签公钥。原始应用私钥仍只保存在生成密钥时所选的位置。
正确的获取和配置步骤
1. 本地生成应用密钥对
在可信的本地环境中,使用支付宝开放平台密钥工具生成 RSA2 密钥。建议使用 RSA2,也就是 RSA 2048 位密钥和 SHA256 签名。
生成后应立即分别保存:
应用私钥:保存在商户服务器,用于签名
应用公钥:配置到支付宝开放平台
密钥工具的版本不同,文件名或界面文字也可能不同,应以工具实际生成的结果为准。需要查找的是”应用私钥”或”商户应用私钥”,不是”支付宝私钥”。
2. 上传应用公钥
进入支付宝开放平台中的对应应用,在接口加签方式或密钥配置页面选择与程序一致的模式。
如果使用普通公钥模式:
- 将本地生成的应用公钥上传至开放平台。
- 保存配置。
- 获取平台提供的支付宝公钥。
- 将支付宝公钥填入程序的验签参数。
不要把应用公钥填入 alipay_public_key,也不要把支付宝公钥当作应用私钥使用。
3. 在服务端配置应用私钥
以支付宝 Java SDK 的普通公钥模式为例:
AlipayClient alipayClient = new DefaultAlipayClient(
"https://openapi.alipay.com/gateway.do",
appId,
merchantPrivateKey,
"json",
"UTF-8",
alipayPublicKey,
"RSA2"
);
其中:
merchantPrivateKey = 本地生成的应用私钥
alipayPublicKey = 支付宝开放平台提供的支付宝公钥
发起 H5 支付通常使用 alipay.trade.wap.pay:
AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest();
request.setReturnUrl("https://example.com/pay/return");
request.setNotifyUrl("https://example.com/pay/notify");
request.setBizContent("""
{
"out_trade_no": "ORDER_202609090001",
"total_amount": "0.01",
"subject": "测试订单",
"product_code": "QUICK_WAP_WAY"
}
""");
AlipayTradeWapPayResponse response = alipayClient.pageExecute(request);
String paymentForm = response.getBody();
代码中的私钥应从服务器的安全配置中读取,不能直接写进源码。例如:
String merchantPrivateKey = System.getenv("ALIPAY_APP_PRIVATE_KEY");
如果应用私钥已经丢失
应用私钥通常无法通过应用公钥或支付宝公钥反推出,也不能从支付宝开放平台找回。
此时需要:
- 在本地重新生成一对应用公钥和应用私钥。
- 妥善保存新的应用私钥。
- 将新的应用公钥重新配置到支付宝开放平台。
- 更新服务器上的应用私钥配置。
- 检查程序使用的签名方式、密钥格式和平台配置是否完全一致。
- 完成联调验证后,再恢复正式交易。
应用公钥更换后,如果请求仍使用旧私钥签名,将无法通过验签。因此,平台配置与服务端配置必须同时更新。
普通公钥模式与证书模式不要混用
如果应用使用证书模式,通常需要配置:
- 应用私钥
- 应用公钥证书
- 支付宝公钥证书
- 支付宝根证书
证书模式同样需要本地应用私钥,只是验签配置不再使用单独的支付宝公钥字符串。初始化 SDK 时,应调用对应的证书模式接口,不能把证书文件内容直接填入普通公钥参数。
具体采用哪种模式,要以应用后台的当前配置和 SDK 的初始化方式为准。
注意事项
- 应用私钥只能保存在服务端,不能写入 H5 页面、JavaScript、App 安装包或前端配置。
- 不要通过聊天工具、工单截图或公共代码仓库传递私钥。
- 将私钥复制到配置文件时,要保留完整内容,避免缺行、多余空格或换行处理错误。
- 部分 SDK 要求使用 PKCS8 格式,部分旧版示例可能采用 PKCS1 格式。应根据所用 SDK 的要求转换格式,不能只修改文件扩展名。
- 正式环境和沙箱环境可能使用不同的应用与密钥配置,不要交叉使用。
- 支付异步通知必须使用支付宝公钥或支付宝公钥证书验签,不能只根据页面跳转结果判断支付是否成功。
- 如果密钥曾经泄露,应立即更换密钥对,不要继续使用原私钥。
备注:内容仅供参考。
