# 支付宝支付集成准备指南 ## 一、必需准备项 ### 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 com.github.javen205 IJPay-AliPay 2.9.12.1 ``` ## 二、配置文件设置 ### 开发环境配置(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