# Kylin Payment 模块介绍

## 1. 模块概述

Kylin Payment 是一个基于 Laravel 框架的支付模块，支持多种支付方式，如微信支付、支付宝支付、银联支付等，提供了统一的支付接口和管理功能。

## 2. 核心功能

- **支付管理**：支持多种支付方式的配置和管理
- **订单管理**：处理支付订单的创建、查询、更新和删除
- **退款管理**：处理支付退款的申请、查询和管理
- **支付记录**：记录支付的详细信息和状态
- **支付通知**：处理支付结果的异步通知
- **支付工具**：提供支付相关的工具函数

## 3. 支付方式

- **微信支付**：支持公众号支付、小程序支付、扫码支付、APP支付等
- **支付宝支付**：支持电脑网站支付、手机网站支付、APP支付、扫码支付等
- **银联支付**：支持银联云闪付、银联在线支付等
- **其他支付**：支持其他第三方支付方式

## 4. 架构设计

### 4.1 目录结构

```
payment/
├── config/
│   └── payment.php
├── src/
│   ├── Services/
│   │   ├── PaymentService.php
│   │   ├── WechatPaymentService.php
│   │   ├── AlipayPaymentService.php
│   │   ├── UnionPayPaymentService.php
│   │   └── PaymentRecordService.php
│   ├── Models/
│   │   ├── PaymentOrder.php
│   │   └── PaymentRefund.php
│   ├── Events/
│   │   ├── PaymentCreated.php
│   │   ├── PaymentSuccess.php
│   │   └── PaymentFailed.php
│   ├── Listeners/
│   │   ├── HandlePaymentSuccess.php
│   │   └── HandlePaymentFailed.php
│   └── Providers/
│       └── PaymentServiceProvider.php
└── docs/
    ├── introduction.md
    ├── installation.md
    ├── payment_methods.md
    ├── order_management.md
    ├── refund_management.md
    ├── payment_records.md
    ├── payment_notifications.md
    └── index.md
```

### 4.2 核心类

- **PaymentService**：支付服务基类，定义了支付的基本接口
- **WechatPaymentService**：微信支付服务，处理微信支付相关的操作
- **AlipayPaymentService**：支付宝支付服务，处理支付宝支付相关的操作
- **UnionPayPaymentService**：银联支付服务，处理银联支付相关的操作
- **PaymentRecordService**：支付记录服务，处理支付记录的创建和查询

### 4.3 数据流

1. **创建订单**：用户发起支付请求，创建支付订单
2. **发起支付**：调用支付服务发起支付
3. **支付处理**：用户完成支付，支付平台处理支付
4. **支付通知**：支付平台发送支付结果通知
5. **更新订单**：根据支付通知更新订单状态
6. **记录支付**：记录支付的详细信息

## 5. 优势

- **统一接口**：提供统一的支付接口，简化支付集成
- **多支付方式**：支持多种支付方式，满足不同场景需求
- **灵活配置**：支持支付方式的灵活配置
- **完善的记录**：详细记录支付的每一步操作
- **事件系统**：通过事件系统处理支付相关的业务逻辑
- **易于扩展**：支持添加新的支付方式

## 6. 适用场景

- **电商网站**：处理商品购买的支付
- **会员系统**：处理会员充值的支付
- **在线服务**：处理服务费用的支付
- **线下支付**：处理线下场景的支付
- **跨境支付**：处理跨境交易的支付

## 7. 与其他支付系统的比较

| 特性 | Kylin Payment | Laravel Cashier | Omnipay |
|------|---------------|-----------------|---------|
| 框架支持 | Laravel 8+ | Laravel 8+ | 多框架 |
| 支付方式 | 微信、支付宝、银联等 | Stripe、Braintree | 多种支付方式 |
| 订单管理 | 支持 | 支持 | 有限支持 |
| 退款管理 | 支持 | 支持 | 有限支持 |
| 支付记录 | 详细 | 基本 | 有限 |
| 事件系统 | 支持 | 支持 | 有限 |
| 扩展能力 | 强 | 中等 | 强 |

## 8. 快速开始

### 8.1 安装

```bash
composer require kylin/payment
```

### 8.2 配置

在 `config/payment.php` 文件中配置支付相关参数：

```php
return [
    'default' => 'wechat',
    'methods' => [
        'wechat' => [
            'app_id' => env('WECHAT_PAYMENT_APPID', ''),
            'mch_id' => env('WECHAT_PAYMENT_MCH_ID', ''),
            'key' => env('WECHAT_PAYMENT_KEY', ''),
            'cert_path' => env('WECHAT_PAYMENT_CERT_PATH', ''),
            'key_path' => env('WECHAT_PAYMENT_KEY_PATH', ''),
        ],
        'alipay' => [
            'app_id' => env('ALIPAY_APPID', ''),
            'private_key' => env('ALIPAY_PRIVATE_KEY', ''),
            'public_key' => env('ALIPAY_PUBLIC_KEY', ''),
        ],
    ],
];
```

### 8.3 使用示例

```php
use Kylin\Payment\Facades\Payment;

// 创建支付订单
$order = Payment::create([
    'order_no' => '202401010001',
    'amount' => 100,
    'subject' => '测试商品',
    'body' => '测试商品描述',
    'method' => 'wechat',
    'extra' => [
        'openid' => 'openid123',
    ],
]);

// 发起支付
$paymentUrl = Payment::pay($order['order_no']);

// 处理支付通知
$notification = Payment::handleNotification(function ($data) {
    // 处理支付通知
    return true;
});
```

## 9. 总结

Kylin Payment 是一个功能强大的支付模块，为 Laravel 应用提供了统一的支付接口和管理功能。通过支持多种支付方式和完善的订单管理，可以满足不同场景的支付需求，提高开发效率和用户体验。
