# 简介 支付宝开放平台的应用管理体系,使用了公私钥的机制,商家可通过设置接口加签方式为自身应用配置 **公私钥**/**公私钥证书** 来保障商家应用和支付宝交互的安全性。 # 第一步:选择加签模式 商家可根据接入产品需求选择 **公钥证书模式** 或 **公钥模式**。 - 企业开发者若涉及 [资金类支出接口](https://opendocs.alipay.com/common/02kg66) 接入,必须使用 **公钥证书** 方式。
- 个人开发者不涉及到资金类接口,建议使用 **公钥模式** 进行加签。
更多公钥证书与公钥的区别详情可查看 [公钥与公钥证书区别](https://opendocs.alipay.com/common/02kipl)。
![第一步:选择加签模式.png](https://cdn.nlark.com/yuque/0/2022/png/179989/1648697657854-c397bde0-14f0-4b6d-b8f4-57cd469a2939.png#align=left&display=inline&height=851&originHeight=851&originWidth=1832&size=188345&status=done&style=none&width=1832) # 第二步:获取应用公私钥/公钥证书 根据需求商家可通过 [支付宝开放平台开发助手](https://opendocs.alipay.com/common/02kipk) 生成公私钥/公钥证书。 - 公钥模式获取详情可查看 [获取公钥](https://opendocs.alipay.com/common/02kipl#%E5%85%AC%E9%92%A5%E6%96%B9%E5%BC%8F)。
- 公钥证书模式获取详情可查看 [获取公钥证书](https://opendocs.alipay.com/common/02kipl#%E5%85%AC%E9%92%A5%E8%AF%81%E4%B9%A6%E6%96%B9%E5%BC%8F)。
![](https://gw.alipayobjects.com/zos/skylark-tools/public/files/5ddd818696ade00b7d1ecccc742e5cc5.jpeg?x-oss-process=image/resize,w_2000#align=left&display=inline&height=580&originHeight=1556&originWidth=2000&status=done&style=none&width=746) # 第三步:配置加签公钥/证书 登录支付宝 [开放平台](https://openhome.alipay.com/platform/home.htm),进入 对应应用详情页 > **设置 **> **开发设置** > **接口加签方式**,点击 **设置**,上传获取到的 CSR 文件,以此来获取 **应用公钥证书 **或 **支付宝根证书**、**支付宝公钥证书** 等信息,用于后续接口调用。
![](http://mdn.alipayobjects.com/afts/img/A*3xVCSIHo0kMAAAAAAAAAAAAAAa8wAA/original?bz=openpt_doc&t=ym2AiMMJFsNad9a8XuhpUgAAAABkMK8AAAAA#align=left&display=inline&height=864&originHeight=864&originWidth=1955&status=done&style=none&width=1955) # 附录 ## 公钥模式、证书模式接口配置说明 ### 公钥模式配置示例 ```java AlipayConfig alipayConfig = new AlipayConfig(); //设置网关地址 alipayConfig.setServerUrl(URL); //设置应用Id alipayConfig.setAppId(APPID); //设置应用私钥 alipayConfig.setPrivateKey(PRIVATE_KEY); //设置请求格式,固定值json alipayConfig.setFormat("json"); //设置字符集 alipayConfig.setCharset(CHARSET); //设置支付宝公钥 alipayConfig.setAlipayPublicKey(ALIPAY_PUBLIC_KEYalipay_public_key); //设置签名类型 alipayConfig.setSignType(SIGN_TYPE); //构造client AlipayClient alipayClient = new DefaultAlipayClient(alipayConfig); ``` #### 关键参数说明 | **配置参数** | **示例值解释** | **获取方式/示例值** | | --- | --- | --- | | URL | 支付宝网关(固定)。 | `https://openapi.alipay.com/gateway.do` | | APPID | APPID 即创建小程序后生成。 | 获取详情可查看 [获取 APPID](https://opendocs.alipay.com/common/02nebp)。 | | APP_PRIVATE_KEY | 开发者私钥,由开发者自己生成。 | 获取详情可查看 [接口加签方式](https://opendocs.alipay.com/common/02mriz)。 | | FORMAT | 参数返回格式,只支持 JSON(固定)。 | JSON | | CHARSET | 编码集,支持 GBK/UTF-8。 | 开发者根据实际工程编码配置。 | | ALIPAY_PUBLIC_KEY | 支付宝公钥,由支付宝生成。 | 获取详情可查看 **接口加签方式**。 | | SIGN_TYPE | 生成签名字符串所使用的签名算法类型,目前支持 RSA2 和 RSA,推荐使用 RSA2。 | RSA2 | ### 公钥证书模式配置示例 ```java AlipayConfig alipayConfig = new AlipayConfig(); //设置网关地址 alipayConfig.setServerUrl(URL); //设置应用Id alipayConfig.setAppId(APPID); //设置应用私钥 alipayConfig.setPrivateKey(PRIVATE_KEY); //设置应用公钥证书路径 alipayConfig.setAppCertPath(app_cert_path); //设置支付宝公钥证书路径 alipayConfig.setAlipayPublicCertPath(alipay_cert_path); //设置支付宝根证书路径 alipayConfig.setRootCertPath(alipay_root_cert_path); //设置请求格式,固定值json alipayConfig.setFormat("json"); //设置字符集 alipayConfig.setCharset(CHARSET); //设置签名类型 alipayConfig.setSignType(SIGN_TYPE); //构造client DefaultAlipayClient alipayClient = new DefaultAlipayClient(alipayConfig); ``` #### 关键参数说明 | **配置参数** | **示例值解释** | **获取方式/示例值** | | --- | --- | --- | | URL | 支付宝网关(固定)。 | `https://openapi.alipay.com/gateway.do` | | APPID | APPID 即创建小程序后生成。 | 获取详情可查看 [获取 APPID](https://opendocs.alipay.com/common/02nebp)。 | | APP_PRIVATE_KEY | 开发者私钥,由开发者自己生成。 | 获取详情可查看 [接口加签方式](https://opendocs.alipay.com/common/02mriz)。 | | FORMAT | 参数返回格式,只支持 JSON(固定)。 | JSON | | CHARSET | 编码集,支持 GBK/UTF-8。 | 开发者根据实际工程编码配置。 | | SIGN_TYPE | 商家生成签名字符串所使用的签名算法类型,目前支持 RSA2 和 RSA,推荐使用 RSA2。 | RSA2 | | app_cert_path | 应用公钥证书文件本地路径。 | 获取详情可查看 **接口加签方式**。 | | alipay_cert_path | 支付宝公钥证书文件本地路径。 | 获取详情可查看 **接口加签方式**。 | | alipay_root_cert_path | 支付宝根证书文件本地路径。 | 获取详情可查看 **接口加签方式**。 | ## 加签、验签机制说明 - 商家应用使用自己的 **私钥**/**私钥证书** 对消息加签之后,将消息和签名传递给支付宝,支付宝则使用应用的 **公钥**/**公钥证书** 验证消息的真实性(来自于合法应用的真实消息)。
**注意**:商家应用必须保障应用私钥的安全性,从而保障应用和和支付宝交互的安全性。
![](https://cdn.nlark.com/yuque/0/2020/png/179989/1595486386044-9f5be003-8626-44a3-ba3b-eec2c6326c75.png#align=left&display=inline&height=211&originHeight=317&originWidth=830&status=done&style=none&width=553) - 对于支付宝返回消息给商家应用的情形,应用则使用支付宝的 **支付宝公钥** 或 **支付宝公钥证书及支付宝根证书** 等来验证返回消息的真实性。