# 支付接入功能配置说明

## 功能概述

本项目已成功集成支付宝和PayPal两种支付方式，提供完整的支付解决方案。

## 支付方式

### 1. 支付宝 (Alipay)
- **适用场景**: 中国大陆用户
- **支持货币**: 人民币 (CNY)
- **支付流程**: 网页支付
- **回调机制**: 异步通知 + 同步返回

### 2. PayPal
- **适用场景**: 国际用户
- **支持货币**: 美元 (USD)、欧元 (EUR) 等
- **支付流程**: PayPal账户支付
- **回调机制**: Webhook通知 + 同步返回

## 配置参数

### 开发环境配置 (application-dev.properties)

```properties
# 支付宝配置 (开发环境)
alipay.app-id=your_app_id
alipay.private-key=your_private_key
alipay.public-key=your_public_key
alipay.gateway-url=https://openapi.alipaydev.com/gateway.do
alipay.charset=UTF-8
alipay.sign-type=RSA2
alipay.notify-url=http://localhost:8080/payment/alipay/notify
alipay.return-url=http://localhost:8080/payment/alipay/return

# PayPal配置 (开发环境)
paypal.client-id=your_paypal_client_id
paypal.client-secret=your_paypal_client_secret
paypal.mode=sandbox
paypal.return-url=http://localhost:8080/payment/paypal/return
paypal.cancel-url=http://localhost:8080/payment/paypal/cancel
```

### 生产环境配置 (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}

# PayPal配置 (生产环境)
paypal.client-id=${PAYPAL_CLIENT_ID}
paypal.client-secret=${PAYPAL_CLIENT_SECRET}
paypal.mode=live
paypal.return-url=${PAYPAL_RETURN_URL}
paypal.cancel-url=${PAYPAL_CANCEL_URL}
```

## 数据库表结构

### payments 表
```sql
CREATE TABLE payments (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  order_id VARCHAR(50) NOT NULL UNIQUE,
  amount DECIMAL(10,2) NOT NULL,
  currency VARCHAR(3) NOT NULL DEFAULT 'CNY',
  payment_method VARCHAR(20) NOT NULL,
  status VARCHAR(20) NOT NULL DEFAULT 'PENDING',
  description VARCHAR(500),
  external_transaction_id VARCHAR(100),
  callback_url VARCHAR(1000),
  return_url VARCHAR(1000),
  created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  paid_at TIMESTAMP NULL,
  user_id BIGINT,
  FOREIGN KEY (user_id) REFERENCES users(id)
);
```

## API 端点

### 支付相关端点
- `GET /payment/create` - 显示支付表单
- `POST /payment/create` - 创建支付订单
- `GET /payment/history` - 支付记录列表
- `GET /payment/detail/{id}` - 支付详情

### 支付宝回调端点
- `POST /payment/alipay/notify` - 异步通知
- `GET /payment/alipay/return` - 同步返回

### PayPal回调端点
- `GET /payment/paypal/return` - 支付返回
- `GET /payment/paypal/cancel` - 支付取消
- `POST /payment/paypal/webhook` - Webhook通知

## 支付状态

- `PENDING` - 待支付
- `PROCESSING` - 处理中
- `SUCCESS` - 支付成功
- `FAILED` - 支付失败
- `CANCELLED` - 已取消
- `REFUNDED` - 已退款

## 使用说明

### 1. 配置支付参数
在 `application-dev.properties` 中配置您的支付参数：
- 支付宝：需要申请支付宝开放平台应用
- PayPal：需要申请PayPal开发者账户

### 2. 启动应用
```bash
mvn spring-boot:run
```

### 3. 访问支付功能
- 登录后访问 `/payment/create` 创建支付
- 访问 `/payment/history` 查看支付记录

## 安全注意事项

1. **密钥管理**: 生产环境使用环境变量存储敏感信息
2. **签名验证**: 所有回调都进行签名验证
3. **HTTPS**: 生产环境必须使用HTTPS
4. **权限控制**: 用户只能查看自己的支付记录

## 测试建议

1. **支付宝测试**: 使用支付宝沙箱环境进行测试
2. **PayPal测试**: 使用PayPal沙箱模式进行测试
3. **回调测试**: 使用ngrok等工具测试本地回调

## 扩展功能

可以进一步扩展的功能：
- 退款功能
- 支付统计
- 支付报表
- 批量支付
- 分期付款

