PHPackages                             lyra-ring-net/oms-api-client - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Logging &amp; Monitoring](/categories/logging)
4. /
5. lyra-ring-net/oms-api-client

ActiveLibrary[Logging &amp; Monitoring](/categories/logging)

lyra-ring-net/oms-api-client
============================

A simple PHP package for logging API requests and responses, with cloud storage support.

v0.1.0(1y ago)04MITPHPPHP ^8.1

Since Nov 3Pushed 1y ago1 watchersCompare

[ Source](https://github.com/tenghongzou/oms-api-client)[ Packagist](https://packagist.org/packages/lyra-ring-net/oms-api-client)[ RSS](/packages/lyra-ring-net-oms-api-client/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependencies (6)Versions (2)Used By (0)

OmsApiClient
============

[](#omsapiclient)

`OmsApiClient` 是一個用於記錄 API 請求和回應的 PHP package，支持將日誌存儲在本地檔案系統、AWS S3、Google Cloud Storage (GCP) 和 Azure Blob Storage 中。

目錄
--

[](#目錄)

- [安裝](#%E5%AE%89%E8%A3%9D)
- [依賴](#%E4%BE%9D%E8%B3%B4)
- [配置](#%E9%85%8D%E7%BD%AE)
- [用法](#%E7%94%A8%E6%B3%95)
    - [本地日誌存儲](#%E6%9C%AC%E5%9C%B0%E6%97%A5%E8%AA%8C%E5%AD%98%E5%84%B2)
    - [AWS S3 日誌存儲](#aws-s3-%E6%97%A5%E8%AA%8C%E5%AD%98%E5%84%B2)
    - [Google Cloud Storage 日誌存儲](#google-cloud-storage-%E6%97%A5%E8%AA%8C%E5%AD%98%E5%84%B2)
    - [Azure Blob Storage 日誌存儲](#azure-blob-storage-%E6%97%A5%E8%AA%8C%E5%AD%98%E5%84%B2)
- [例外處理](#%E4%BE%8B%E5%A4%96%E8%99%95%E7%90%86)
- [開發人員](#%E9%96%8B%E7%99%BC%E4%BA%BA%E5%93%A1)
- [License](#license)

安裝
--

[](#安裝)

1. 安裝 package：

    ```
    composer require lyra-ring-net/oms-api-client
    ```

依賴
--

[](#依賴)

`OmsApiClient` 依賴以下第三方套件：

- **Guzzle**：用於發送 HTTP 請求。
- **AWS SDK**：支持將日誌上傳到 AWS S3。
- **Google Cloud Storage SDK**：支持將日誌上傳到 Google Cloud Storage。
- **Azure Blob Storage SDK**：支持將日誌上傳到 Azure Blob Storage。
- **ramsey/uuid**：生成唯一日誌文件名。

配置
--

[](#配置)

### 環境變量配置

[](#環境變量配置)

建議使用 `.env` 文件來存放敏感配置信息。根據所選儲存平台添加相關配置。

#### AWS S3 配置

[](#aws-s3-配置)

```
AWS_ACCESS_KEY_ID=your-aws-key
AWS_SECRET_ACCESS_KEY=your-aws-secret
AWS_REGION=us-west-2
AWS_BUCKET_NAME=your-bucket-name

```

#### Google Cloud Storage 配置

[](#google-cloud-storage-配置)

```
GCP_KEY_FILE_PATH=/path/to/your-service-account-file.json
GCP_BUCKET_NAME=your-gcp-bucket-name

```

#### Azure Blob Storage 配置

[](#azure-blob-storage-配置)

```
AZURE_ACCOUNT_NAME=your-account-name
AZURE_ACCOUNT_KEY=your-account-key
AZURE_CONTAINER_NAME=your-container-name

```

#### 本地存儲配置

[](#本地存儲配置)

```
LOCAL_STORAGE_PATH=./storage/logs

```

在代碼中載入 `.env` 配置：

```
use Dotenv\Dotenv;

$dotenv = Dotenv::createImmutable(__DIR__);
$dotenv->load();
```

用法
--

[](#用法)

使用 `OmsApiClient` 進行 API 日誌記錄時，需要配置日誌儲存庫。以下是每種日誌存儲方式的使用示例。

### 本地日誌存儲

[](#本地日誌存儲)

以下是在本地檔案系統中存儲日誌的示例。

```
use LyraRingNet\OmsApiClient\Application\Services\ApiClientService;
use LyraRingNet\OmsApiClient\Application\UseCases\LogApiUseCase;
use LyraRingNet\OmsApiClient\Infrastructure\Persistence\LocalLogRepository;

$storagePath = getenv('LOCAL_STORAGE_PATH');
$merchantId = '12345';

$localLogRepository = new LocalLogRepository($storagePath, $merchantId);
$logUseCase = new LogApiUseCase($localLogRepository);
$apiClientService = new ApiClientService($logUseCase, 'https://api.example.com', ['Authorization' => 'Bearer YOUR_API_TOKEN']);

$response = $apiClientService->request('GET', '/users', ['query' => ['page' => 1]]);
print_r($response);
```

### AWS S3 日誌存儲

[](#aws-s3-日誌存儲)

使用 AWS S3 作為日誌儲存的示例：

```
use LyraRingNet\OmsApiClient\Application\Services\ApiClientService;
use LyraRingNet\OmsApiClient\Application\UseCases\LogApiUseCase;
use LyraRingNet\OmsApiClient\Infrastructure\Persistence\AwsS3LogRepository;
use LyraRingNet\OmsApiClient\Infrastructure\Factories\CloudStorageFactory;

$s3Config = [
    'key' => getenv('AWS_ACCESS_KEY_ID'),
    'secret' => getenv('AWS_SECRET_ACCESS_KEY'),
    'region' => getenv('AWS_REGION'),
    'bucket' => getenv('AWS_BUCKET_NAME'),
];

$merchantId = '12345';

// 選擇配置方式 1：傳入配置和 merchantId
$awsS3LogRepository = new AwsS3LogRepository($merchantId, $s3Config);

// 或 選擇配置方式 2：直接傳入 AWS S3 客戶端
$s3Client = CloudStorageFactory::createS3Client($s3Config);
$awsS3LogRepository = new AwsS3LogRepository($merchantId, [], $s3Client);

$logUseCase = new LogApiUseCase($awsS3LogRepository);
$apiClientService = new ApiClientService($logUseCase, 'https://api.example.com', ['Authorization' => 'Bearer YOUR_API_TOKEN']);

// 發送 API 請求並打印回應
$response = $apiClientService->request('GET', '/users', ['query' => ['page' => 1]]);
print_r($response);
```

### Google Cloud Storage 日誌存儲

[](#google-cloud-storage-日誌存儲)

使用 Google Cloud Storage 作為日誌儲存的示例：

```
use LyraRingNet\OmsApiClient\Application\Services\ApiClientService;
use LyraRingNet\OmsApiClient\Application\UseCases\LogApiUseCase;
use LyraRingNet\OmsApiClient\Infrastructure\Persistence\GcpStorageLogRepository;
use LyraRingNet\OmsApiClient\Infrastructure\Factories\CloudStorageFactory;

$gcpConfig = [
    'keyFilePath' => getenv('GCP_KEY_FILE_PATH'),
    'bucketName' => getenv('GCP_BUCKET_NAME'),
];

$merchantId = '12345';
// 選擇配置方式 1：傳入配置和 merchantId
$gcpStorageLogRepository = new GcpStorageLogRepository($merchantId, $gcpConfig);

// 或 選擇配置方式 2：直接傳入 Google Cloud Storage 客戶端
$gcpStorageLogRepository = new GcpStorageLogRepository($merchantId, [], CloudStorageFactory::createGcpClient($gcpConfig));

$logUseCase = new LogApiUseCase($gcpStorageLogRepository);
$apiClientService = new ApiClientService($logUseCase, 'https://api.example.com', ['Authorization' => 'Bearer YOUR_API_TOKEN']);

$response = $apiClientService->request('GET', '/users', ['query' => ['page' => 1]]);
print_r($response);
```

### Azure Blob Storage 日誌存儲

[](#azure-blob-storage-日誌存儲)

使用 Azure Blob Storage 作為日誌儲存的示例：

```
use LyraRingNet\OmsApiClient\Application\Services\ApiClientService;
use LyraRingNet\OmsApiClient\Application\UseCases\LogApiUseCase;
use LyraRingNet\OmsApiClient\Infrastructure\Persistence\AzureBlobLogRepository;
use LyraRingNet\OmsApiClient\Infrastructure\Factories\CloudStorageFactory;

$azureConfig = [
    'accountName' => getenv('AZURE_ACCOUNT_NAME'),
    'accountKey' => getenv('AZURE_ACCOUNT_KEY'),
    'containerName' => getenv('AZURE_CONTAINER_NAME'),
];

$merchantId = '12345';
// 選擇配置方式 1：傳入配置和 merchantId
$azureBlobLogRepository = new AzureBlobLogRepository($merchantId, $azureConfig);

// 或 選擇配置方式 2：直接傳入 Azure Blob Storage 客戶端
$azureBlobLogRepository = new AzureBlobLogRepository($merchantId, [], CloudStorageFactory::createAzureBlobClient($azureConfig));

$logUseCase = new LogApiUseCase($azureBlobLogRepository);
$apiClientService = new ApiClientService($logUseCase, 'https://api.example.com', ['Authorization' => 'Bearer YOUR_API_TOKEN']);

$response = $apiClientService->request('GET', '/users', ['query' => ['page' => 1]]);
print_r($response);
```

例外處理
----

[](#例外處理)

`OmsApiClient` 提供以下自定義例外來幫助捕獲和處理錯誤：

- **ApiRequestException**：此類別用於捕獲 API 請求失敗時的錯誤，並包含 API 回應的內容。
- **JsonEncodingException**：當日誌資料無法成功編碼為 JSON 時拋出。
- **InvalidConfigurationException**：當配置不完整或無效時拋出。

### 捕獲例外示例

[](#捕獲例外示例)

```
try {
    $response = $apiClientService->request('GET', '/users', ['query' => ['page' => 1]]);
    print_r($response);

} catch (ApiRequestException $e) {
    echo "API 請求錯誤: " . $e->getMessage();
    if ($e->getResponse()) {
        echo "\n回應內容: " . $e->getResponse();
    }
} catch (JsonEncodingException $e) {
    echo "JSON 編碼錯誤: " . $e->getMessage();
} catch (InvalidConfigurationException $e) {
    echo "配置錯誤: " . $e->getMessage();
}
```

開發人員
----

[](#開發人員)

- **作者**：LyraRingNet
- **聯絡方式**：

License
-------

[](#license)

`OmsApiClient` 是開源軟體，遵循 MIT 授權條款。詳情請參閱 [LICENSE](./LICENSE) 文件。

###  Health Score

23

—

LowBetter than 27% of packages

Maintenance38

Infrequent updates — may be unmaintained

Popularity3

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity37

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

561d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/66d45e0d658c977639d5d5fe6fdf49e45fff79f9a05b449a2aae0f3fae92260f?d=identicon)[tenghongzou](/maintainers/tenghongzou)

---

Top Contributors

[![tenghongzou](https://avatars.githubusercontent.com/u/63467524?v=4)](https://github.com/tenghongzou "tenghongzou (1 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/lyra-ring-net-oms-api-client/health.svg)

```
[![Health](https://phpackages.com/badges/lyra-ring-net-oms-api-client/health.svg)](https://phpackages.com/packages/lyra-ring-net-oms-api-client)
```

###  Alternatives

[spatie/laravel-health

Monitor the health of a Laravel application

85810.0M83](/packages/spatie-laravel-health)[keboola/storage-api-client

Keboola Storage API PHP Client

10387.5k25](/packages/keboola-storage-api-client)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
