pay Agent Skills & AI Rules

GitHub

可能是我用过的最优雅的 Alipay/WeChat/Douyin/Unipay/江苏银行 的支付 SDK 扩展包了

5,372 stars PHP PHP 61 files · ~58,637 tokens #alipay#douyin#laravel-pay#pay#payment#php#unipay#wechat
RAW Rules
5 Discovered Rules • ~11,231 Estimated Tokens
Quick:
Loading skill content...

AI Agent Protocol & Instructions

AGENTS.md root-instruction ~1,013 tokens
Raw
# yansongda/pay AGENTS.md

## OVERVIEW
PHP 支付 SDK,支持支付宝、微信、银联、抖音、江苏银行、PayPal、Stripe。基于插件管道架构,关注支付流程、回调验签和 Provider 扩展一致性。

## STRUCTURE
```
src/
├── Config/           # Typed Config(WechatConfig、AlipayConfig 等)
├── Event/            # PSR-14 事件
├── Plugin/{Provider}/V{n}/
├── Provider/         # Alipay、Wechat 等
├── Shortcut/{Provider}/
├── Traits/           # {Provider}Trait、ProviderConfigTrait
├── CertManager.php   # 证书缓存
└── Pay.php
```

## 核心组件
| 符号 | 位置 | 用途 |
|---|---|---|
| `Pay::alipay()` | `Pay.php` | 支付入口 |
| `Pay::wechat()` | `Pay.php` | 微信入口 |
| `ProviderInterface` | `Contract/` | 核心接口(pay/query/cancel/close/refund/callback/success) |
| `Rocket` | `Yansongda\Artful\Rocket` | 承载 params/payload/radar/destination |
| `CertManager` | `CertManager.php` | 证书读取与缓存 |
| `Event` | `Event.php` | PSR-14 事件分发 |
| `{Provider}Config` | `Config/` | 类型化配置对象 |

## 核心原则
- **安全第一**:回调/Webhook 必须验签,禁止直接信任传入数据
- **代码一致性**:新增 Provider 遵循现有结构

## COMMANDS & 开发规范
详见 `.agents/skills/dev-guide/SKILL.md`,使用时加载。

## 架构要点
- **插件管道**:`StartPlugin → [前置] → 业务插件 → [后置] → ParserPlugin`
- **动态调用**:Provider 通过 `__call` 调用 Shortcut,再进入管道
- **配置系统**:`Config` 类自动将数组配置转为 `{Provider}Config` 对象
- **事件系统**:`PayListener` 桥接 Artful 事件 → Pay 事件

## 签名验证(必须)
| Provider | 方式 | Trait 方法 |
|---|---|---|
| 支付宝 | RSA 本地验证 | `AlipayTrait::verifyAlipaySign()` |
| 微信 | 证书签名本地验证 | `WechatTrait::verifyWechatSign()` |
| PayPal | API 验证 | `PaypalTrait::verifyPaypalWebhookSign()` |
| Stripe | HMAC-SHA256 本地 | `StripeTrait::verifyStripeWebhookSign()` |
| 银联 | 证书签名本地验证 | `UnipayTrait::verifyUnipaySign()` |
| 江苏银行 | RSA 本地验证 | `JsbTrait::verifyJsbSign()` |
| 抖音 | SHA1 本地验证 | `CallbackPlugin::verifySign()` |
| 通联支付 | RSA-SHA1 本地验证 | `AllinpayTrait::verifyAllinpaySign()` |

回调处理差异:
- **Wechat/Stripe/Paypal**:传 `_request`(ServerRequestInterface)到 CallbackPlugin
- **Alipay/Douyin/Unipay/Jsb/Allinpay**:通过 `getCallbackParams()` 获取 Collection

## Trait 参考
| 用途 | 方法(示例) |
|---|---|
| 配置获取 | `ProviderConfigTrait::getProviderConfig()`、`getTenant()`、`getRadarUrl()` |
| URL 构建 | `get{Provider}Url()`(各 Trait) |
| 签名验证 | `verify{Provider}Sign()`、`verify{Provider}WebhookSign()` |
| 证书管理 | `CertManager::getPublicCert()`、`getPrivateCert()` |
| 微信专用 | `decryptWechatResource()`、`reloadWechatPublicCerts()` |

> 完整方法列表见 `src/Traits/{Provider}Trait.php`