Files
AIGC/demo/ALIPAY_SETUP_GUIDE.md

223 lines
6.4 KiB
Markdown
Raw Normal View History

# 支付宝支付集成准备指南
## 一、必需准备项
### 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使用支付宝密钥生成工具
- 下载支付宝官方密钥生成工具
- 生成密钥对RSA22048位
- 保存私钥(用于配置 `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