2025-11-03 10:55:48 +08:00
|
|
|
|
# 支付宝支付集成准备指南
|
|
|
|
|
|
|
|
|
|
|
|
## 一、必需准备项
|
|
|
|
|
|
|
|
|
|
|
|
### 1. 支付宝商户账号
|
|
|
|
|
|
- **个人开发者**:注册支付宝开放平台账号(https://open.alipay.com)
|
|
|
|
|
|
- **企业用户**:需要营业执照等企业资质,申请企业支付宝账号
|
|
|
|
|
|
|
|
|
|
|
|
### 2. 创建应用并获取配置信息
|
|
|
|
|
|
登录支付宝开放平台后,需要创建应用并获取以下配置:
|
|
|
|
|
|
|
|
|
|
|
|
#### 开发环境(沙箱测试)
|
|
|
|
|
|
- **APPID(应用ID)**:`alipay.app-id`
|
|
|
|
|
|
- **应用私钥(Private Key)**:`alipay.private-key`
|
|
|
|
|
|
- **支付宝公钥(Public Key)**:`alipay.public-key`
|
|
|
|
|
|
- **网关地址**:`https://openapi.alipaydev.com/gateway.do`(沙箱)
|
|
|
|
|
|
- **字符集**:`UTF-8`
|
|
|
|
|
|
- **签名方式**:`RSA2`
|
|
|
|
|
|
|
|
|
|
|
|
#### 生产环境
|
|
|
|
|
|
- **网关地址**:`https://openapi.alipay.com/gateway.do`
|
|
|
|
|
|
- 其他配置同开发环境
|
|
|
|
|
|
|
|
|
|
|
|
### 3. 密钥生成和配置
|
|
|
|
|
|
支付宝使用RSA2签名,需要生成密钥对:
|
|
|
|
|
|
|
|
|
|
|
|
#### 方法1:使用支付宝密钥生成工具
|
|
|
|
|
|
- 下载支付宝官方密钥生成工具
|
|
|
|
|
|
- 生成密钥对(RSA2,2048位)
|
|
|
|
|
|
- 保存私钥(用于配置 `alipay.private-key`)
|
|
|
|
|
|
- 将公钥上传到支付宝开放平台,获取支付宝公钥(用于配置 `alipay.public-key`)
|
|
|
|
|
|
|
|
|
|
|
|
#### 方法2:使用OpenSSL生成
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 生成私钥
|
|
|
|
|
|
openssl genrsa -out app_private_key.pem 2048
|
|
|
|
|
|
|
|
|
|
|
|
# 生成公钥
|
|
|
|
|
|
openssl rsa -in app_private_key.pem -pubout -out app_public_key.pem
|
|
|
|
|
|
|
|
|
|
|
|
# 查看私钥内容(去除头尾,保留中间部分配置到private-key)
|
|
|
|
|
|
cat app_private_key.pem
|
|
|
|
|
|
|
|
|
|
|
|
# 将app_public_key.pem内容上传到支付宝开放平台
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**重要**:
|
|
|
|
|
|
- 私钥需要去除 `-----BEGIN RSA PRIVATE KEY-----` 和 `-----END RSA PRIVATE KEY-----`
|
|
|
|
|
|
- 私钥和公钥配置在配置文件中时,需要去掉换行符或使用转义
|
|
|
|
|
|
|
|
|
|
|
|
### 4. 配置回调地址
|
|
|
|
|
|
需要配置两个回调地址:
|
|
|
|
|
|
|
|
|
|
|
|
#### 异步通知地址(notify-url)
|
|
|
|
|
|
- 用于接收支付宝的支付结果异步通知
|
|
|
|
|
|
- 必须是公网可访问的HTTPS地址
|
|
|
|
|
|
- 示例:`https://yourdomain.com/api/payments/alipay/notify`
|
|
|
|
|
|
- **注意**:开发环境可以使用ngrok等内网穿透工具
|
|
|
|
|
|
|
|
|
|
|
|
#### 同步返回地址(return-url)
|
|
|
|
|
|
- 用户支付完成后跳转的页面
|
|
|
|
|
|
- 可以是HTTP或HTTPS地址
|
|
|
|
|
|
- 示例:`https://yourdomain.com/api/payments/alipay/return`
|
|
|
|
|
|
|
|
|
|
|
|
### 5. 数据库表准备
|
|
|
|
|
|
项目已经包含了Payment相关表,确保数据库已创建:
|
|
|
|
|
|
- `payments` 表
|
|
|
|
|
|
- `orders` 表
|
|
|
|
|
|
|
|
|
|
|
|
### 6. Maven依赖(已配置)
|
|
|
|
|
|
项目已包含支付宝SDK依赖:
|
|
|
|
|
|
```xml
|
|
|
|
|
|
<dependency>
|
|
|
|
|
|
<groupId>com.github.javen205</groupId>
|
|
|
|
|
|
<artifactId>IJPay-AliPay</artifactId>
|
|
|
|
|
|
<version>2.9.12.1</version>
|
|
|
|
|
|
</dependency>
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 二、配置文件设置
|
|
|
|
|
|
|
|
|
|
|
|
### 开发环境配置(application-dev.properties)
|
|
|
|
|
|
```properties
|
|
|
|
|
|
# 支付宝配置 (开发环境 - 沙箱测试)
|
|
|
|
|
|
alipay.app-id=你的沙箱APPID
|
|
|
|
|
|
alipay.private-key=你的应用私钥(去除头尾和换行)
|
|
|
|
|
|
alipay.public-key=支付宝公钥(从开放平台获取)
|
|
|
|
|
|
alipay.gateway-url=https://openapi.alipaydev.com/gateway.do
|
|
|
|
|
|
alipay.charset=UTF-8
|
|
|
|
|
|
alipay.sign-type=RSA2
|
|
|
|
|
|
alipay.notify-url=https://your-ngrok-url.ngrok-free.dev/api/payments/alipay/notify
|
|
|
|
|
|
alipay.return-url=https://your-ngrok-url.ngrok-free.dev/api/payments/alipay/return
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 生产环境配置(application-prod.properties)
|
|
|
|
|
|
```properties
|
|
|
|
|
|
# 支付宝配置 (生产环境)
|
|
|
|
|
|
alipay.app-id=${ALIPAY_APP_ID}
|
|
|
|
|
|
alipay.private-key=${ALIPAY_PRIVATE_KEY}
|
|
|
|
|
|
alipay.public-key=${ALIPAY_PUBLIC_KEY}
|
|
|
|
|
|
alipay.gateway-url=https://openapi.alipay.com/gateway.do
|
|
|
|
|
|
alipay.charset=UTF-8
|
|
|
|
|
|
alipay.sign-type=RSA2
|
|
|
|
|
|
alipay.notify-url=${ALIPAY_NOTIFY_URL}
|
|
|
|
|
|
alipay.return-url=${ALIPAY_RETURN_URL}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 三、测试步骤
|
|
|
|
|
|
|
|
|
|
|
|
### 1. 沙箱测试环境准备
|
|
|
|
|
|
1. 登录支付宝开放平台:https://open.alipay.com
|
|
|
|
|
|
2. 进入"沙箱环境"
|
|
|
|
|
|
3. 获取沙箱APPID
|
|
|
|
|
|
4. 下载"支付宝密钥生成工具",生成密钥对
|
|
|
|
|
|
5. 上传公钥到支付宝,获取支付宝公钥
|
|
|
|
|
|
6. 配置沙箱测试账号(买家账号和卖家账号)
|
|
|
|
|
|
|
|
|
|
|
|
### 2. 内网穿透配置(开发测试)
|
|
|
|
|
|
如果本地开发,需要使用ngrok等工具暴露本地服务:
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 安装ngrok
|
|
|
|
|
|
# 启动本地服务(端口8080)
|
|
|
|
|
|
# 使用ngrok暴露
|
|
|
|
|
|
ngrok http 8080
|
|
|
|
|
|
# 获取https地址,配置到notify-url和return-url
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 3. 功能测试
|
|
|
|
|
|
- 创建支付订单
|
|
|
|
|
|
- 生成支付宝二维码
|
|
|
|
|
|
- 使用沙箱账号扫码支付
|
|
|
|
|
|
- 验证异步通知接收
|
|
|
|
|
|
- 验证支付状态更新
|
|
|
|
|
|
|
|
|
|
|
|
## 四、已实现的功能
|
|
|
|
|
|
|
|
|
|
|
|
### 后端接口
|
|
|
|
|
|
✅ `POST /api/payments/alipay/create` - 创建支付宝支付并生成二维码
|
|
|
|
|
|
✅ `POST /api/payments/alipay/notify` - 接收支付宝异步通知
|
|
|
|
|
|
✅ `GET /api/payments/alipay/return` - 处理支付宝同步返回
|
|
|
|
|
|
|
|
|
|
|
|
### 前端页面
|
|
|
|
|
|
✅ 支付模态框组件(PaymentModal.vue)
|
|
|
|
|
|
✅ 订阅页面支付集成(Subscription.vue)
|
|
|
|
|
|
|
|
|
|
|
|
### 核心服务
|
|
|
|
|
|
✅ `AlipayService` - 支付宝服务封装
|
|
|
|
|
|
- `createPayment()` - 创建支付订单
|
|
|
|
|
|
- `handleNotify()` - 处理异步通知
|
|
|
|
|
|
- `handleReturn()` - 处理同步返回
|
|
|
|
|
|
|
|
|
|
|
|
## 五、常见问题
|
|
|
|
|
|
|
|
|
|
|
|
### 1. 签名验证失败
|
|
|
|
|
|
- 检查私钥和公钥是否正确配置
|
|
|
|
|
|
- 确认私钥格式正确(去除头尾和换行)
|
|
|
|
|
|
- 确认使用RSA2签名方式
|
|
|
|
|
|
|
|
|
|
|
|
### 2. 回调地址无法访问
|
|
|
|
|
|
- 确保回调地址是公网可访问的HTTPS地址
|
|
|
|
|
|
- 开发环境可以使用ngrok等内网穿透工具
|
|
|
|
|
|
- 检查防火墙和服务器配置
|
|
|
|
|
|
|
|
|
|
|
|
### 3. 沙箱测试账号
|
|
|
|
|
|
- 在支付宝开放平台沙箱环境中获取测试账号
|
|
|
|
|
|
- 使用"沙箱买家"账号进行支付测试
|
|
|
|
|
|
- 注意:沙箱环境有金额限制
|
|
|
|
|
|
|
|
|
|
|
|
### 4. 生产环境上线
|
|
|
|
|
|
- 申请正式应用(需要审核)
|
|
|
|
|
|
- 配置正式环境的APPID和密钥
|
|
|
|
|
|
- 确保回调地址使用正式域名
|
|
|
|
|
|
- 完成商户资质认证
|
|
|
|
|
|
|
|
|
|
|
|
## 六、安全检查
|
|
|
|
|
|
|
|
|
|
|
|
1. **密钥安全**
|
|
|
|
|
|
- 私钥绝对不能泄露
|
|
|
|
|
|
- 生产环境使用环境变量或密钥管理服务
|
|
|
|
|
|
- 不要将密钥提交到代码仓库
|
|
|
|
|
|
|
|
|
|
|
|
2. **回调验证**
|
|
|
|
|
|
- 所有回调必须验证签名
|
|
|
|
|
|
- 验证订单金额和状态
|
|
|
|
|
|
- 防止重复处理
|
|
|
|
|
|
|
|
|
|
|
|
3. **HTTPS要求**
|
|
|
|
|
|
- 生产环境必须使用HTTPS
|
|
|
|
|
|
- 回调地址必须是HTTPS
|
|
|
|
|
|
|
|
|
|
|
|
## 七、当前项目状态
|
|
|
|
|
|
|
|
|
|
|
|
✅ 代码已实现
|
|
|
|
|
|
✅ Maven依赖已配置
|
|
|
|
|
|
⚠️ 需要配置支付宝账号和密钥
|
|
|
|
|
|
⚠️ 需要配置回调地址(开发环境可用ngrok)
|
|
|
|
|
|
|
|
|
|
|
|
## 八、快速开始
|
|
|
|
|
|
|
|
|
|
|
|
1. **注册支付宝开放平台账号**
|
|
|
|
|
|
2. **创建应用获取APPID**
|
|
|
|
|
|
3. **生成密钥对并配置**
|
|
|
|
|
|
4. **配置回调地址(开发环境使用ngrok)**
|
|
|
|
|
|
5. **更新application-dev.properties配置文件**
|
|
|
|
|
|
6. **启动项目测试支付功能**
|
|
|
|
|
|
|
|
|
|
|
|
## 九、参考文档
|
|
|
|
|
|
|
|
|
|
|
|
- 支付宝开放平台:https://open.alipay.com
|
|
|
|
|
|
- 支付宝开发者文档:https://opendocs.alipay.com
|
|
|
|
|
|
- IJPay文档:https://github.com/Javen205/IJPay
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-11-04 11:06:08 +08:00
|
|
|
|
|
2025-11-04 18:18:49 +08:00
|
|
|
|
|
2025-11-05 18:18:53 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-11-07 19:09:50 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|