# 💳 支付功能集成说明 ## 📋 功能概述 已实现完整的易支付集成功能,包括: - ✅ 订单创建和管理 - ✅ 易支付接口对接 - ✅ 支付回调处理 - ✅ 支付结果页面 - ✅ 订单状态查询 ## 🗄️ 数据库配置 ### 1. 创建订单表 执行以下 SQL 脚本创建订单表: ```bash # 如果使用 Docker PostgreSQL docker exec -i flnxi-postgres psql -U flnxi_user -d flnxi_db < scripts/create_orders_table.sql # 如果使用系统 PostgreSQL psql -U flnxi_user -d flnxi_db -f scripts/create_orders_table.sql ``` 或者直接在数据库中执行 `scripts/create_orders_table.sql` 文件内容。 ### 2. 表结构说明 | 字段 | 类型 | 说明 | |------|------|------| | id | SERIAL | 主键,自增 | | order_no | VARCHAR(64) | 订单号(唯一) | | user_id | INTEGER | 用户ID(外键) | | product_type | VARCHAR(32) | 产品类型:standard/deployment/custom | | product_name | VARCHAR(255) | 产品名称 | | amount | DECIMAL(10,2) | 订单金额 | | status | VARCHAR(32) | 订单状态:pending/paid/failed/cancelled | | payment_method | VARCHAR(32) | 支付方式 | | trade_no | VARCHAR(128) | 第三方交易号 | | callback_data | TEXT | 回调数据(JSON) | | created_at | TIMESTAMP | 创建时间 | | updated_at | TIMESTAMP | 更新时间 | | paid_at | TIMESTAMP | 支付时间 | ## ⚙️ 环境变量配置 在 `.env.local` 文件中添加以下配置: ```env # 易支付配置 EPAY_PID=your_merchant_id # 易支付商户ID EPAY_KEY=your_merchant_key # 易支付商户密钥 EPAY_API_URL=https://your-epay-domain.com/submit.php # 易支付接口地址 # NextAuth配置(如果还没有) NEXTAUTH_URL=https://your-domain.com # 网站域名 NEXTAUTH_SECRET=your_secret_key # NextAuth密钥 ``` ## 🔄 支付流程 ### 1. 用户点击购买 - 用户在产品页面点击"立即购买" - 系统检查登录状态,未登录则跳转登录页 ### 2. 创建订单 - 前端调用 `/api/payment/create` - 后端创建订单记录 - 生成易支付支付参数和签名 - 返回支付表单参数 ### 3. 跳转支付 - 前端自动提交表单到易支付 - 用户完成支付 ### 4. 支付回调 - 易支付调用 `/api/payment/callback` - 验证签名 - 更新订单状态 - 返回 SUCCESS ### 5. 支付结果 - 用户跳转到 `/payment/success` - 页面自动查询订单状态 - 显示支付结果 ## 📁 文件结构 ``` app/ ├── api/ │ └── payment/ │ ├── create/ │ │ └── route.ts # 创建支付订单接口 │ ├── callback/ │ │ └── route.ts # 支付回调接口 │ └── status/ │ └── route.ts # 查询订单状态接口 ├── payment/ │ └── success/ │ └── page.tsx # 支付结果页面 lib/ └── db.ts # 数据库操作(已扩展订单相关函数) components/ └── Pricing.tsx # 定价组件(已集成支付功能) scripts/ └── create_orders_table.sql # 订单表创建脚本 ``` ## 🧪 测试步骤 ### 1. 配置环境变量 确保 `.env.local` 中配置了易支付相关信息。 ### 2. 创建订单表 执行数据库迁移脚本。 ### 3. 测试支付流程 1. 登录账户 2. 访问首页,滚动到定价部分 3. 点击"立即购买"(标准版或远程部署服务) 4. 应该会跳转到易支付页面 5. 完成支付后,会跳转回支付结果页面 ### 4. 测试回调 - 易支付会调用 `/api/payment/callback` - 检查订单状态是否更新为 `paid` ## 🔒 安全说明 1. **签名验证**:所有回调都会验证签名,防止伪造请求 2. **订单验证**:回调时会验证订单是否存在 3. **用户验证**:查询订单时会验证订单是否属于当前用户 4. **幂等性**:已支付的订单不会重复处理 ## 📝 产品配置 在 `app/api/payment/create/route.ts` 中可以配置产品信息: ```typescript const PRODUCTS = { standard: { name: 'FLNXI标准版', price: 599, }, deployment: { name: '远程部署服务', price: 299, }, custom: { name: '定制版咨询', price: 0, // 需要沟通报价 }, } ``` ## 🐛 常见问题 ### 1. 回调签名验证失败 - 检查 `EPAY_KEY` 是否正确 - 确认易支付平台使用的签名算法(当前使用MD5) ### 2. 订单状态未更新 - 检查回调接口是否可访问 - 查看服务器日志确认回调是否收到 - 确认数据库连接正常 ### 3. 支付后未跳转 - 检查 `NEXTAUTH_URL` 配置是否正确 - 确认易支付配置的回调地址正确 ## 📞 技术支持 如有问题,请检查: 1. 服务器日志:`/api/payment/callback` 的调用记录 2. 数据库:订单表的数据是否正确 3. 环境变量:易支付配置是否正确