UniRate-API/payload-plugin-unirate
GitHub: UniRate-API/payload-plugin-unirate
Payload CMS v3 插件,通过服务端代理接入 UniRate 汇率 API,为应用提供汇率查询、金额转换、货币列表和 VAT 税率功能。
Stars: 0 | Forks: 0
# payload-plugin-unirate
一个集成了 [UniRate API](https://unirateapi.com)(用于货币汇率和 VAT 数据)的 [Payload CMS](https://payloadcms.com) **v3** 插件。
它会在 `/api/unirate` 下追加四个服务端 endpoint,并提供了一个可选的预填充货币 `select` 字段——你的 API key 仅保留在服务端,绝不会暴露给客户端。**零运行时依赖**(`payload` 为 peer dependency)。
## 安装
```
npm install payload-plugin-unirate
```
要求 Payload `>=3.0.0`(peer dependency)以及 Node `>=18.20`。
## 快速开始
```
// payload.config.ts
import { buildConfig } from "payload";
import { uniratePlugin } from "payload-plugin-unirate";
export default buildConfig({
// ...your usual config
plugins: [
uniratePlugin({
apiKey: process.env.UNIRATE_API_KEY, // or omit and set the env var
}),
],
});
```
设置你的 key(推荐方式,优于直接内联):
```
UNIRATE_API_KEY=your_key_here
```
## 选项
`uniratePlugin(options)`:
| 选项 | 类型 | 默认值 | 描述 |
|--------|------|---------|-------------|
| `apiKey` | `string` | `process.env.UNIRATE_API_KEY` | UniRate API key(保留在服务端)。 |
| `baseUrl` | `string` | `https://api.unirateapi.com` | API 基础 URL。 |
| `disabled` | `boolean` | `false` | 当为 `true` 时,插件将不执行任何操作,且不会添加任何 endpoint。 |
| `timeoutMs` | `number` | `30000` | 单次请求超时时间。 |
## Endpoint
插件会追加以下自定义 endpoint(Payload 会在 `/api` 前缀下提供自定义 endpoint):
| 方法 | 路径 | 描述 |
|--------|------|-------------|
| GET | `/api/unirate/rate?from=USD&to=EUR` | 汇率(单个汇率,或在省略 `to` 时返回基础货币的所有汇率) |
| GET | `/api/unirate/convert?from=USD&to=EUR&amount=100` | 转换金额 |
| GET | `/api/unirate/currencies` | 列出支持的货币 |
| GET | `/api/unirate/vat?country=DE` | VAT 税率(可选的国家过滤器) |
示例:
```
curl "http://localhost:3000/api/unirate/convert?from=USD&to=EUR&amount=100"
# → { "from": "USD", "to": "EUR", "amount": 100, "result": 92.00 }
```
当未配置 API key 时,endpoint 会响应 `503`(并记录警告日志),而不会在启动时崩溃。
## 货币选择字段
导出的 helper 构建了一个预填充了常见 ISO-4217 货币代码的 Payload `select` 字段:
```
import { currencyField } from "payload-plugin-unirate";
const Products = {
slug: "products",
fields: [
{ name: "title", type: "text" },
currencyField({ name: "priceCurrency", defaultValue: "USD", required: true }),
],
};
```
传入 `options: ["USD", "EUR", ...]` 可覆盖代码列表,或者从 `/api/unirate/currencies` 获取实时列表。
## 错误处理
Endpoint 响应会将上游 UniRate 错误映射到相应的 HTTP 状态码:
| 状态码 | 含义 |
|--------|---------|
| 400 | 无效的请求参数 |
| 401 | 缺少或无效的 API key |
| 403 | Endpoint 需要 Pro 订阅 |
| 404 | 未找到货币 / 无数据 |
| 429 | 超出速率限制 |
| 503 | 服务不可用 / 插件未配置 |
| 502 | 上游/传输失败 |
内部 client 及其带类型的错误类也已导出,可直接在 hook 或自定义 endpoint 中使用:
```
import { UniRateClient, AuthenticationError, RateLimitError, ProRequiredError } from "payload-plugin-unirate";
const client = new UniRateClient({ apiKey: process.env.UNIRATE_API_KEY! });
try {
const rate = await client.getRate("USD", "EUR"); // → 0.92
} catch (err) {
if (err instanceof AuthenticationError) { /* invalid key */ }
if (err instanceof RateLimitError) { /* slow down */ }
if (err instanceof ProRequiredError) { /* upgrade plan */ }
}
```
## 免费版与 Pro 版
免费版 endpoint:汇率、转换、货币、VAT 税率。历史数据和时间序列需要 [Pro 订阅](https://unirateapi.com/pricing)。
## 相关包
**UniRate API 客户端库:** [Python](https://github.com/UniRate-API/unirate-api-python) · [Node.js](https://github.com/UniRate-API/unirate-api-nodejs) · [Go](https://github.com/UniRate-API/unirate-api-go) · [Rust](https://github.com/UniRate-API/unirate-api-rust) · [Ruby](https://github.com/UniRate-API/unirate-api-ruby) · [PHP](https://github.com/UniRate-API/unirate-api-php) · [Java](https://github.com/UniRate-API/unirate-api-java) · [Swift](https://github.com/UniRate-API/unirate-api-swift) · [.NET](https://github.com/UniRate-API/unirate-api-dotnet)
**框架集成:** [Next.js](https://github.com/UniRate-API/next-unirate) · [Nuxt](https://github.com/UniRate-API/nuxt-unirate) · [SvelteKit](https://github.com/UniRate-API/sveltekit-unirate) · [Astro](https://github.com/UniRate-API/astro-unirate) · [NestJS](https://github.com/UniRate-API/nestjs-unirate) · [Eleventy](https://github.com/UniRate-API/eleventy-unirate) · [React](https://github.com/UniRate-API/react-unirate) · [Vue](https://github.com/UniRate-API/vue-unirate) · [tRPC](https://github.com/UniRate-API/trpc-unirate)
**CMS 与电商:** [WordPress](https://github.com/UniRate-API/unirate-currency-converter) · [Directus](https://github.com/UniRate-API/directus-extension-unirate) · [Strapi](https://github.com/UniRate-API/strapi-plugin-unirate) · **Payload**(本包) · [Medusa](https://github.com/UniRate-API/medusa-plugin-unirate) · [Hugo](https://github.com/UniRate-API/hugo-unirate) · [Jekyll](https://github.com/UniRate-API/jekyll-unirate)
**数据与 AI:** [LangChain Python](https://github.com/UniRate-API/langchain-unirate) · [LangChain.js](https://github.com/UniRate-API/langchain-js-unirate) · [FastAPI](https://github.com/UniRate-API/fastapi-unirate) · [Flask](https://github.com/UniRate-API/flask-unirate) · [Django REST](https://github.com/UniRate-API/djangorestframework-unirate) · [dbt](https://github.com/UniRate-API/dbt-unirate) · [Airflow](https://github.com/UniRate-API/airflow-provider-unirate)
**其他:** [MCP server](https://github.com/UniRate-API/unirate-mcp) · [CLI](https://github.com/UniRate-API/unirate-cli) · [Obsidian](https://github.com/UniRate-API/obsidian-currency) · [money gem](https://github.com/UniRate-API/money-unirate-api) · [laravel-money](https://github.com/UniRate-API/laravel-money-unirate)
## 许可证
MIT © Unirate Team
标签:MITM代理, Payload CMS, Syscall, Web开发, 插件, 数据集成, 汇率API, 自动化攻击