# 简介
支付宝开放平台的应用管理体系,使用了公私钥的机制,商家可通过设置接口加签方式为自身应用配置 **公私钥**/**公私钥证书** 来保障商家应用和支付宝交互的安全性。
# 第一步:选择加签模式
商家可根据接入产品需求选择 **公钥证书模式** 或 **公钥模式**。
- 企业开发者若涉及 [资金类支出接口](https://opendocs.alipay.com/common/02kg66) 接入,必须使用 **公钥证书** 方式。
- 个人开发者不涉及到资金类接口,建议使用 **公钥模式** 进行加签。
更多公钥证书与公钥的区别详情可查看 [公钥与公钥证书区别](https://opendocs.alipay.com/common/02kipl)。

# 第二步:获取应用公私钥/公钥证书
根据需求商家可通过 [支付宝开放平台开发助手](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://openhome.alipay.com/platform/home.htm),进入 对应应用详情页 > **设置 **> **开发设置** > **接口加签方式**,点击 **设置**,上传获取到的 CSR 文件,以此来获取 **应用公钥证书 **或 **支付宝根证书**、**支付宝公钥证书** 等信息,用于后续接口调用。

# 附录
## 公钥模式、证书模式接口配置说明
### 公钥模式配置示例
```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 | 支付宝根证书文件本地路径。 | 获取详情可查看 **接口加签方式**。 |
## 加签、验签机制说明
- 商家应用使用自己的 **私钥**/**私钥证书** 对消息加签之后,将消息和签名传递给支付宝,支付宝则使用应用的 **公钥**/**公钥证书** 验证消息的真实性(来自于合法应用的真实消息)。
**注意**:商家应用必须保障应用私钥的安全性,从而保障应用和和支付宝交互的安全性。

- 对于支付宝返回消息给商家应用的情形,应用则使用支付宝的 **支付宝公钥** 或 **支付宝公钥证书及支付宝根证书** 等来验证返回消息的真实性。