mirror of
https://gitee.com/ShopeX/ECShopX
synced 2026-05-13 01:45:56 +08:00
191 lines
6.7 KiB
Markdown
191 lines
6.7 KiB
Markdown
# PayPal 支付集成测试指南
|
||
|
||
本文档提供了 PayPal 支付集成的测试指南,包括沙箱环境测试和生产环境配置。
|
||
|
||
## 沙箱环境测试
|
||
|
||
### 1. 创建 PayPal 开发者账号
|
||
|
||
1. 访问 [PayPal 开发者网站](https://developer.paypal.com/)
|
||
2. 点击右上角的 "Log in to Dashboard",使用您的 PayPal 账号登录或注册新账号
|
||
3. 登录后,您将进入 PayPal 开发者控制台
|
||
|
||
### 2. 创建沙箱测试账号
|
||
|
||
1. 在开发者控制台中,点击左侧菜单的 "Sandbox" > "Accounts"
|
||
2. 点击 "Create account" 按钮
|
||
3. 创建两种类型的账号:
|
||
- **Business 账号**:作为商家接收付款
|
||
- **Personal 账号**:作为买家进行支付测试
|
||
4. 记录下这些测试账号的邮箱和密码,以便后续测试使用
|
||
|
||
### 3. 创建 PayPal 应用
|
||
|
||
1. 在开发者控制台中,点击左侧菜单的 "My Apps & Credentials"
|
||
2. 在 "REST API apps" 部分,点击 "Create App" 按钮
|
||
3. 输入应用名称(如 "ECSHOPX PayPal Integration")
|
||
4. 选择刚才创建的商家账号作为 Sandbox Business Account
|
||
5. 点击 "Create App" 按钮完成创建
|
||
6. 创建完成后,您将获得 Client ID 和 Secret,记录这些信息用于配置
|
||
|
||
### 4. 配置 Webhook
|
||
|
||
1. 在应用详情页面,滚动到 "Webhooks" 部分
|
||
2. 点击 "Add Webhook" 按钮
|
||
3. 输入您的 Webhook URL(例如:`https://your-domain.com/payment/paypal/webhook`)
|
||
4. 选择需要接收的事件类型,建议至少选择以下事件:
|
||
- PAYMENT.SALE.COMPLETED
|
||
- PAYMENT.SALE.REFUNDED
|
||
- PAYMENT.SALE.REVERSED
|
||
5. 点击 "Save" 按钮保存配置
|
||
6. 记录生成的 Webhook ID,这将用于验证 Webhook 请求
|
||
|
||
### 5. 配置项目
|
||
|
||
1. 在项目中安装 PayPal PHP SDK:
|
||
```bash
|
||
composer require paypal/rest-api-sdk-php
|
||
```
|
||
|
||
2. 在项目中配置 PayPal 参数:
|
||
- Client ID
|
||
- Client Secret
|
||
- Sandbox 模式(设置为 true)
|
||
- Webhook ID
|
||
|
||
3. 确保 PayPal 回调 URL 已正确配置在路由中
|
||
|
||
### 6. 测试支付流程
|
||
|
||
1. **基本支付流程测试**:
|
||
- 创建订单并选择 PayPal 支付方式
|
||
- 点击支付按钮,应该会重定向到 PayPal 登录页面
|
||
- 使用之前创建的沙箱个人账号登录
|
||
- 确认支付
|
||
- 验证是否成功重定向回商店并显示支付成功信息
|
||
- 检查订单状态是否已更新为已支付
|
||
|
||
2. **取消支付测试**:
|
||
- 在 PayPal 支付页面点击取消按钮
|
||
- 验证是否成功重定向回商店并显示取消支付信息
|
||
- 检查订单状态是否仍为未支付
|
||
|
||
3. **退款测试**:
|
||
- 对已完成的订单发起退款
|
||
- 验证退款是否成功处理
|
||
- 检查退款状态是否正确更新
|
||
|
||
4. **Webhook 测试**:
|
||
- 在 PayPal 开发者控制台中,找到您的应用
|
||
- 点击 "Webhooks" 部分的 "Simulator"
|
||
- 选择要模拟的事件类型(如 PAYMENT.SALE.COMPLETED)
|
||
- 输入相关参数
|
||
- 点击 "Send test webhook" 按钮
|
||
- 验证您的系统是否正确处理了 Webhook 请求
|
||
|
||
### 7. 常见问题排查
|
||
|
||
1. **支付创建失败**:
|
||
- 检查 PayPal 配置是否正确(Client ID 和 Secret)
|
||
- 查看日志文件 `storage/logs/paypal.log` 获取详细错误信息
|
||
|
||
2. **回调处理失败**:
|
||
- 确保回调 URL 可以从外网访问
|
||
- 检查 PayerID 和 PaymentID 是否正确传递
|
||
|
||
3. **Webhook 验证失败**:
|
||
- 确保 Webhook ID 配置正确
|
||
- 检查 Webhook URL 是否可以从外网访问
|
||
- 验证请求头中的签名信息是否完整
|
||
|
||
## 生产环境配置
|
||
|
||
### 1. 创建生产应用
|
||
|
||
1. 在 PayPal 开发者控制台中,点击左侧菜单的 "My Apps & Credentials"
|
||
2. 切换到 "Live" 标签
|
||
3. 点击 "Create App" 按钮
|
||
4. 输入应用名称(如 "ECSHOPX PayPal Integration")
|
||
5. 点击 "Create App" 按钮完成创建
|
||
6. 记录生产环境的 Client ID 和 Secret
|
||
|
||
### 2. 配置生产 Webhook
|
||
|
||
1. 在生产应用详情页面,滚动到 "Webhooks" 部分
|
||
2. 点击 "Add Webhook" 按钮
|
||
3. 输入您的生产环境 Webhook URL
|
||
4. 选择需要接收的事件类型(与沙箱环境相同)
|
||
5. 点击 "Save" 按钮保存配置
|
||
6. 记录生成的 Webhook ID
|
||
|
||
### 3. 更新项目配置
|
||
|
||
1. 更新项目中的 PayPal 配置:
|
||
- 替换为生产环境的 Client ID 和 Secret
|
||
- 将 Sandbox 模式设置为 false
|
||
- 更新为生产环境的 Webhook ID
|
||
|
||
2. 确保所有 URL 都使用 HTTPS 协议
|
||
|
||
3. 确保日志级别适合生产环境(建议设置为 INFO 或 ERROR)
|
||
|
||
### 4. 安全检查清单
|
||
|
||
在部署到生产环境前,请确保完成以下安全检查:
|
||
|
||
1. **SSL 证书**:确保网站使用有效的 SSL 证书,所有支付相关页面都通过 HTTPS 访问
|
||
|
||
2. **敏感信息保护**:
|
||
- Client Secret 不应该出现在客户端代码中
|
||
- 支付相关日志不应包含敏感信息
|
||
- Redis 中存储的配置信息应该加密
|
||
|
||
3. **错误处理**:
|
||
- 生产环境中不应该向用户显示详细的错误信息
|
||
- 所有异常应该被记录到日志中,但向用户展示友好的错误消息
|
||
|
||
4. **防重复提交**:
|
||
- 实现防重复提交机制,避免重复支付
|
||
- 使用交易 ID 确保每笔交易只处理一次
|
||
|
||
5. **数据验证**:
|
||
- 验证所有来自 PayPal 的回调数据
|
||
- 验证金额是否与订单金额匹配
|
||
- 验证货币类型是否正确
|
||
|
||
### 5. 上线前最终测试
|
||
|
||
1. 使用生产配置在测试环境进行最终测试
|
||
2. 执行小额真实支付测试,验证整个流程
|
||
3. 测试退款流程
|
||
4. 确认 Webhook 能够正常接收和处理
|
||
|
||
### 6. 监控和维护
|
||
|
||
1. 设置监控系统,监控支付流程的关键指标:
|
||
- 支付成功率
|
||
- 支付处理时间
|
||
- 错误率
|
||
|
||
2. 定期检查 PayPal 开发者文档,了解 API 变更和安全更新
|
||
|
||
3. 定期检查 PayPal 账户状态和交易记录,确保与系统记录一致
|
||
|
||
## 常见错误代码和解决方案
|
||
|
||
| 错误代码 | 描述 | 解决方案 |
|
||
|---------|------|---------|
|
||
| VALIDATION_ERROR | 请求参数验证失败 | 检查请求参数是否符合 PayPal API 要求 |
|
||
| INVALID_REQUEST | 无效的请求 | 检查请求格式和内容是否正确 |
|
||
| AUTHENTICATION_FAILURE | 认证失败 | 检查 Client ID 和 Secret 是否正确 |
|
||
| AUTHORIZATION_ERROR | 授权失败 | 检查应用权限是否配置正确 |
|
||
| EXPIRED_CREDIT_CARD | 信用卡已过期 | 通知用户更新支付方式 |
|
||
| INSUFFICIENT_FUNDS | 资金不足 | 通知用户选择其他支付方式 |
|
||
| INTERNAL_SERVICE_ERROR | PayPal 内部服务错误 | 稍后重试或联系 PayPal 支持 |
|
||
|
||
## 参考资料
|
||
|
||
1. [PayPal 开发者文档](https://developer.paypal.com/docs/api/overview/)
|
||
2. [PayPal REST API 参考](https://developer.paypal.com/api/rest/)
|
||
3. [PayPal PHP SDK 文档](https://github.com/paypal/PayPal-PHP-SDK/wiki)
|
||
4. [PayPal Webhook 指南](https://developer.paypal.com/docs/api-basics/notifications/webhooks/) |