# Kylin Payment 详细开发文档

## 1. 模块介绍

Kylin Payment 是一个功能强大的 Laravel 支付扩展包，支持多种支付方式，包括支付宝、微信支付、银联支付、抖音支付、江苏银行(e融支付)、支付宝国际版、PayPal、Stripe、Google Pay、Apple Pay等。

### 核心功能

- **多支付方式支持**：支持 10 种主流支付方式
- **沙盒模式**：支持沙盒和正式两种模式
- **支付记录管理**：完善的支付记录管理
- **回调日志**：详细的回调日志记录
- **统计分析**：多维度的统计分析
- **多语言支持**：支持多种语言
- **支付配置缓存**：提高性能
- **支付队列处理**：异步处理支付任务
- **支付场景**：支持多种支付场景
- **支付安全**：增强的支付安全
- **支付SDK版本管理**：管理支付SDK版本
- **支付测试工具**：方便测试
- **支付中间件**：提供支付中间件
- **支付通知**：支付通知功能
- **支付二维码生成**：生成支付二维码
- **支付链接生成**：生成支付链接
- **支付分账**：支持支付分账
- **支付优惠券**：支持支付优惠券

## 2. 安装与配置

### 2.1 安装

使用 Composer 安装 Kylin Payment：

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

### 2.2 配置

#### 2.2.1 发布配置文件

```bash
php artisan vendor:publish --provider="Kylin\Payment\PaymentServiceProvider"
```

#### 2.2.2 配置项说明

配置文件位于 `config/payment.php`，包含以下主要配置项：

- `default`：默认支付方式
- `gateways`：各支付方式的配置，包括：
  - `app_id`：应用ID
  - `app_secret`：应用密钥
  - `private_key`：私钥
  - `public_key`：公钥
  - `notify_url`：通知回调地址
  - `return_url`：页面跳转地址
  - `sandbox`：是否开启沙盒模式
  - `timeout`：超时时间
  - `ip_whitelist`：IP白名单

#### 2.2.3 环境变量配置

你可以在 `.env` 文件中配置支付相关的环境变量：

```env
# 微信支付
WECHAT_APP_ID=your_wechat_app_id
WECHAT_MCH_ID=your_wechat_mch_id
WECHAT_API_KEY=your_wechat_api_key
WECHAT_SANDBOX=false

# 支付宝
ALIPAY_APP_ID=your_alipay_app_id
ALIPAY_PRIVATE_KEY=your_alipay_private_key
ALIPAY_PUBLIC_KEY=your_alipay_public_key
ALIPAY_SANDBOX=false

# 银联支付
UNIONPAY_MER_ID=your_unionpay_mer_id
UNIONPAY_CERT_PATH=your_unionpay_cert_path
UNIONPAY_SANDBOX=false

# 其他支付方式配置...
```

## 3. 目录结构

Kylin Payment 的目录结构如下：

```
kylin/payment/
├── config/            # 配置文件
│   └── payment.php    # 支付配置
├── database/          # 数据库文件
│   └── migrations/    # 迁移文件
├── docs/              # 文档
│   └── API.md         # API文档
├── examples/          # 示例代码
│   └── PaymentExample.php # 支付示例
├── resources/         # 资源文件
│   ├── lang/          # 语言文件
│   └── views/         # 视图文件
├── src/               # 源代码
│   ├── Contracts/     # 接口
│   │   └── GatewayInterface.php # 网关接口
│   ├── Facades/       # 门面
│   │   └── Payment.php # 支付门面
│   ├── Gateways/      # 支付网关
│   │   ├── AbstractGateway.php # 抽象网关
│   │   ├── AlipayGateway.php # 支付宝网关
│   │   ├── AlipayGlobalGateway.php # 支付宝国际版网关
│   │   ├── ApplePayGateway.php # Apple Pay网关
│   │   ├── DouyinGateway.php # 抖音支付网关
│   │   ├── GooglePayGateway.php # Google Pay网关
│   │   ├── JsbankGateway.php # 江苏银行网关
│   │   ├── PaypalGateway.php # PayPal网关
│   │   ├── StripeGateway.php # Stripe网关
│   │   ├── UnionpayGateway.php # 银联支付网关
│   │   └── WechatGateway.php # 微信支付网关
│   ├── Http/          # HTTP相关
│   │   ├── Controllers/ # 控制器
│   │   ├── Middleware/ # 中间件
│   │   └── Routes/    # 路由
│   ├── Jobs/          # 队列任务
│   │   ├── CloseJob.php # 关闭订单任务
│   │   ├── PayJob.php # 支付任务
│   │   ├── QueryJob.php # 查询订单任务
│   │   └── RefundJob.php # 退款任务
│   ├── Models/        # 模型
│   │   ├── PaymentCallbackLog.php # 支付回调日志
│   │   └── PaymentRecord.php # 支付记录
│   ├── Providers/     # 服务提供者
│   │   └── PaymentServiceProvider.php # 支付服务提供者
│   ├── Scenarios/     # 支付场景
│   │   ├── AutomotivePayment.php # 汽车支付
│   │   ├── CrossBorderPayment.php # 跨境支付
│   │   ├── DonationPayment.php # 捐赠支付
│   │   ├── EducationPayment.php # 教育支付
│   │   ├── EnterprisePayment.php # 企业支付
│   │   ├── EntertainmentPayment.php # 娱乐支付
│   │   ├── FinancialPayment.php # 金融支付
│   │   ├── FlashSalePayment.php # 闪购支付
│   │   ├── FoodPayment.php # 食品支付
│   │   ├── GovernmentPayment.php # 政府支付
│   │   ├── GroupPayment.php # 团购支付
│   │   ├── InstallmentPayment.php # 分期付款
│   │   ├── LogisticsPayment.php # 物流支付
│   │   ├── MedicalPayment.php # 医疗支付
│   │   ├── MembershipRechargePayment.php # 会员充值
│   │   ├── PointsExchangePayment.php # 积分兑换
│   │   ├── PreSalePayment.php # 预售支付
│   │   ├── RealEstatePayment.php # 房产支付
│   │   ├── SubscriptionPayment.php # 订阅支付
│   │   ├── TourismPayment.php # 旅游支付
│   │   └── VirtualGoodsPayment.php # 虚拟商品支付
│   ├── Services/      # 服务
│   │   ├── ConfigCacheService.php # 配置缓存服务
│   │   ├── CouponService.php # 优惠券服务
│   │   ├── LanguageService.php # 语言服务
│   │   ├── NotificationService.php # 通知服务
│   │   ├── PaymentBatchOperationService.php # 批量操作服务
│   │   ├── PaymentCallbackLogService.php # 回调日志服务
│   │   ├── PaymentDataMaskingService.php # 数据脱敏服务
│   │   ├── PaymentIntelligentRoutingService.php # 智能路由服务
│   │   ├── PaymentLinkService.php # 支付链接服务
│   │   ├── PaymentNotificationService.php # 支付通知服务
│   │   ├── PaymentPreCreateService.php # 预创建服务
│   │   ├── PaymentRateLimitService.php # 接口限流服务
│   │   ├── PaymentRetryService.php # 重试服务
│   │   ├── PaymentRiskControlService.php # 风控服务
│   │   ├── PaymentScenarioService.php # 场景服务
│   │   ├── PaymentStatisticsService.php # 统计服务
│   │   ├── PaymentTimeoutService.php # 超时处理服务
│   │   ├── PaymentWebhookService.php # Webhook服务
│   │   ├── ProfitSharingService.php # 分账服务
│   │   ├── QrCodeService.php # 二维码服务
│   │   ├── QueueService.php # 队列服务
│   │   ├── ReportService.php # 报表服务
│   │   ├── SecurityService.php # 安全服务
│   │   ├── TestToolService.php # 测试工具服务
│   │   └── VersionManagerService.php # 版本管理服务
│   ├── Payment.php     # 支付类
│   └── PaymentManager.php # 支付管理器
├── tests/             # 测试文件
│   └── Unit/          # 单元测试
├── README.md          # 说明文件
└── composer.json      # 包配置
```

## 4. 核心类

### 4.1 Payment

`Payment` 类是支付的核心类，提供了访问各种支付服务的方法：

```php
<?php

namespace Kylin\Payment;

use Illuminate\Support\Str;
use Kylin\Payment\Facades\Payment as PaymentFacade;

/**
 * 支付类
 */
class Payment
{
    // 核心方法...
}
```

**主要方法**：
- `wechat()`：获取微信支付网关
- `alipay()`：获取支付宝网关
- `unionpay()`：获取银联支付网关
- `douyin()`：获取抖音支付网关
- `jsbank()`：获取江苏银行网关
- `alipayGlobal()`：获取支付宝国际版网关
- `paypal()`：获取PayPal网关
- `stripe()`：获取Stripe网关
- `googlePay()`：获取Google Pay网关
- `applePay()`：获取Apple Pay网关
- `paymentRecord()`：获取支付记录服务
- `statistics()`：获取统计服务
- `lang()`：获取语言服务
- `qrcode()`：获取二维码服务
- `link()`：获取支付链接服务
- `sharing()`：获取分账服务
- `coupon()`：获取优惠券服务
- `queue()`：获取队列服务
- `retry()`：获取重试服务
- `timeout()`：获取超时处理服务
- `preCreate()`：获取预创建服务
- `masking()`：获取数据脱敏服务
- `rateLimit()`：获取接口限流服务
- `webhook()`：获取Webhook服务
- `routing()`：获取智能路由服务
- `batch()`：获取批量操作服务
- `test()`：获取测试工具服务

### 4.2 PaymentManager

`PaymentManager` 类负责管理支付网关和服务：

```php
<?php

namespace Kylin\Payment;

use Illuminate\Container\Container;
use Kylin\Payment\Contracts\GatewayInterface;

/**
 * 支付管理器
 */
class PaymentManager
{
    // 核心方法...
}
```

**主要方法**：
- `createGateway($name)`：创建支付网关
- `getGateway($name)`：获取支付网关
- `getService($name)`：获取支付服务
- `registerGateway($name, $gateway)`：注册支付网关
- `registerService($name, $service)`：注册支付服务

### 4.3 GatewayInterface

`GatewayInterface` 是所有支付网关必须实现的接口：

```php
<?php

namespace Kylin\Payment\Contracts;

/**
 * 网关接口
 */
interface GatewayInterface
{
    /**
     * 发起支付
     */
    public function pay(array $params);

    /**
     * 查询订单
     */
    public function query($orderNo);

    /**
     * 退款
     */
    public function refund(array $params);

    /**
     * 关闭订单
     */
    public function close($orderNo);

    /**
     * 处理回调
     */
    public function callback(array $data);
}
```

## 5. 支付网关

Kylin Payment 支持多种支付网关，每种网关都实现了 `GatewayInterface` 接口：

### 5.1 微信支付

```php
<?php

namespace Kylin\Payment\Gateways;

/**
 * 微信支付网关
 */
class WechatGateway extends AbstractGateway implements GatewayInterface
{
    // 核心方法...
}
```

### 5.2 支付宝

```php
<?php

namespace Kylin\Payment\Gateways;

/**
 * 支付宝网关
 */
class AlipayGateway extends AbstractGateway implements GatewayInterface
{
    // 核心方法...
}
```

### 5.3 银联支付

```php
<?php

namespace Kylin\Payment\Gateways;

/**
 * 银联支付网关
 */
class UnionpayGateway extends AbstractGateway implements GatewayInterface
{
    // 核心方法...
}
```

### 5.4 其他支付网关

- `DouyinGateway`：抖音支付
- `JsbankGateway`：江苏银行
- `AlipayGlobalGateway`：支付宝国际版
- `PaypalGateway`：PayPal
- `StripeGateway`：Stripe
- `GooglePayGateway`：Google Pay
- `ApplePayGateway`：Apple Pay

## 6. 支付场景

Kylin Payment 支持多种支付场景，每种场景都有专门的处理逻辑：

### 6.1 分期付款

```php
<?php

namespace Kylin\Payment\Scenarios;

/**
 * 分期付款
 */
class InstallmentPayment
{
    // 核心方法...
}
```

### 6.2 订阅支付

```php
<?php

namespace Kylin\Payment\Scenarios;

/**
 * 订阅支付
 */
class SubscriptionPayment
{
    // 核心方法...
}
```

### 6.3 其他支付场景

- `AutomotivePayment`：汽车支付
- `CrossBorderPayment`：跨境支付
- `DonationPayment`：捐赠支付
- `EducationPayment`：教育支付
- `EnterprisePayment`：企业支付
- `EntertainmentPayment`：娱乐支付
- `FinancialPayment`：金融支付
- `FlashSalePayment`：闪购支付
- `FoodPayment`：食品支付
- `GovernmentPayment`：政府支付
- `GroupPayment`：团购支付
- `LogisticsPayment`：物流支付
- `MedicalPayment`：医疗支付
- `MembershipRechargePayment`：会员充值
- `PointsExchangePayment`：积分兑换
- `PreSalePayment`：预售支付
- `RealEstatePayment`：房产支付
- `TourismPayment`：旅游支付
- `VirtualGoodsPayment`：虚拟商品支付

## 7. 服务

Kylin Payment 提供了多种服务，用于处理支付相关的各种功能：

### 7.1 支付记录服务

```php
<?php

namespace Kylin\Payment\Services;

/**
 * 支付记录服务
 */
class PaymentRecordService
{
    // 核心方法...
}
```

### 7.2 统计服务

```php
<?php

namespace Kylin\Payment\Services;

/**
 * 统计服务
 */
class PaymentStatisticsService
{
    // 核心方法...
}
```

### 7.3 其他服务

- `ConfigCacheService`：配置缓存服务
- `CouponService`：优惠券服务
- `LanguageService`：语言服务
- `NotificationService`：通知服务
- `PaymentBatchOperationService`：批量操作服务
- `PaymentCallbackLogService`：回调日志服务
- `PaymentDataMaskingService`：数据脱敏服务
- `PaymentIntelligentRoutingService`：智能路由服务
- `PaymentLinkService`：支付链接服务
- `PaymentNotificationService`：支付通知服务
- `PaymentPreCreateService`：预创建服务
- `PaymentRateLimitService`：接口限流服务
- `PaymentRetryService`：重试服务
- `PaymentRiskControlService`：风控服务
- `PaymentScenarioService`：场景服务
- `PaymentTimeoutService`：超时处理服务
- `PaymentWebhookService`：Webhook服务
- `ProfitSharingService`：分账服务
- `QrCodeService`：二维码服务
- `QueueService`：队列服务
- `ReportService`：报表服务
- `SecurityService`：安全服务
- `TestToolService`：测试工具服务
- `VersionManagerService`：版本管理服务

## 8. 命令行工具

Kylin Payment 提供了丰富的命令行工具，用于管理支付相关的功能：

### 8.1 支付记录管理

- `payment:record:list`：列出支付记录
- `payment:record:show`：显示支付记录详情
- `payment:record:update`：更新支付记录
- `payment:record:delete`：删除支付记录

### 8.2 支付统计

- `payment:stats:basic`：获取基础统计数据
- `payment:stats:gateway`：按支付方式统计
- `payment:stats:date`：按日期统计

### 8.3 支付配置

- `payment:config:list`：列出支付配置
- `payment:config:update`：更新支付配置
- `payment:config:cache`：缓存支付配置
- `payment:config:clear-cache`：清除支付配置缓存

### 8.4 支付测试

- `payment:test:gateway`：测试支付网关
- `payment:test:callback`：测试回调处理
- `payment:test:config`：测试支付配置

### 8.5 支付维护

- `payment:maintenance:clean`：清理支付记录
- `payment:maintenance:repair`：修复支付记录
- `payment:maintenance:optimize`：优化支付数据

## 9. 开发指南

### 9.1 基本使用

#### 9.1.1 发起支付

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

// 微信支付
$result = Payment::wechat()->pay([
    'out_trade_no' => 'order_' . time(),
    'total_amount' => 100,
    'subject' => '测试商品',
    'body' => '测试商品描述',
    'trade_type' => 'NATIVE',
]);

// 支付宝
$result = Payment::alipay()->pay([
    'out_trade_no' => 'order_' . time(),
    'total_amount' => 100,
    'subject' => '测试商品',
    'body' => '测试商品描述',
]);

// 银联支付
$result = Payment::unionpay()->pay([
    'out_trade_no' => 'order_' . time(),
    'total_amount' => 100,
    'subject' => '测试商品',
    'body' => '测试商品描述',
]);

// 其他支付方式...
```

#### 9.1.2 查询订单

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

// 查询微信支付订单
$result = Payment::wechat()->query('order_123456');

// 查询支付宝订单
$result = Payment::alipay()->query('order_123456');

// 其他支付方式...
```

#### 9.1.3 退款

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

// 微信支付退款
$result = Payment::wechat()->refund([
    'out_trade_no' => 'order_123456',
    'refund_no' => 'refund_' . time(),
    'refund_amount' => 50,
    'total_amount' => 100,
]);

// 支付宝退款
$result = Payment::alipay()->refund([
    'out_trade_no' => 'order_123456',
    'refund_no' => 'refund_' . time(),
    'refund_amount' => 50,
    'total_amount' => 100,
]);

// 其他支付方式...
```

#### 9.1.4 关闭订单

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

// 关闭微信支付订单
$result = Payment::wechat()->close('order_123456');

// 关闭支付宝订单
$result = Payment::alipay()->close('order_123456');

// 其他支付方式...
```

#### 9.1.5 处理回调

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

// 处理微信支付回调
$data = $request->all();
$result = Payment::wechat()->callback($data);

// 处理支付宝回调
$data = $request->all();
$result = Payment::alipay()->callback($data);

// 其他支付方式...
```

### 9.2 高级功能

#### 9.2.1 支付记录管理

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

// 创建支付记录
$paymentRecord = Payment::paymentRecord()->create([
    'out_trade_no' => 'order_123456',
    'gateway' => 'wechat',
    'amount' => 100,
    'currency' => 'CNY',
    'status' => 'pending',
    'extra' => ['subject' => '测试商品'],
]);

// 更新支付记录状态
Payment::paymentRecord()->updateStatus('order_123456', 'success');

// 查询支付记录
$paymentRecord = Payment::paymentRecord()->findByOutTradeNo('order_123456');
```

#### 9.2.2 统计分析

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

// 获取基础统计数据
$stats = Payment::statistics()->getBasicStats();

// 按支付方式统计
$statsByGateway = Payment::statistics()->getStatsByGateway();

// 按日期统计
$statsByDate = Payment::statistics()->getStatsByDate('2024-01-01', '2024-01-31');
```

#### 9.2.3 多语言支持

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

// 设置语言
Payment::lang()->setLocale('en');

// 获取支付类型翻译
$paymentType = Payment::lang()->transPaymentType('wechat');

// 获取支付状态翻译
$paymentStatus = Payment::lang()->transPaymentStatus('success');
```

#### 9.2.4 支付二维码生成

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

// 生成支付二维码
$qrCode = Payment::qrcode()->generate('https://example.com/pay/123456');

// 生成带参数的二维码
$qrCode = Payment::qrcode()->generate('https://example.com/pay/123456', [
    'size' => 300,
    'margin' => 1,
    'error_correction' => 'M',
]);
```

#### 9.2.5 支付链接生成

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

// 生成支付链接
$paymentLink = Payment::link()->generate('alipay', [
    'out_trade_no' => 'order_123456',
    'total_amount' => 100,
    'subject' => '测试商品',
]);
```

#### 9.2.6 支付分账

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

// 发起分账
$result = Payment::sharing()->share('wechat', [
    'transaction_id' => 'wx123456',
    'out_order_no' => 'share_123456',
    'receivers' => [
        [
            'type' => 'MERCHANT_ID',
            'account' => 'merchant1',
            'amount' => 50,
            'description' => '分账给商家1',
        ],
    ],
]);
```

#### 9.2.7 支付优惠券

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

// 验证优惠券
$isValid = Payment::coupon()->validate($coupon, 100);

// 计算优惠金额
$discount = Payment::coupon()->calculateDiscount($coupon, 100);

// 应用优惠券
$result = Payment::coupon()->apply($coupon, 100);
```

#### 9.2.8 队列处理

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

// 异步发起支付
Payment::queue()->pay('wechat', [
    'out_trade_no' => 'order_123456',
    'total_amount' => 100,
    'subject' => '测试商品',
]);

// 异步查询订单
Payment::queue()->query('wechat', 'order_123456');

// 异步退款
Payment::queue()->refund('wechat', [
    'out_trade_no' => 'order_123456',
    'refund_no' => 'refund_123456',
    'refund_amount' => 50,
]);

// 异步关闭订单
Payment::queue()->close('wechat', 'order_123456');
```

#### 9.2.9 支付重试机制

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

// 创建重试记录
$retryRecord = Payment::retry()->createRetryRecord($paymentRecordId);

// 手动触发重试
Payment::retry()->retry($paymentRecordId);

// 获取重试状态
$status = Payment::retry()->getStatus($paymentRecordId);
```

#### 9.2.10 支付超时处理

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

// 处理超时订单
$count = Payment::timeout()->processTimeoutPayments();

// 检查订单是否超时
$isTimeout = Payment::timeout()->isTimeout($paymentRecordId);

// 获取超时配置
$config = Payment::timeout()->getConfig();
```

#### 9.2.11 支付预创建功能

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

// 预创建支付订单
$preCreateResult = Payment::preCreate()->preCreate('wechat', [
    'out_trade_no' => 'order_123456',
    'total_amount' => 100,
    'subject' => '测试商品',
]);

// 验证预创建订单
$isValid = Payment::preCreate()->validate($preCreateResult['token']);

// 获取预创建订单信息
$info = Payment::preCreate()->getInfo($preCreateResult['token']);
```

#### 9.2.12 支付数据脱敏

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

// 脱敏银行卡号
$maskedCard = Payment::masking()->maskCardNumber('6222021234567890123');

// 脱敏手机号
$maskedPhone = Payment::masking()->maskPhone('13812345678');

// 脱敏邮箱
$maskedEmail = Payment::masking()->maskEmail('user@example.com');

// 脱敏身份证号
$maskedIdCard = Payment::masking()->maskIdCard('110101199001011234');

// 脱敏姓名
$maskedName = Payment::masking()->maskName('张三');
```

#### 9.2.13 支付接口限流

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

// 检查是否超过限流
$isAllowed = Payment::rateLimit()->check('pay', 'user_123');

// 获取限流状态
$status = Payment::rateLimit()->getStatus('pay', 'user_123');

// 清除限流记录
Payment::rateLimit()->clear('pay', 'user_123');
```

#### 9.2.14 支付Webhook

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

// 注册Webhook事件
Payment::webhook()->registerEvent('payment.success', function ($data) {
    // 处理支付成功事件
});

// 触发Webhook事件
Payment::webhook()->triggerEvent('payment.success', $paymentData);

// 获取Webhook配置
$config = Payment::webhook()->getConfig();
```

#### 9.2.15 支付智能路由

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

// 获取推荐的支付方式
$gateway = Payment::routing()->getRecommendedGateway($paymentData);

// 注册路由规则
Payment::routing()->registerRule([
    'name' => '优先使用微信支付',
    'condition' => ['amount' => ['>', 100]],
    'gateway' => 'wechat',
    'priority' => 100,
]);

// 获取路由规则
$rules = Payment::routing()->getRules();
```

#### 9.2.16 支付批量操作

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

// 批量创建支付订单
$results = Payment::batch()->createPayments([
    [
        'payment_type' => 'wechat',
        'out_trade_no' => 'order_123456',
        'total_amount' => 100,
        'subject' => '测试商品1',
    ],
    [
        'payment_type' => 'alipay',
        'out_trade_no' => 'order_123457',
        'total_amount' => 200,
        'subject' => '测试商品2',
    ],
]);

// 批量查询支付状态
$results = Payment::batch()->queryPayments([
    ['payment_type' => 'wechat', 'out_trade_no' => 'order_123456'],
    ['payment_type' => 'alipay', 'out_trade_no' => 'order_123457'],
]);

// 批量退款
$results = Payment::batch()->refundPayments([
    [
        'payment_type' => 'wechat',
        'out_trade_no' => 'order_123456',
        'refund_no' => 'refund_123456',
        'refund_amount' => 50,
    ],
    [
        'payment_type' => 'alipay',
        'out_trade_no' => 'order_123457',
        'refund_no' => 'refund_123457',
        'refund_amount' => 100,
    ],
]);
```

#### 9.2.17 测试工具

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

// 生成测试参数
$testParams = Payment::test()->generateTestParams('wechat');

// 测试支付
$result = Payment::test()->testPay('wechat', $testParams);

// 验证配置
$isValid = Payment::test()->validateConfig('wechat');
```

## 10. 最佳实践

### 10.1 支付安全

- **使用HTTPS**：确保支付相关的接口使用HTTPS协议
- **签名验证**：验证支付回调的签名，防止伪造
- **IP白名单**：配置IP白名单，只允许指定IP访问支付接口
- **数据脱敏**：对敏感数据进行脱敏处理
- **接口限流**：对支付接口进行限流，防止恶意请求

### 10.2 支付流程

- **订单创建**：在发起支付前，先创建订单记录
- **支付发起**：调用支付网关发起支付
- **支付回调**：处理支付回调，更新订单状态
- **订单查询**：定期查询支付状态，确保订单状态一致
- **退款处理**：处理退款请求，更新订单状态

### 10.3 错误处理

- **异常捕获**：捕获支付过程中的异常
- **日志记录**：记录支付过程中的错误信息
- **重试机制**：对失败的支付进行重试
- **告警通知**：对严重错误进行告警通知

### 10.4 性能优化

- **配置缓存**：缓存支付配置，提高性能
- **队列处理**：使用队列处理支付任务，提高并发能力
- **数据库优化**：优化支付相关的数据库查询
- **缓存策略**：合理使用缓存，减少数据库访问

## 11. 常见问题

### 11.1 沙盒模式如何开启？

在配置文件中设置 `sandbox` 为 `true`，或在环境变量中设置对应的 `SANDBOX` 为 `true`。

### 11.2 如何处理回调？

使用 `callback` 方法处理回调，返回 `true` 表示回调成功，否则表示回调失败。

### 11.3 如何配置 IP 白名单？

在配置文件中设置 `ip_whitelist` 数组，或在环境变量中设置对应的 `IP_WHITELIST`。

### 11.4 如何使用队列处理支付？

使用 `queue()` 方法获取队列服务，然后调用相应的方法。

### 11.5 如何生成支付二维码？

使用 `qrcode()` 方法获取二维码服务，然后调用 `generate` 方法。

### 11.6 如何处理支付超时？

使用 `timeout()` 方法获取超时处理服务，然后调用 `processTimeoutPayments` 方法处理超时订单。

### 11.7 如何使用支付分账？

使用 `sharing()` 方法获取分账服务，然后调用 `share` 方法发起分账。

### 11.8 如何使用支付优惠券？

使用 `coupon()` 方法获取优惠券服务，然后调用 `validate`、`calculateDiscount` 和 `apply` 方法。

## 12. 支持的支付方式

| 支付方式 | 配置键 | 说明 |
|---------|--------|------|
| 微信支付 | wechat | 支持扫码支付、H5支付、APP支付等 |
| 支付宝 | alipay | 支持扫码支付、手机网站支付、APP支付等 |
| 银联支付 | unionpay | 支持网关支付、手机支付等 |
| 抖音支付 | douyin | 支持抖音平台内支付 |
| 江苏银行 | jsbank | 支持江苏银行e融支付 |
| 支付宝国际版 | alipay_global | 支持国际支付 |
| PayPal | paypal | 支持国际支付 |
| Stripe | stripe | 支持国际支付 |
| Google Pay | google_pay | 支持谷歌支付 |
| Apple Pay | apple_pay | 支持苹果支付 |

## 13. 总结

Kylin Payment 是一个功能强大的 Laravel 支付扩展包，它提供了丰富的功能和工具，使得支付集成变得简单和高效。通过使用 Kylin Payment，您可以：

- 支持多种支付方式，满足不同场景的需求
- 提供完善的支付记录管理和统计分析
- 支持多种支付场景，如分期付款、订阅支付等
- 提供丰富的服务，如支付二维码生成、支付链接生成、支付分账等
- 支持多语言，满足国际化需求
- 提供完善的安全措施，保障支付安全
- 提供丰富的命令行工具，方便管理和维护

Kylin Payment 是构建支付系统的理想选择，它可以帮助您快速集成各种支付方式，提高开发效率，降低维护成本。

## 14. 参考资源

- [Laravel 官方文档](https://laravel.com/docs)
- [Kylin Payment GitHub 仓库](https://github.com/kylin-framework/payment)
- [微信支付官方文档](https://pay.weixin.qq.com/wiki/doc/api/index.html)
- [支付宝官方文档](https://open.alipay.com/develop/doc)
- [银联支付官方文档](https://open.unionpay.com/tjweb/doc/)
- [PayPal 官方文档](https://developer.paypal.com/docs/)
- [Stripe 官方文档](https://stripe.com/docs)
