# Kylin Pay

Kylin 支付 SDK 包 — Fork 自 yansongda/pay，支持支付宝/微信/银联/PayPal/Stripe/抖音/JSB 多支付渠道。

## 功能特性

- **支付宝**：V2 接口，网页/APP/H5/扫码/小程序支付、退款、转账、分账、红包、人脸认证、OCR
- **微信支付**：V3 接口，JSAPI/APP/Native/H5/小程序支付、退款、转账、账单
- **银联支付**：Open 接口，网页/H5/扫码/POS 支付、退款、撤销、预授权
- **PayPal**：V2 接口，国际支付、退款、查询
- **Stripe**：V1 接口，信用卡支付、退款、取消、查询
- **抖音支付**：V1 接口，小程序支付、退款、查询
- **JSB 支付**：扫码支付、退款、查询
- **安全机制**：各渠道签名验证、回调处理（CallbackPlugin）、加解密（PKCS7 + AES）
- **结构化日志**：`PayListener` 记录支付发起/完成/HTTP 请求/响应事件，便于审计追溯
- **URL 脱敏**：日志中 URL 自动移除查询参数，防止泄露敏感信息

## 安装

```bash
composer require kylin/pay
```

## 使用示例

### 支付宝网页支付

```php
use Kylin\Pay\Pay;

Pay::config([
    'alipay' => [
        'default' => [
            'app_id' => env('ALIPAY_APP_ID'),
            'app_secret_cert' => env('ALIPAY_APP_SECRET_CERT'),
            'app_public_cert_path' => env('ALIPAY_APP_PUBLIC_CERT_PATH'),
            'alipay_public_cert_path' => env('ALIPAY_PUBLIC_CERT_PATH'),
            'alipay_root_cert_path' => env('ALIPAY_ROOT_CERT_PATH'),
            'return_url' => env('ALIPAY_RETURN_URL'),
            'notify_url' => env('ALIPAY_NOTIFY_URL'),
            'mode' => Pay::MODE_NORMAL,
        ],
    ],
]);

$order = [
    'out_trade_no' => 'ORD202401010001',
    'total_amount' => '1.00',
    'subject' => '商品标题',
];
$result = Pay::alipay()->web($order);
```

### 微信支付 JSAPI

```php
$order = [
    'out_trade_no' => 'ORD202401010001',
    'description' => '商品标题',
    'amount' => ['total' => 100, 'currency' => 'CNY'],
    'payer' => ['openid' => 'o123456789'],
];
$result = Pay::wechat()->mp($order);
```

### 退款

```php
// 支付宝退款
Pay::alipay()->refund([
    'out_trade_no' => 'ORD202401010001',
    'refund_amount' => '1.00',
]);

// 微信退款
Pay::wechat()->refund([
    'out_trade_no' => 'ORD202401010001',
    'out_refund_no' => 'RF202401010001',
    'amount' => ['refund' => 100, 'total' => 100, 'currency' => 'CNY'],
]);
```

### 回调处理

```php
// 支付宝回调
$result = Pay::alipay()->callback($request->all(), $request->header('Authorization'));

// 微信回调
$result = Pay::wechat()->callback($request->all(), $request->header('Wechatpay-Signature'));
```

## 配置说明

```php
// config/kylin-pay.php
return [
    // 日志通道（用于支付事件日志记录）
    'log_channel' => env('PAY_LOG_CHANNEL', 'default'),

    // 支付宝配置
    'alipay' => [...],

    // 微信支付配置
    'wechat' => [...],
];
```

## 日志与审计

`PayListener` 自动记录以下结构化日志：

| 事件 | 级别 | 说明 |
|------|------|------|
| `支付请求发起` | info | 商户订单号、插件链 |
| `支付请求完成` | info | 商户订单号、渠道流水号、交易状态 |
| `支付 HTTP 请求` | debug | 方法、URL（脱敏） |
| `支付 HTTP 响应` | debug | 状态码 |

业务级审计日志（含用户、IP 等）应由上层 `kylin/payment` 包通过监听 `PayStart` / `PayEnd` 事件实现。

## 说明

此包是 `yansongda/pay` 的 Fork 版本，修改了命名空间和部分 API 以适配 Kylin 生态。通常不需要直接使用此包，请使用 `kylin/payment` 包。

## 支持的支付渠道

| 渠道 | 接口版本 | 支付能力 | 退款 | 转账 | 查询 |
|------|------|------|------|------|------|
| 支付宝 | V2 | 网页/APP/H5/扫码/小程序 | ✅ | ✅ | ✅ |
| 微信支付 | V3 | JSAPI/APP/Native/H5/小程序 | ✅ | ✅ | ✅ |
| 银联 | Open | 网页/H5/扫码/POS | ✅ | - | ✅ |
| PayPal | V2 | 支付 | ✅ | - | ✅ |
| Stripe | V1 | 网页 | ✅ | - | ✅ |
| 抖音 | V1 | 小程序 | ✅ | - | ✅ |
| JSB | - | 扫码 | ✅ | - | ✅ |

## 法律合规

详见 [LEGAL.md](./LEGAL.md)，涵盖：
- 《非银行支付机构网络支付业务管理办法》(2016.7.1)
- 银发〔2016〕261号
- 《中华人民共和国个人信息保护法》(2021.11.1)
- PCI DSS 支付卡行业数据安全标准
- 《中华人民共和国网络安全法》(2017.6.1)
- 《中华人民共和国反洗钱法》(2007.1.1)

## 依赖

- PHP ^8.5
- Laravel ^13.0
- yansongda/artful ^1.0
- yansongda/supports ^3.0

## 许可证

私有软件，未经授权禁止使用。
